grpc 1.36.0 → 1.38.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 +126 -92
- data/include/grpc/event_engine/README.md +38 -0
- data/include/grpc/event_engine/channel_args.h +28 -0
- data/include/grpc/event_engine/event_engine.h +336 -0
- data/include/grpc/event_engine/port.h +39 -0
- data/include/grpc/event_engine/slice_allocator.h +81 -0
- data/include/grpc/grpc.h +15 -1
- data/include/grpc/grpc_security_constants.h +14 -0
- data/include/grpc/impl/codegen/grpc_types.h +11 -0
- data/include/grpc/impl/codegen/port_platform.h +7 -0
- data/include/grpc/module.modulemap +14 -14
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
- data/src/core/ext/filters/client_channel/client_channel.cc +715 -3166
- data/src/core/ext/filters/client_channel/client_channel.h +489 -55
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
- data/src/core/ext/filters/client_channel/config_selector.h +9 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +18 -14
- data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -142
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
- data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
- data/src/core/ext/filters/client_channel/lb_policy.cc +4 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +23 -0
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +27 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +36 -30
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +29 -44
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +32 -47
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +86 -63
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
- data/src/core/ext/filters/client_channel/resolver.cc +3 -0
- data/src/core/ext/filters/client_channel/resolver.h +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +17 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +38 -33
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -9
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +31 -14
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +334 -114
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
- data/src/core/ext/filters/client_channel/retry_filter.cc +2188 -0
- data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
- data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
- data/src/core/ext/filters/client_channel/server_address.cc +4 -1
- data/src/core/ext/filters/client_channel/service_config.cc +15 -14
- data/src/core/ext/filters/client_channel/service_config.h +7 -6
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
- data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
- data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
- data/src/core/ext/filters/client_channel/subchannel.cc +86 -162
- data/src/core/ext/filters/client_channel/subchannel.h +68 -99
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +10 -8
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
- data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +501 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
- data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
- data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
- data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
- data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
- data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
- data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +5 -4
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +8 -8
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +5 -4
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +2 -2
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +6 -5
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +485 -199
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +3 -3
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +167 -122
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +13 -9
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +32 -27
- data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
- data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +350 -0
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1348 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +6 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +25 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +44 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +78 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +281 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +113 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +6 -5
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +13 -9
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +93 -0
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +323 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +383 -0
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +115 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +10 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +13 -7
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +120 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +76 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +21 -20
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +130 -0
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
- data/src/core/ext/xds/certificate_provider_factory.h +1 -1
- data/src/core/ext/xds/certificate_provider_store.h +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
- data/src/core/ext/xds/xds_api.cc +1649 -329
- data/src/core/ext/xds/xds_api.h +284 -44
- data/src/core/ext/xds/xds_bootstrap.cc +110 -156
- data/src/core/ext/xds/xds_bootstrap.h +24 -25
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
- data/src/core/ext/xds/xds_certificate_provider.h +4 -4
- data/src/core/ext/xds/xds_channel_args.h +5 -2
- data/src/core/ext/xds/xds_client.cc +454 -177
- data/src/core/ext/xds/xds_client.h +62 -22
- data/src/core/ext/xds/xds_client_stats.h +5 -4
- data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
- data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
- data/src/core/ext/xds/xds_http_filters.cc +114 -0
- data/src/core/ext/xds/xds_http_filters.h +130 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +410 -131
- data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
- data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +107 -4
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +26 -6
- data/src/core/lib/channel/channel_stack.cc +22 -9
- data/src/core/lib/channel/channel_stack.h +17 -9
- data/src/core/lib/channel/channel_stack_builder.cc +2 -2
- data/src/core/lib/channel/channel_stack_builder.h +1 -1
- data/src/core/lib/channel/channelz.cc +108 -12
- data/src/core/lib/channel/channelz.h +30 -1
- data/src/core/lib/channel/channelz_registry.cc +14 -0
- data/src/core/lib/channel/connected_channel.cc +4 -4
- data/src/core/lib/channel/handshaker.cc +7 -45
- data/src/core/lib/channel/handshaker.h +5 -22
- data/src/core/lib/channel/status_util.cc +12 -2
- data/src/core/lib/channel/status_util.h +5 -0
- data/src/core/lib/event_engine/slice_allocator.cc +59 -0
- data/src/core/lib/event_engine/sockaddr.cc +38 -0
- data/src/core/lib/gpr/sync_abseil.cc +3 -6
- data/src/core/lib/gpr/sync_windows.cc +2 -2
- data/src/core/lib/gprpp/atomic.h +3 -3
- data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
- data/src/core/lib/gprpp/ref_counted.h +28 -14
- data/src/core/lib/gprpp/ref_counted_ptr.h +2 -0
- data/src/core/lib/gprpp/status_helper.cc +407 -0
- data/src/core/lib/gprpp/status_helper.h +180 -0
- data/src/core/lib/gprpp/thd.h +1 -1
- data/src/core/lib/http/httpcli.cc +11 -11
- data/src/core/lib/http/httpcli_security_connector.cc +11 -7
- data/src/core/lib/http/parser.cc +16 -16
- data/src/core/lib/http/parser.h +4 -4
- data/src/core/lib/iomgr/buffer_list.cc +7 -9
- data/src/core/lib/iomgr/buffer_list.h +5 -6
- data/src/core/lib/iomgr/call_combiner.cc +15 -12
- data/src/core/lib/iomgr/call_combiner.h +12 -14
- data/src/core/lib/iomgr/cfstream_handle.cc +5 -5
- data/src/core/lib/iomgr/cfstream_handle.h +1 -1
- data/src/core/lib/iomgr/closure.h +7 -6
- data/src/core/lib/iomgr/combiner.cc +14 -12
- data/src/core/lib/iomgr/combiner.h +2 -2
- data/src/core/lib/iomgr/endpoint.cc +1 -1
- data/src/core/lib/iomgr/endpoint.h +2 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
- data/src/core/lib/iomgr/error.cc +167 -61
- data/src/core/lib/iomgr/error.h +218 -107
- data/src/core/lib/iomgr/error_cfstream.cc +3 -2
- data/src/core/lib/iomgr/error_cfstream.h +2 -2
- data/src/core/lib/iomgr/error_internal.h +5 -1
- data/src/core/lib/iomgr/ev_apple.cc +6 -6
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +22 -22
- data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
- data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
- data/src/core/lib/iomgr/ev_posix.cc +12 -11
- data/src/core/lib/iomgr/ev_posix.h +9 -9
- data/src/core/lib/iomgr/exec_ctx.cc +10 -6
- data/src/core/lib/iomgr/exec_ctx.h +1 -1
- data/src/core/lib/iomgr/executor.cc +8 -8
- data/src/core/lib/iomgr/executor.h +2 -2
- data/src/core/lib/iomgr/iomgr.cc +1 -1
- data/src/core/lib/iomgr/iomgr.h +1 -1
- data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
- data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
- data/src/core/lib/iomgr/iomgr_internal.h +3 -3
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -1
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
- data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
- data/src/core/lib/iomgr/load_file.cc +4 -4
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +5 -5
- data/src/core/lib/iomgr/lockfree_event.h +1 -1
- data/src/core/lib/iomgr/pollset.cc +5 -5
- data/src/core/lib/iomgr/pollset.h +9 -9
- data/src/core/lib/iomgr/pollset_custom.cc +5 -5
- data/src/core/lib/iomgr/pollset_windows.cc +5 -5
- data/src/core/lib/iomgr/port.h +1 -1
- data/src/core/lib/iomgr/python_util.h +1 -1
- data/src/core/lib/iomgr/resolve_address.cc +3 -3
- data/src/core/lib/iomgr/resolve_address.h +6 -6
- data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
- data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
- data/src/core/lib/iomgr/resource_quota.cc +12 -11
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +22 -20
- data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
- data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
- data/src/core/lib/iomgr/tcp_client_posix.cc +15 -17
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
- data/src/core/lib/iomgr/tcp_custom.cc +14 -16
- data/src/core/lib/iomgr/tcp_custom.h +13 -12
- data/src/core/lib/iomgr/tcp_posix.cc +37 -38
- data/src/core/lib/iomgr/tcp_server.cc +6 -6
- data/src/core/lib/iomgr/tcp_server.h +12 -11
- data/src/core/lib/iomgr/tcp_server_custom.cc +23 -21
- data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
- data/src/core/lib/iomgr/tcp_uv.cc +27 -25
- data/src/core/lib/iomgr/tcp_windows.cc +13 -13
- data/src/core/lib/iomgr/tcp_windows.h +2 -2
- data/src/core/lib/iomgr/timer_custom.cc +2 -1
- data/src/core/lib/iomgr/timer_custom.h +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +8 -8
- data/src/core/lib/iomgr/timer_manager.cc +1 -1
- data/src/core/lib/iomgr/udp_server.cc +21 -20
- data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
- data/src/core/lib/iomgr/work_serializer.h +17 -1
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_reader.cc +4 -4
- data/src/core/lib/{security/authorization → matchers}/matchers.cc +47 -47
- data/src/core/lib/{security/authorization → matchers}/matchers.h +42 -40
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.h +2 -2
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
- data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -9
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -4
- data/src/core/lib/security/security_connector/security_connector.h +9 -4
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
- data/src/core/lib/security/security_connector/ssl_utils.cc +28 -8
- data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +62 -60
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
- data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
- data/src/core/lib/security/transport/security_handshaker.cc +65 -34
- data/src/core/lib/security/transport/server_auth_filter.cc +24 -11
- data/src/core/lib/security/transport/tsi_error.cc +2 -1
- data/src/core/lib/security/transport/tsi_error.h +2 -1
- data/src/core/lib/security/util/json_util.cc +2 -2
- data/src/core/lib/security/util/json_util.h +1 -1
- data/src/core/lib/slice/slice_intern.cc +6 -7
- data/src/core/lib/surface/call.cc +46 -45
- data/src/core/lib/surface/call.h +2 -2
- data/src/core/lib/surface/channel.cc +6 -6
- data/src/core/lib/surface/channel.h +6 -5
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +46 -47
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/lame_client.cc +43 -24
- data/src/core/lib/surface/lame_client.h +4 -3
- data/src/core/lib/surface/server.cc +68 -55
- data/src/core/lib/surface/server.h +89 -29
- data/src/core/lib/surface/validate_metadata.cc +7 -7
- data/src/core/lib/surface/validate_metadata.h +3 -2
- data/src/core/lib/surface/version.cc +4 -2
- data/src/core/lib/transport/byte_stream.cc +5 -5
- data/src/core/lib/transport/byte_stream.h +8 -8
- data/src/core/lib/transport/connectivity_state.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +19 -8
- data/src/core/lib/transport/error_utils.h +11 -5
- data/src/core/lib/transport/metadata_batch.cc +64 -37
- data/src/core/lib/transport/metadata_batch.h +33 -18
- data/src/core/lib/transport/transport.cc +4 -3
- data/src/core/lib/transport/transport.h +4 -4
- data/src/core/lib/transport/transport_op_string.cc +5 -5
- data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
- data/src/core/tsi/alts/crypt/gsec.h +4 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +6 -8
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -3
- data/src/core/tsi/fake_transport_security.cc +10 -1
- data/src/core/tsi/ssl_transport_security.cc +32 -14
- data/src/core/tsi/ssl_transport_security.h +3 -4
- data/src/ruby/bin/math_services_pb.rb +1 -1
- data/src/ruby/ext/grpc/extconf.rb +9 -1
- data/src/ruby/ext/grpc/rb_channel.c +10 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.c +11 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
- data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
- data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -1
- data/src/ruby/ext/grpc/rb_server.c +13 -1
- data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
- data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
- data/src/ruby/spec/call_spec.rb +1 -1
- data/src/ruby/spec/channel_credentials_spec.rb +32 -0
- data/src/ruby/spec/channel_spec.rb +17 -6
- data/src/ruby/spec/client_auth_spec.rb +27 -1
- data/src/ruby/spec/errors_spec.rb +1 -1
- data/src/ruby/spec/generic/active_call_spec.rb +2 -2
- data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
- data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
- data/src/ruby/spec/server_credentials_spec.rb +25 -0
- data/src/ruby/spec/server_spec.rb +22 -0
- data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
- data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
- data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
- data/third_party/abseil-cpp/absl/base/config.h +37 -9
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
- data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
- data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
- data/third_party/abseil-cpp/absl/base/macros.h +11 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/port.h +0 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
- data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
- data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
- data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
- data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
- data/third_party/abseil-cpp/absl/status/status.cc +29 -22
- data/third_party/abseil-cpp/absl/status/status.h +81 -20
- data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
- data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
- data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
- data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
- data/third_party/abseil-cpp/absl/strings/match.h +16 -6
- data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
- data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
- data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
- data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
- data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
- data/third_party/abseil-cpp/absl/time/clock.h +2 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
- data/third_party/abseil-cpp/absl/time/time.cc +4 -3
- data/third_party/abseil-cpp/absl/time/time.h +26 -24
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
- data/third_party/abseil-cpp/absl/types/variant.h +9 -4
- data/third_party/boringssl-with-bazel/err_data.c +478 -462
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +32 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +43 -46
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +7 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +103 -42
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +58 -37
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -30
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +21 -34
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +3 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -38
- data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +210 -26
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +416 -122
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +43 -12
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +149 -8
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +220 -46
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +74 -15
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +131 -83
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +205 -100
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
- data/third_party/xxhash/xxhash.h +5443 -0
- metadata +128 -61
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
- data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
- data/src/core/lib/security/authorization/authorization_engine.h +0 -84
- data/src/core/lib/security/authorization/evaluate_args.cc +0 -148
- data/src/core/lib/security/authorization/evaluate_args.h +0 -59
- data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -44
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -69
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -99
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -57
- data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -504
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
- data/third_party/upb/upb/json_decode.c +0 -1443
- data/third_party/upb/upb/json_decode.h +0 -23
- data/third_party/upb/upb/json_encode.c +0 -713
- data/third_party/upb/upb/json_encode.h +0 -36
@@ -19,6 +19,7 @@
|
|
19
19
|
#include "src/core/ext/filters/client_channel/resolver_registry.h"
|
20
20
|
#include "src/core/ext/xds/xds_client.h"
|
21
21
|
#include "src/core/lib/gpr/env.h"
|
22
|
+
#include "src/core/lib/gpr/string.h"
|
22
23
|
#include "src/core/lib/http/httpcli.h"
|
23
24
|
#include "src/core/lib/iomgr/polling_entity.h"
|
24
25
|
#include "src/core/lib/security/credentials/alts/check_gcp_environment.h"
|
@@ -47,15 +48,15 @@ class GoogleCloud2ProdResolver : public Resolver {
|
|
47
48
|
void Orphan() override;
|
48
49
|
|
49
50
|
private:
|
50
|
-
static void OnHttpRequestDone(void* arg,
|
51
|
+
static void OnHttpRequestDone(void* arg, grpc_error_handle error);
|
51
52
|
|
52
53
|
// Calls OnDone() if not already called. Releases a ref.
|
53
|
-
void MaybeCallOnDone(
|
54
|
+
void MaybeCallOnDone(grpc_error_handle error);
|
54
55
|
|
55
56
|
// If error is not GRPC_ERROR_NONE, then it's not safe to look at response.
|
56
57
|
virtual void OnDone(GoogleCloud2ProdResolver* resolver,
|
57
58
|
const grpc_http_response* response,
|
58
|
-
|
59
|
+
grpc_error_handle error) = 0;
|
59
60
|
|
60
61
|
RefCountedPtr<GoogleCloud2ProdResolver> resolver_;
|
61
62
|
grpc_httpcli_context context_;
|
@@ -72,7 +73,8 @@ class GoogleCloud2ProdResolver : public Resolver {
|
|
72
73
|
|
73
74
|
private:
|
74
75
|
void OnDone(GoogleCloud2ProdResolver* resolver,
|
75
|
-
const grpc_http_response* response,
|
76
|
+
const grpc_http_response* response,
|
77
|
+
grpc_error_handle error) override;
|
76
78
|
};
|
77
79
|
|
78
80
|
// A metadata server query to get the IPv6 address.
|
@@ -83,7 +85,8 @@ class GoogleCloud2ProdResolver : public Resolver {
|
|
83
85
|
|
84
86
|
private:
|
85
87
|
void OnDone(GoogleCloud2ProdResolver* resolver,
|
86
|
-
const grpc_http_response* response,
|
88
|
+
const grpc_http_response* response,
|
89
|
+
grpc_error_handle error) override;
|
87
90
|
};
|
88
91
|
|
89
92
|
void ZoneQueryDone(std::string zone);
|
@@ -142,13 +145,13 @@ void GoogleCloud2ProdResolver::MetadataQuery::Orphan() {
|
|
142
145
|
}
|
143
146
|
|
144
147
|
void GoogleCloud2ProdResolver::MetadataQuery::OnHttpRequestDone(
|
145
|
-
void* arg,
|
148
|
+
void* arg, grpc_error_handle error) {
|
146
149
|
auto* self = static_cast<MetadataQuery*>(arg);
|
147
150
|
self->MaybeCallOnDone(GRPC_ERROR_REF(error));
|
148
151
|
}
|
149
152
|
|
150
153
|
void GoogleCloud2ProdResolver::MetadataQuery::MaybeCallOnDone(
|
151
|
-
|
154
|
+
grpc_error_handle error) {
|
152
155
|
bool expected = false;
|
153
156
|
if (!on_done_called_.CompareExchangeStrong(
|
154
157
|
&expected, true, MemoryOrder::RELAXED, MemoryOrder::RELAXED)) {
|
@@ -179,10 +182,10 @@ GoogleCloud2ProdResolver::ZoneQuery::ZoneQuery(
|
|
179
182
|
|
180
183
|
void GoogleCloud2ProdResolver::ZoneQuery::OnDone(
|
181
184
|
GoogleCloud2ProdResolver* resolver, const grpc_http_response* response,
|
182
|
-
|
185
|
+
grpc_error_handle error) {
|
183
186
|
if (error != GRPC_ERROR_NONE) {
|
184
187
|
gpr_log(GPR_ERROR, "error fetching zone from metadata server: %s",
|
185
|
-
|
188
|
+
grpc_error_std_string(error).c_str());
|
186
189
|
}
|
187
190
|
std::string zone;
|
188
191
|
if (error == GRPC_ERROR_NONE && response->status == 200) {
|
@@ -212,10 +215,10 @@ GoogleCloud2ProdResolver::IPv6Query::IPv6Query(
|
|
212
215
|
|
213
216
|
void GoogleCloud2ProdResolver::IPv6Query::OnDone(
|
214
217
|
GoogleCloud2ProdResolver* resolver, const grpc_http_response* response,
|
215
|
-
|
218
|
+
grpc_error_handle error) {
|
216
219
|
if (error != GRPC_ERROR_NONE) {
|
217
220
|
gpr_log(GPR_ERROR, "error fetching IPv6 address from metadata server: %s",
|
218
|
-
|
221
|
+
grpc_error_std_string(error).c_str());
|
219
222
|
}
|
220
223
|
resolver->IPv6QueryDone(error == GRPC_ERROR_NONE && response->status == 200);
|
221
224
|
GRPC_ERROR_UNREF(error);
|
@@ -307,17 +310,25 @@ void GoogleCloud2ProdResolver::StartXdsResolver() {
|
|
307
310
|
{"TRAFFICDIRECTOR_DIRECTPATH_C2P_IPV6_CAPABLE", true},
|
308
311
|
};
|
309
312
|
}
|
313
|
+
// Allow the TD server uri to be overridden for testing purposes.
|
314
|
+
UniquePtr<char> override_server(
|
315
|
+
gpr_getenv("GRPC_TEST_ONLY_GOOGLE_C2P_RESOLVER_TRAFFIC_DIRECTOR_URI"));
|
316
|
+
const char* server_uri =
|
317
|
+
override_server != nullptr && strlen(override_server.get()) > 0
|
318
|
+
? override_server.get()
|
319
|
+
: "directpath-trafficdirector.googleapis.com";
|
310
320
|
Json bootstrap = Json::Object{
|
311
321
|
{"xds_servers",
|
312
322
|
Json::Array{
|
313
323
|
Json::Object{
|
314
|
-
{"server_uri",
|
324
|
+
{"server_uri", server_uri},
|
315
325
|
{"channel_creds",
|
316
326
|
Json::Array{
|
317
327
|
Json::Object{
|
318
328
|
{"type", "google_default"},
|
319
329
|
},
|
320
330
|
}},
|
331
|
+
{"server_features", Json::Array{"xds_v3"}},
|
321
332
|
},
|
322
333
|
}},
|
323
334
|
{"node", std::move(node)},
|
@@ -353,8 +364,14 @@ class GoogleCloud2ProdResolverFactory : public ResolverFactory {
|
|
353
364
|
} // namespace
|
354
365
|
|
355
366
|
void GoogleCloud2ProdResolverInit() {
|
356
|
-
|
357
|
-
|
367
|
+
// TODO(roth): Remove env var protection once this code is proven stable.
|
368
|
+
UniquePtr<char> value(gpr_getenv("GRPC_EXPERIMENTAL_GOOGLE_C2P_RESOLVER"));
|
369
|
+
bool parsed_value;
|
370
|
+
bool parse_succeeded = gpr_parse_bool_value(value.get(), &parsed_value);
|
371
|
+
if (parse_succeeded && parsed_value) {
|
372
|
+
ResolverRegistry::Builder::RegisterResolverFactory(
|
373
|
+
absl::make_unique<GoogleCloud2ProdResolverFactory>());
|
374
|
+
}
|
358
375
|
}
|
359
376
|
|
360
377
|
void GoogleCloud2ProdResolverShutdown() {}
|
@@ -30,9 +30,9 @@
|
|
30
30
|
|
31
31
|
#include "src/core/ext/filters/client_channel/resolver_registry.h"
|
32
32
|
#include "src/core/ext/filters/client_channel/server_address.h"
|
33
|
+
#include "src/core/lib/address_utils/parse_address.h"
|
33
34
|
#include "src/core/lib/channel/channel_args.h"
|
34
35
|
#include "src/core/lib/gpr/string.h"
|
35
|
-
#include "src/core/lib/iomgr/parse_address.h"
|
36
36
|
#include "src/core/lib/iomgr/resolve_address.h"
|
37
37
|
#include "src/core/lib/iomgr/unix_sockets_posix.h"
|
38
38
|
#include "src/core/lib/slice/slice_internal.h"
|
@@ -22,13 +22,19 @@
|
|
22
22
|
#include "absl/strings/str_join.h"
|
23
23
|
#include "absl/strings/str_split.h"
|
24
24
|
#include "re2/re2.h"
|
25
|
+
#define XXH_INLINE_ALL
|
26
|
+
#include "xxhash.h"
|
25
27
|
|
26
28
|
#include "src/core/ext/filters/client_channel/config_selector.h"
|
29
|
+
#include "src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h"
|
27
30
|
#include "src/core/ext/filters/client_channel/resolver_registry.h"
|
31
|
+
#include "src/core/ext/xds/xds_channel_args.h"
|
28
32
|
#include "src/core/ext/xds/xds_client.h"
|
33
|
+
#include "src/core/ext/xds/xds_http_filters.h"
|
29
34
|
#include "src/core/lib/channel/channel_args.h"
|
30
35
|
#include "src/core/lib/iomgr/closure.h"
|
31
36
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
37
|
+
#include "src/core/lib/surface/lame_client.h"
|
32
38
|
#include "src/core/lib/transport/timeout_encoding.h"
|
33
39
|
|
34
40
|
namespace grpc_core {
|
@@ -68,19 +74,23 @@ class XdsResolver : public Resolver {
|
|
68
74
|
|
69
75
|
void ShutdownLocked() override;
|
70
76
|
|
77
|
+
void ResetBackoffLocked() override {
|
78
|
+
if (xds_client_ != nullptr) xds_client_->ResetBackoff();
|
79
|
+
}
|
80
|
+
|
71
81
|
private:
|
72
82
|
class Notifier {
|
73
83
|
public:
|
74
84
|
Notifier(RefCountedPtr<XdsResolver> resolver, XdsApi::LdsUpdate update);
|
75
85
|
Notifier(RefCountedPtr<XdsResolver> resolver, XdsApi::RdsUpdate update);
|
76
|
-
Notifier(RefCountedPtr<XdsResolver> resolver,
|
86
|
+
Notifier(RefCountedPtr<XdsResolver> resolver, grpc_error_handle error);
|
77
87
|
explicit Notifier(RefCountedPtr<XdsResolver> resolver);
|
78
88
|
|
79
89
|
private:
|
80
90
|
enum Type { kLdsUpdate, kRdsUpdate, kError, kDoesNotExist };
|
81
91
|
|
82
|
-
static void RunInExecCtx(void* arg,
|
83
|
-
void RunInWorkSerializer(
|
92
|
+
static void RunInExecCtx(void* arg, grpc_error_handle error);
|
93
|
+
void RunInWorkSerializer(grpc_error_handle error);
|
84
94
|
|
85
95
|
RefCountedPtr<XdsResolver> resolver_;
|
86
96
|
grpc_closure closure_;
|
@@ -95,7 +105,9 @@ class XdsResolver : public Resolver {
|
|
95
105
|
void OnListenerChanged(XdsApi::LdsUpdate listener) override {
|
96
106
|
new Notifier(resolver_, std::move(listener));
|
97
107
|
}
|
98
|
-
void OnError(
|
108
|
+
void OnError(grpc_error_handle error) override {
|
109
|
+
new Notifier(resolver_, error);
|
110
|
+
}
|
99
111
|
void OnResourceDoesNotExist() override { new Notifier(resolver_); }
|
100
112
|
|
101
113
|
private:
|
@@ -109,7 +121,9 @@ class XdsResolver : public Resolver {
|
|
109
121
|
void OnRouteConfigChanged(XdsApi::RdsUpdate route_config) override {
|
110
122
|
new Notifier(resolver_, std::move(route_config));
|
111
123
|
}
|
112
|
-
void OnError(
|
124
|
+
void OnError(grpc_error_handle error) override {
|
125
|
+
new Notifier(resolver_, error);
|
126
|
+
}
|
113
127
|
void OnResourceDoesNotExist() override { new Notifier(resolver_); }
|
114
128
|
|
115
129
|
private:
|
@@ -117,7 +131,7 @@ class XdsResolver : public Resolver {
|
|
117
131
|
};
|
118
132
|
|
119
133
|
class ClusterState
|
120
|
-
: public RefCounted<ClusterState, PolymorphicRefCount,
|
134
|
+
: public RefCounted<ClusterState, PolymorphicRefCount, kUnrefNoDelete> {
|
121
135
|
public:
|
122
136
|
using ClusterStateMap =
|
123
137
|
std::map<std::string, std::unique_ptr<ClusterState>>;
|
@@ -136,8 +150,7 @@ class XdsResolver : public Resolver {
|
|
136
150
|
class XdsConfigSelector : public ConfigSelector {
|
137
151
|
public:
|
138
152
|
XdsConfigSelector(RefCountedPtr<XdsResolver> resolver,
|
139
|
-
|
140
|
-
grpc_error* error);
|
153
|
+
grpc_error_handle* error);
|
141
154
|
~XdsConfigSelector() override;
|
142
155
|
|
143
156
|
const char* name() const override { return "XdsConfigSelector"; }
|
@@ -151,34 +164,50 @@ class XdsResolver : public Resolver {
|
|
151
164
|
|
152
165
|
CallConfig GetCallConfig(GetCallConfigArgs args) override;
|
153
166
|
|
167
|
+
std::vector<const grpc_channel_filter*> GetFilters() override {
|
168
|
+
return filters_;
|
169
|
+
}
|
170
|
+
|
171
|
+
grpc_channel_args* ModifyChannelArgs(grpc_channel_args* args) override;
|
172
|
+
|
154
173
|
private:
|
155
174
|
struct Route {
|
175
|
+
struct ClusterWeightState {
|
176
|
+
uint32_t range_end;
|
177
|
+
absl::string_view cluster;
|
178
|
+
RefCountedPtr<ServiceConfig> method_config;
|
179
|
+
|
180
|
+
bool operator==(const ClusterWeightState& other) const;
|
181
|
+
};
|
182
|
+
|
156
183
|
XdsApi::Route route;
|
157
|
-
absl::InlinedVector<std::pair<uint32_t, absl::string_view>, 2>
|
158
|
-
weighted_cluster_state;
|
159
184
|
RefCountedPtr<ServiceConfig> method_config;
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
}
|
185
|
+
absl::InlinedVector<ClusterWeightState, 2> weighted_cluster_state;
|
186
|
+
|
187
|
+
bool operator==(const Route& other) const;
|
164
188
|
};
|
165
189
|
using RouteTable = std::vector<Route>;
|
166
190
|
|
167
191
|
void MaybeAddCluster(const std::string& name);
|
168
|
-
|
169
|
-
|
192
|
+
grpc_error_handle CreateMethodConfig(
|
193
|
+
const XdsApi::Route& route,
|
194
|
+
const XdsApi::Route::ClusterWeight* cluster_weight,
|
195
|
+
RefCountedPtr<ServiceConfig>* method_config);
|
170
196
|
|
171
197
|
RefCountedPtr<XdsResolver> resolver_;
|
172
198
|
RouteTable route_table_;
|
173
199
|
std::map<absl::string_view, RefCountedPtr<ClusterState>> clusters_;
|
200
|
+
std::vector<const grpc_channel_filter*> filters_;
|
201
|
+
grpc_error_handle filter_error_ = GRPC_ERROR_NONE;
|
174
202
|
};
|
175
203
|
|
176
204
|
void OnListenerUpdate(XdsApi::LdsUpdate listener);
|
177
205
|
void OnRouteConfigUpdate(XdsApi::RdsUpdate rds_update);
|
178
|
-
void OnError(
|
206
|
+
void OnError(grpc_error_handle error);
|
179
207
|
void OnResourceDoesNotExist();
|
180
208
|
|
181
|
-
|
209
|
+
grpc_error_handle CreateServiceConfig(
|
210
|
+
RefCountedPtr<ServiceConfig>* service_config);
|
182
211
|
void GenerateResult();
|
183
212
|
void MaybeRemoveUnusedClusters();
|
184
213
|
|
@@ -187,13 +216,20 @@ class XdsResolver : public Resolver {
|
|
187
216
|
std::string server_name_;
|
188
217
|
const grpc_channel_args* args_;
|
189
218
|
grpc_pollset_set* interested_parties_;
|
219
|
+
|
190
220
|
RefCountedPtr<XdsClient> xds_client_;
|
221
|
+
|
191
222
|
XdsClient::ListenerWatcherInterface* listener_watcher_ = nullptr;
|
223
|
+
// This will not contain the RouteConfiguration, even if it comes with the
|
224
|
+
// LDS response; instead, the relevant VirtualHost from the
|
225
|
+
// RouteConfiguration will be saved in current_virtual_host_.
|
226
|
+
XdsApi::LdsUpdate current_listener_;
|
227
|
+
|
192
228
|
std::string route_config_name_;
|
193
229
|
XdsClient::RouteConfigWatcherInterface* route_config_watcher_ = nullptr;
|
230
|
+
XdsApi::RdsUpdate::VirtualHost current_virtual_host_;
|
231
|
+
|
194
232
|
ClusterState::ClusterStateMap cluster_state_map_;
|
195
|
-
std::vector<XdsApi::Route> current_update_;
|
196
|
-
XdsApi::Duration http_max_stream_duration_;
|
197
233
|
};
|
198
234
|
|
199
235
|
//
|
@@ -212,13 +248,13 @@ XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver,
|
|
212
248
|
XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver,
|
213
249
|
XdsApi::RdsUpdate update)
|
214
250
|
: resolver_(std::move(resolver)), type_(kRdsUpdate) {
|
215
|
-
update_.rds_update = std::move(update);
|
251
|
+
update_.http_connection_manager.rds_update = std::move(update);
|
216
252
|
GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
|
217
253
|
ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
|
218
254
|
}
|
219
255
|
|
220
256
|
XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver,
|
221
|
-
|
257
|
+
grpc_error_handle error)
|
222
258
|
: resolver_(std::move(resolver)), type_(kError) {
|
223
259
|
GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
|
224
260
|
ExecCtx::Run(DEBUG_LOCATION, &closure_, error);
|
@@ -230,14 +266,14 @@ XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver)
|
|
230
266
|
ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
|
231
267
|
}
|
232
268
|
|
233
|
-
void XdsResolver::Notifier::RunInExecCtx(void* arg,
|
269
|
+
void XdsResolver::Notifier::RunInExecCtx(void* arg, grpc_error_handle error) {
|
234
270
|
Notifier* self = static_cast<Notifier*>(arg);
|
235
271
|
GRPC_ERROR_REF(error);
|
236
272
|
self->resolver_->work_serializer_->Run(
|
237
273
|
[self, error]() { self->RunInWorkSerializer(error); }, DEBUG_LOCATION);
|
238
274
|
}
|
239
275
|
|
240
|
-
void XdsResolver::Notifier::RunInWorkSerializer(
|
276
|
+
void XdsResolver::Notifier::RunInWorkSerializer(grpc_error_handle error) {
|
241
277
|
if (resolver_->xds_client_ == nullptr) {
|
242
278
|
GRPC_ERROR_UNREF(error);
|
243
279
|
delete this;
|
@@ -248,7 +284,8 @@ void XdsResolver::Notifier::RunInWorkSerializer(grpc_error* error) {
|
|
248
284
|
resolver_->OnListenerUpdate(std::move(update_));
|
249
285
|
break;
|
250
286
|
case kRdsUpdate:
|
251
|
-
resolver_->OnRouteConfigUpdate(
|
287
|
+
resolver_->OnRouteConfigUpdate(
|
288
|
+
std::move(*update_.http_connection_manager.rds_update));
|
252
289
|
break;
|
253
290
|
case kError:
|
254
291
|
resolver_->OnError(error);
|
@@ -260,13 +297,35 @@ void XdsResolver::Notifier::RunInWorkSerializer(grpc_error* error) {
|
|
260
297
|
delete this;
|
261
298
|
}
|
262
299
|
|
300
|
+
//
|
301
|
+
// XdsResolver::XdsConfigSelector::Route
|
302
|
+
//
|
303
|
+
|
304
|
+
bool MethodConfigsEqual(const ServiceConfig* sc1, const ServiceConfig* sc2) {
|
305
|
+
if (sc1 == nullptr) return sc2 == nullptr;
|
306
|
+
if (sc2 == nullptr) return false;
|
307
|
+
return sc1->json_string() == sc2->json_string();
|
308
|
+
}
|
309
|
+
|
310
|
+
bool XdsResolver::XdsConfigSelector::Route::ClusterWeightState::operator==(
|
311
|
+
const ClusterWeightState& other) const {
|
312
|
+
return range_end == other.range_end && cluster == other.cluster &&
|
313
|
+
MethodConfigsEqual(method_config.get(), other.method_config.get());
|
314
|
+
}
|
315
|
+
|
316
|
+
bool XdsResolver::XdsConfigSelector::Route::operator==(
|
317
|
+
const Route& other) const {
|
318
|
+
return route == other.route &&
|
319
|
+
weighted_cluster_state == other.weighted_cluster_state &&
|
320
|
+
MethodConfigsEqual(method_config.get(), other.method_config.get());
|
321
|
+
}
|
322
|
+
|
263
323
|
//
|
264
324
|
// XdsResolver::XdsConfigSelector
|
265
325
|
//
|
266
326
|
|
267
327
|
XdsResolver::XdsConfigSelector::XdsConfigSelector(
|
268
|
-
RefCountedPtr<XdsResolver> resolver,
|
269
|
-
const std::vector<XdsApi::Route>& routes, grpc_error* error)
|
328
|
+
RefCountedPtr<XdsResolver> resolver, grpc_error_handle* error)
|
270
329
|
: resolver_(std::move(resolver)) {
|
271
330
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
|
272
331
|
gpr_log(GPR_INFO, "[xds_resolver %p] creating XdsConfigSelector %p",
|
@@ -281,8 +340,8 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
|
|
281
340
|
// weighted_cluster_state field points to the memory in the route field, so
|
282
341
|
// moving the entry in a reallocation will cause the string_view to point to
|
283
342
|
// invalid data.
|
284
|
-
route_table_.reserve(routes.size());
|
285
|
-
for (auto& route : routes) {
|
343
|
+
route_table_.reserve(resolver_->current_virtual_host_.routes.size());
|
344
|
+
for (auto& route : resolver_->current_virtual_host_.routes) {
|
286
345
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
|
287
346
|
gpr_log(GPR_INFO, "[xds_resolver %p] XdsConfigSelector %p: route: %s",
|
288
347
|
resolver_.get(), this, route.ToString().c_str());
|
@@ -294,27 +353,95 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
|
|
294
353
|
// one.
|
295
354
|
if (!route.max_stream_duration.has_value()) {
|
296
355
|
route_entry.route.max_stream_duration =
|
297
|
-
resolver_->
|
356
|
+
resolver_->current_listener_.http_connection_manager
|
357
|
+
.http_max_stream_duration;
|
298
358
|
}
|
299
|
-
error = CreateMethodConfig(&route_entry.method_config, route_entry.route);
|
300
359
|
if (route.weighted_clusters.empty()) {
|
360
|
+
*error = CreateMethodConfig(route_entry.route, nullptr,
|
361
|
+
&route_entry.method_config);
|
301
362
|
MaybeAddCluster(route.cluster_name);
|
302
363
|
} else {
|
303
364
|
uint32_t end = 0;
|
304
365
|
for (const auto& weighted_cluster : route_entry.route.weighted_clusters) {
|
305
|
-
|
366
|
+
Route::ClusterWeightState cluster_weight_state;
|
367
|
+
*error = CreateMethodConfig(route_entry.route, &weighted_cluster,
|
368
|
+
&cluster_weight_state.method_config);
|
369
|
+
if (*error != GRPC_ERROR_NONE) return;
|
306
370
|
end += weighted_cluster.weight;
|
307
|
-
|
308
|
-
|
371
|
+
cluster_weight_state.range_end = end;
|
372
|
+
cluster_weight_state.cluster = weighted_cluster.name;
|
373
|
+
route_entry.weighted_cluster_state.push_back(
|
374
|
+
std::move(cluster_weight_state));
|
375
|
+
MaybeAddCluster(weighted_cluster.name);
|
309
376
|
}
|
310
377
|
}
|
311
378
|
}
|
379
|
+
// Populate filter list.
|
380
|
+
bool found_router = false;
|
381
|
+
for (const auto& http_filter :
|
382
|
+
resolver_->current_listener_.http_connection_manager.http_filters) {
|
383
|
+
// Stop at the router filter. It's a no-op for us, and we ignore
|
384
|
+
// anything that may come after it, for compatibility with Envoy.
|
385
|
+
if (http_filter.config.config_proto_type_name ==
|
386
|
+
kXdsHttpRouterFilterConfigName) {
|
387
|
+
found_router = true;
|
388
|
+
break;
|
389
|
+
}
|
390
|
+
// Find filter. This is guaranteed to succeed, because it's checked
|
391
|
+
// at config validation time in the XdsApi code.
|
392
|
+
const XdsHttpFilterImpl* filter_impl =
|
393
|
+
XdsHttpFilterRegistry::GetFilterForType(
|
394
|
+
http_filter.config.config_proto_type_name);
|
395
|
+
GPR_ASSERT(filter_impl != nullptr);
|
396
|
+
// Add C-core filter to list.
|
397
|
+
filters_.push_back(filter_impl->channel_filter());
|
398
|
+
}
|
399
|
+
// For compatibility with Envoy, if the router filter is not
|
400
|
+
// configured, we fail all RPCs.
|
401
|
+
if (!found_router) {
|
402
|
+
filter_error_ =
|
403
|
+
grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
404
|
+
"no xDS HTTP router filter configured"),
|
405
|
+
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
406
|
+
filters_.push_back(&grpc_lame_filter);
|
407
|
+
}
|
408
|
+
}
|
409
|
+
|
410
|
+
XdsResolver::XdsConfigSelector::~XdsConfigSelector() {
|
411
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
|
412
|
+
gpr_log(GPR_INFO, "[xds_resolver %p] destroying XdsConfigSelector %p",
|
413
|
+
resolver_.get(), this);
|
414
|
+
}
|
415
|
+
clusters_.clear();
|
416
|
+
resolver_->MaybeRemoveUnusedClusters();
|
417
|
+
GRPC_ERROR_UNREF(filter_error_);
|
418
|
+
}
|
419
|
+
|
420
|
+
const XdsHttpFilterImpl::FilterConfig* FindFilterConfigOverride(
|
421
|
+
const std::string& instance_name,
|
422
|
+
const XdsApi::RdsUpdate::VirtualHost& vhost, const XdsApi::Route& route,
|
423
|
+
const XdsApi::Route::ClusterWeight* cluster_weight) {
|
424
|
+
// Check ClusterWeight, if any.
|
425
|
+
if (cluster_weight != nullptr) {
|
426
|
+
auto it = cluster_weight->typed_per_filter_config.find(instance_name);
|
427
|
+
if (it != cluster_weight->typed_per_filter_config.end()) return &it->second;
|
428
|
+
}
|
429
|
+
// Check Route.
|
430
|
+
auto it = route.typed_per_filter_config.find(instance_name);
|
431
|
+
if (it != route.typed_per_filter_config.end()) return &it->second;
|
432
|
+
// Check VirtualHost.
|
433
|
+
it = vhost.typed_per_filter_config.find(instance_name);
|
434
|
+
if (it != vhost.typed_per_filter_config.end()) return &it->second;
|
435
|
+
// Not found.
|
436
|
+
return nullptr;
|
312
437
|
}
|
313
438
|
|
314
|
-
|
315
|
-
|
316
|
-
|
439
|
+
grpc_error_handle XdsResolver::XdsConfigSelector::CreateMethodConfig(
|
440
|
+
const XdsApi::Route& route,
|
441
|
+
const XdsApi::Route::ClusterWeight* cluster_weight,
|
442
|
+
RefCountedPtr<ServiceConfig>* method_config) {
|
317
443
|
std::vector<std::string> fields;
|
444
|
+
// Set timeout.
|
318
445
|
if (route.max_stream_duration.has_value() &&
|
319
446
|
(route.max_stream_duration->seconds != 0 ||
|
320
447
|
route.max_stream_duration->nanos != 0)) {
|
@@ -322,6 +449,51 @@ grpc_error* XdsResolver::XdsConfigSelector::CreateMethodConfig(
|
|
322
449
|
route.max_stream_duration->seconds,
|
323
450
|
route.max_stream_duration->nanos));
|
324
451
|
}
|
452
|
+
// Handle xDS HTTP filters.
|
453
|
+
std::map<std::string, std::vector<std::string>> per_filter_configs;
|
454
|
+
grpc_channel_args* args = grpc_channel_args_copy(resolver_->args_);
|
455
|
+
for (const auto& http_filter :
|
456
|
+
resolver_->current_listener_.http_connection_manager.http_filters) {
|
457
|
+
// Stop at the router filter. It's a no-op for us, and we ignore
|
458
|
+
// anything that may come after it, for compatibility with Envoy.
|
459
|
+
if (http_filter.config.config_proto_type_name ==
|
460
|
+
kXdsHttpRouterFilterConfigName) {
|
461
|
+
break;
|
462
|
+
}
|
463
|
+
// Find filter. This is guaranteed to succeed, because it's checked
|
464
|
+
// at config validation time in the XdsApi code.
|
465
|
+
const XdsHttpFilterImpl* filter_impl =
|
466
|
+
XdsHttpFilterRegistry::GetFilterForType(
|
467
|
+
http_filter.config.config_proto_type_name);
|
468
|
+
GPR_ASSERT(filter_impl != nullptr);
|
469
|
+
// Allow filter to add channel args that may affect service config
|
470
|
+
// parsing.
|
471
|
+
args = filter_impl->ModifyChannelArgs(args);
|
472
|
+
// Find config override, if any.
|
473
|
+
const XdsHttpFilterImpl::FilterConfig* config_override =
|
474
|
+
FindFilterConfigOverride(http_filter.name,
|
475
|
+
resolver_->current_virtual_host_, route,
|
476
|
+
cluster_weight);
|
477
|
+
// Generate service config for filter.
|
478
|
+
auto method_config_field =
|
479
|
+
filter_impl->GenerateServiceConfig(http_filter.config, config_override);
|
480
|
+
if (!method_config_field.ok()) {
|
481
|
+
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
482
|
+
absl::StrCat("failed to generate method config for HTTP filter ",
|
483
|
+
http_filter.name, ": ",
|
484
|
+
method_config_field.status().ToString())
|
485
|
+
.c_str());
|
486
|
+
}
|
487
|
+
per_filter_configs[method_config_field->service_config_field_name]
|
488
|
+
.push_back(method_config_field->element);
|
489
|
+
}
|
490
|
+
for (const auto& p : per_filter_configs) {
|
491
|
+
fields.emplace_back(absl::StrCat(" \"", p.first, "\": [\n",
|
492
|
+
absl::StrJoin(p.second, ",\n"),
|
493
|
+
"\n ]"));
|
494
|
+
}
|
495
|
+
// Construct service config.
|
496
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
325
497
|
if (!fields.empty()) {
|
326
498
|
std::string json = absl::StrCat(
|
327
499
|
"{\n"
|
@@ -333,19 +505,20 @@ grpc_error* XdsResolver::XdsConfigSelector::CreateMethodConfig(
|
|
333
505
|
absl::StrJoin(fields, ",\n"),
|
334
506
|
"\n } ]\n"
|
335
507
|
"}");
|
336
|
-
*method_config =
|
337
|
-
ServiceConfig::Create(resolver_->args_, json.c_str(), &error);
|
508
|
+
*method_config = ServiceConfig::Create(args, json.c_str(), &error);
|
338
509
|
}
|
510
|
+
grpc_channel_args_destroy(args);
|
339
511
|
return error;
|
340
512
|
}
|
341
513
|
|
342
|
-
XdsResolver::XdsConfigSelector
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
514
|
+
grpc_channel_args* XdsResolver::XdsConfigSelector::ModifyChannelArgs(
|
515
|
+
grpc_channel_args* args) {
|
516
|
+
if (filter_error_ == GRPC_ERROR_NONE) return args;
|
517
|
+
grpc_arg error_arg = MakeLameClientErrorArg(filter_error_);
|
518
|
+
grpc_channel_args* new_args =
|
519
|
+
grpc_channel_args_copy_and_add(args, &error_arg, 1);
|
520
|
+
grpc_channel_args_destroy(args);
|
521
|
+
return new_args;
|
349
522
|
}
|
350
523
|
|
351
524
|
void XdsResolver::XdsConfigSelector::MaybeAddCluster(const std::string& name) {
|
@@ -361,56 +534,52 @@ void XdsResolver::XdsConfigSelector::MaybeAddCluster(const std::string& name) {
|
|
361
534
|
}
|
362
535
|
}
|
363
536
|
|
364
|
-
absl::optional<absl::string_view>
|
365
|
-
|
537
|
+
absl::optional<absl::string_view> GetHeaderValue(
|
538
|
+
grpc_metadata_batch* initial_metadata, absl::string_view header_name,
|
366
539
|
std::string* concatenated_value) {
|
367
|
-
// Find all values for the specified key.
|
368
|
-
GPR_DEBUG_ASSERT(initial_metadata != nullptr);
|
369
|
-
absl::InlinedVector<absl::string_view, 1> values;
|
370
|
-
for (grpc_linked_mdelem* md = initial_metadata->list.head; md != nullptr;
|
371
|
-
md = md->next) {
|
372
|
-
absl::string_view key = StringViewFromSlice(GRPC_MDKEY(md->md));
|
373
|
-
absl::string_view value = StringViewFromSlice(GRPC_MDVALUE(md->md));
|
374
|
-
if (target_key == key) values.push_back(value);
|
375
|
-
}
|
376
|
-
// If none found, no match.
|
377
|
-
if (values.empty()) return absl::nullopt;
|
378
|
-
// If exactly one found, return it as-is.
|
379
|
-
if (values.size() == 1) return values.front();
|
380
|
-
// If more than one found, concatenate the values, using
|
381
|
-
// *concatenated_values as a temporary holding place for the
|
382
|
-
// concatenated string.
|
383
|
-
*concatenated_value = absl::StrJoin(values, ",");
|
384
|
-
return *concatenated_value;
|
385
|
-
}
|
386
|
-
|
387
|
-
bool HeaderMatchHelper(const HeaderMatcher& header_matcher,
|
388
|
-
grpc_metadata_batch* initial_metadata) {
|
389
|
-
std::string concatenated_value;
|
390
|
-
absl::optional<absl::string_view> value;
|
391
540
|
// Note: If we ever allow binary headers here, we still need to
|
392
541
|
// special-case ignore "grpc-tags-bin" and "grpc-trace-bin", since
|
393
542
|
// they are not visible to the LB policy in grpc-go.
|
394
|
-
if (absl::EndsWith(
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
value = "application/grpc";
|
399
|
-
} else {
|
400
|
-
value = GetMetadataValue(header_matcher.name(), initial_metadata,
|
401
|
-
&concatenated_value);
|
543
|
+
if (absl::EndsWith(header_name, "-bin")) {
|
544
|
+
return absl::nullopt;
|
545
|
+
} else if (header_name == "content-type") {
|
546
|
+
return "application/grpc";
|
402
547
|
}
|
403
|
-
return
|
548
|
+
return grpc_metadata_batch_get_value(initial_metadata, header_name,
|
549
|
+
concatenated_value);
|
404
550
|
}
|
405
551
|
|
406
552
|
bool HeadersMatch(const std::vector<HeaderMatcher>& header_matchers,
|
407
553
|
grpc_metadata_batch* initial_metadata) {
|
408
554
|
for (const auto& header_matcher : header_matchers) {
|
409
|
-
|
555
|
+
std::string concatenated_value;
|
556
|
+
if (!header_matcher.Match(GetHeaderValue(
|
557
|
+
initial_metadata, header_matcher.name(), &concatenated_value))) {
|
558
|
+
return false;
|
559
|
+
}
|
410
560
|
}
|
411
561
|
return true;
|
412
562
|
}
|
413
563
|
|
564
|
+
absl::optional<uint64_t> HeaderHashHelper(
|
565
|
+
const XdsApi::Route::HashPolicy& policy,
|
566
|
+
grpc_metadata_batch* initial_metadata) {
|
567
|
+
GPR_ASSERT(policy.type == XdsApi::Route::HashPolicy::HEADER);
|
568
|
+
std::string value_buffer;
|
569
|
+
absl::optional<absl::string_view> header_value =
|
570
|
+
GetHeaderValue(initial_metadata, policy.header_name, &value_buffer);
|
571
|
+
if (policy.regex != nullptr) {
|
572
|
+
// If GetHeaderValue() did not already store the value in
|
573
|
+
// value_buffer, copy it there now, so we can modify it.
|
574
|
+
if (header_value->data() != value_buffer.data()) {
|
575
|
+
value_buffer = std::string(*header_value);
|
576
|
+
}
|
577
|
+
RE2::GlobalReplace(&value_buffer, *policy.regex, policy.regex_substitution);
|
578
|
+
header_value = value_buffer;
|
579
|
+
}
|
580
|
+
return XXH64(header_value->data(), header_value->size(), 0);
|
581
|
+
}
|
582
|
+
|
414
583
|
bool UnderFraction(const uint32_t fraction_per_million) {
|
415
584
|
// Generate a random number in [0, 1000000).
|
416
585
|
const uint32_t random_number = rand() % 1000000;
|
@@ -437,13 +606,15 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
437
606
|
}
|
438
607
|
// Found a route match
|
439
608
|
absl::string_view cluster_name;
|
609
|
+
RefCountedPtr<ServiceConfig> method_config;
|
440
610
|
if (entry.route.weighted_clusters.empty()) {
|
441
611
|
cluster_name = entry.route.cluster_name;
|
612
|
+
method_config = entry.method_config;
|
442
613
|
} else {
|
443
614
|
const uint32_t key =
|
444
615
|
rand() %
|
445
616
|
entry.weighted_cluster_state[entry.weighted_cluster_state.size() - 1]
|
446
|
-
.
|
617
|
+
.range_end;
|
447
618
|
// Find the index in weighted clusters corresponding to key.
|
448
619
|
size_t mid = 0;
|
449
620
|
size_t start_index = 0;
|
@@ -451,9 +622,9 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
451
622
|
size_t index = 0;
|
452
623
|
while (end_index > start_index) {
|
453
624
|
mid = (start_index + end_index) / 2;
|
454
|
-
if (entry.weighted_cluster_state[mid].
|
625
|
+
if (entry.weighted_cluster_state[mid].range_end > key) {
|
455
626
|
end_index = mid;
|
456
|
-
} else if (entry.weighted_cluster_state[mid].
|
627
|
+
} else if (entry.weighted_cluster_state[mid].range_end < key) {
|
457
628
|
start_index = mid + 1;
|
458
629
|
} else {
|
459
630
|
index = mid + 1;
|
@@ -461,21 +632,56 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
461
632
|
}
|
462
633
|
}
|
463
634
|
if (index == 0) index = start_index;
|
464
|
-
GPR_ASSERT(entry.weighted_cluster_state[index].
|
465
|
-
cluster_name = entry.weighted_cluster_state[index].
|
635
|
+
GPR_ASSERT(entry.weighted_cluster_state[index].range_end > key);
|
636
|
+
cluster_name = entry.weighted_cluster_state[index].cluster;
|
637
|
+
method_config = entry.weighted_cluster_state[index].method_config;
|
466
638
|
}
|
467
639
|
auto it = clusters_.find(cluster_name);
|
468
640
|
GPR_ASSERT(it != clusters_.end());
|
469
641
|
XdsResolver* resolver =
|
470
642
|
static_cast<XdsResolver*>(resolver_->Ref().release());
|
471
643
|
ClusterState* cluster_state = it->second->Ref().release();
|
644
|
+
// Generate a hash
|
645
|
+
absl::optional<uint64_t> hash;
|
646
|
+
for (const auto& hash_policy : entry.route.hash_policies) {
|
647
|
+
absl::optional<uint64_t> new_hash;
|
648
|
+
switch (hash_policy.type) {
|
649
|
+
case XdsApi::Route::HashPolicy::HEADER:
|
650
|
+
new_hash = HeaderHashHelper(hash_policy, args.initial_metadata);
|
651
|
+
break;
|
652
|
+
case XdsApi::Route::HashPolicy::CHANNEL_ID:
|
653
|
+
new_hash =
|
654
|
+
static_cast<uint64_t>(reinterpret_cast<uintptr_t>(resolver));
|
655
|
+
break;
|
656
|
+
default:
|
657
|
+
GPR_ASSERT(0);
|
658
|
+
}
|
659
|
+
if (new_hash.has_value()) {
|
660
|
+
// Rotating the old value prevents duplicate hash rules from cancelling
|
661
|
+
// each other out and preserves all of the entropy
|
662
|
+
const uint64_t old_value =
|
663
|
+
hash.has_value() ? ((hash.value() << 1) | (hash.value() >> 63)) : 0;
|
664
|
+
hash = old_value ^ new_hash.value();
|
665
|
+
}
|
666
|
+
// If the policy is a terminal policy and a hash has been generated,
|
667
|
+
// ignore the rest of the hash policies.
|
668
|
+
if (hash_policy.terminal && hash.has_value()) {
|
669
|
+
break;
|
670
|
+
}
|
671
|
+
}
|
672
|
+
if (!hash.has_value()) {
|
673
|
+
// If there is no hash, we just choose a random value as a default.
|
674
|
+
hash = rand();
|
675
|
+
}
|
472
676
|
CallConfig call_config;
|
473
|
-
if (
|
474
|
-
call_config.service_config = entry.method_config;
|
677
|
+
if (method_config != nullptr) {
|
475
678
|
call_config.method_configs =
|
476
|
-
|
679
|
+
method_config->GetMethodParsedConfigVector(grpc_empty_slice());
|
680
|
+
call_config.service_config = std::move(method_config);
|
477
681
|
}
|
478
682
|
call_config.call_attributes[kXdsClusterAttribute] = it->first;
|
683
|
+
call_config.call_attributes[kRequestRingHashAttribute] =
|
684
|
+
absl::StrFormat("%" PRIu64, hash.value());
|
479
685
|
call_config.on_call_committed = [resolver, cluster_state]() {
|
480
686
|
cluster_state->Unref();
|
481
687
|
ExecCtx::Run(
|
@@ -489,7 +695,7 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
489
695
|
// the data plane mutex.
|
490
696
|
DEBUG_LOCATION,
|
491
697
|
GRPC_CLOSURE_CREATE(
|
492
|
-
[](void* arg,
|
698
|
+
[](void* arg, grpc_error_handle /*error*/) {
|
493
699
|
auto* resolver = static_cast<XdsResolver*>(arg);
|
494
700
|
resolver->work_serializer_->Run(
|
495
701
|
[resolver]() {
|
@@ -511,13 +717,13 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
511
717
|
//
|
512
718
|
|
513
719
|
void XdsResolver::StartLocked() {
|
514
|
-
|
515
|
-
xds_client_ = XdsClient::GetOrCreate(&error);
|
720
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
721
|
+
xds_client_ = XdsClient::GetOrCreate(args_, &error);
|
516
722
|
if (error != GRPC_ERROR_NONE) {
|
517
723
|
gpr_log(GPR_ERROR,
|
518
724
|
"Failed to create xds client -- channel will remain in "
|
519
725
|
"TRANSIENT_FAILURE: %s",
|
520
|
-
|
726
|
+
grpc_error_std_string(error).c_str());
|
521
727
|
result_handler_->ReturnError(error);
|
522
728
|
return;
|
523
729
|
}
|
@@ -563,24 +769,34 @@ void XdsResolver::OnListenerUpdate(XdsApi::LdsUpdate listener) {
|
|
563
769
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
|
564
770
|
gpr_log(GPR_INFO, "[xds_resolver %p] received updated listener data", this);
|
565
771
|
}
|
566
|
-
if (listener.route_config_name !=
|
772
|
+
if (listener.http_connection_manager.route_config_name !=
|
773
|
+
route_config_name_) {
|
567
774
|
if (route_config_watcher_ != nullptr) {
|
568
775
|
xds_client_->CancelRouteConfigDataWatch(
|
569
776
|
route_config_name_, route_config_watcher_,
|
570
|
-
/*delay_unsubscription
|
777
|
+
/*delay_unsubscription=*/
|
778
|
+
!listener.http_connection_manager.route_config_name.empty());
|
571
779
|
route_config_watcher_ = nullptr;
|
572
780
|
}
|
573
|
-
route_config_name_ =
|
781
|
+
route_config_name_ =
|
782
|
+
std::move(listener.http_connection_manager.route_config_name);
|
574
783
|
if (!route_config_name_.empty()) {
|
784
|
+
current_virtual_host_.routes.clear();
|
575
785
|
auto watcher = absl::make_unique<RouteConfigWatcher>(Ref());
|
576
786
|
route_config_watcher_ = watcher.get();
|
577
787
|
xds_client_->WatchRouteConfigData(route_config_name_, std::move(watcher));
|
578
788
|
}
|
579
789
|
}
|
580
|
-
|
790
|
+
current_listener_ = std::move(listener);
|
581
791
|
if (route_config_name_.empty()) {
|
582
|
-
GPR_ASSERT(
|
583
|
-
|
792
|
+
GPR_ASSERT(
|
793
|
+
current_listener_.http_connection_manager.rds_update.has_value());
|
794
|
+
OnRouteConfigUpdate(
|
795
|
+
std::move(*current_listener_.http_connection_manager.rds_update));
|
796
|
+
} else {
|
797
|
+
// HCM may contain newer filter config. We need to propagate the update as
|
798
|
+
// config selector to the channel
|
799
|
+
GenerateResult();
|
584
800
|
}
|
585
801
|
}
|
586
802
|
|
@@ -598,17 +814,18 @@ void XdsResolver::OnRouteConfigUpdate(XdsApi::RdsUpdate rds_update) {
|
|
598
814
|
.c_str()));
|
599
815
|
return;
|
600
816
|
}
|
601
|
-
// Save the
|
602
|
-
|
817
|
+
// Save the virtual host in the resolver.
|
818
|
+
current_virtual_host_ = std::move(*vhost);
|
603
819
|
// Send a new result to the channel.
|
604
820
|
GenerateResult();
|
605
821
|
}
|
606
822
|
|
607
|
-
void XdsResolver::OnError(
|
823
|
+
void XdsResolver::OnError(grpc_error_handle error) {
|
608
824
|
gpr_log(GPR_ERROR, "[xds_resolver %p] received error from XdsClient: %s",
|
609
|
-
this,
|
825
|
+
this, grpc_error_std_string(error).c_str());
|
610
826
|
Result result;
|
611
|
-
|
827
|
+
grpc_arg new_arg = xds_client_->MakeChannelArg();
|
828
|
+
result.args = grpc_channel_args_copy_and_add(args_, &new_arg, 1);
|
612
829
|
result.service_config_error = error;
|
613
830
|
result_handler_->ReturnResult(std::move(result));
|
614
831
|
}
|
@@ -618,7 +835,7 @@ void XdsResolver::OnResourceDoesNotExist() {
|
|
618
835
|
"[xds_resolver %p] LDS/RDS resource does not exist -- clearing "
|
619
836
|
"update and returning empty service config",
|
620
837
|
this);
|
621
|
-
|
838
|
+
current_virtual_host_.routes.clear();
|
622
839
|
Result result;
|
623
840
|
result.service_config =
|
624
841
|
ServiceConfig::Create(args_, "{}", &result.service_config_error);
|
@@ -627,7 +844,7 @@ void XdsResolver::OnResourceDoesNotExist() {
|
|
627
844
|
result_handler_->ReturnResult(std::move(result));
|
628
845
|
}
|
629
846
|
|
630
|
-
|
847
|
+
grpc_error_handle XdsResolver::CreateServiceConfig(
|
631
848
|
RefCountedPtr<ServiceConfig>* service_config) {
|
632
849
|
std::vector<std::string> clusters;
|
633
850
|
for (const auto& cluster : cluster_state_map_) {
|
@@ -654,18 +871,17 @@ grpc_error* XdsResolver::CreateServiceConfig(
|
|
654
871
|
" ]\n"
|
655
872
|
"}");
|
656
873
|
std::string json = absl::StrJoin(config_parts, "");
|
657
|
-
|
874
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
658
875
|
*service_config = ServiceConfig::Create(args_, json.c_str(), &error);
|
659
876
|
return error;
|
660
877
|
}
|
661
878
|
|
662
879
|
void XdsResolver::GenerateResult() {
|
663
|
-
if (
|
880
|
+
if (current_virtual_host_.routes.empty()) return;
|
664
881
|
// First create XdsConfigSelector, which may add new entries to the cluster
|
665
882
|
// state map, and then CreateServiceConfig for LB policies.
|
666
|
-
|
667
|
-
auto config_selector =
|
668
|
-
MakeRefCounted<XdsConfigSelector>(Ref(), current_update_, error);
|
883
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
884
|
+
auto config_selector = MakeRefCounted<XdsConfigSelector>(Ref(), &error);
|
669
885
|
if (error != GRPC_ERROR_NONE) {
|
670
886
|
OnError(error);
|
671
887
|
return;
|
@@ -680,8 +896,12 @@ void XdsResolver::GenerateResult() {
|
|
680
896
|
gpr_log(GPR_INFO, "[xds_resolver %p] generated service config: %s", this,
|
681
897
|
result.service_config->json_string().c_str());
|
682
898
|
}
|
683
|
-
grpc_arg
|
684
|
-
|
899
|
+
grpc_arg new_args[] = {
|
900
|
+
xds_client_->MakeChannelArg(),
|
901
|
+
config_selector->MakeChannelArg(),
|
902
|
+
};
|
903
|
+
result.args =
|
904
|
+
grpc_channel_args_copy_and_add(args_, new_args, GPR_ARRAY_SIZE(new_args));
|
685
905
|
result_handler_->ReturnResult(std::move(result));
|
686
906
|
}
|
687
907
|
|