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
data/src/core/ext/xds/xds_api.h
CHANGED
@@ -33,10 +33,12 @@
|
|
33
33
|
|
34
34
|
#include <grpc/slice_buffer.h>
|
35
35
|
|
36
|
+
#include "envoy/admin/v3/config_dump.upb.h"
|
36
37
|
#include "src/core/ext/filters/client_channel/server_address.h"
|
37
38
|
#include "src/core/ext/xds/xds_bootstrap.h"
|
38
39
|
#include "src/core/ext/xds/xds_client_stats.h"
|
39
|
-
#include "src/core/
|
40
|
+
#include "src/core/ext/xds/xds_http_filters.h"
|
41
|
+
#include "src/core/lib/matchers/matchers.h"
|
40
42
|
|
41
43
|
namespace grpc_core {
|
42
44
|
|
@@ -58,13 +60,16 @@ class XdsApi {
|
|
58
60
|
int64_t seconds = 0;
|
59
61
|
int32_t nanos = 0;
|
60
62
|
bool operator==(const Duration& other) const {
|
61
|
-
return
|
63
|
+
return seconds == other.seconds && nanos == other.nanos;
|
62
64
|
}
|
63
65
|
std::string ToString() const {
|
64
66
|
return absl::StrFormat("Duration seconds: %ld, nanos %d", seconds, nanos);
|
65
67
|
}
|
66
68
|
};
|
67
69
|
|
70
|
+
using TypedPerFilterConfig =
|
71
|
+
std::map<std::string, XdsHttpFilterImpl::FilterConfig>;
|
72
|
+
|
68
73
|
// TODO(donnadionne): When we can use absl::variant<>, consider using that
|
69
74
|
// for: PathMatcher, HeaderMatcher, cluster_name and weighted_clusters
|
70
75
|
struct Route {
|
@@ -75,14 +80,38 @@ class XdsApi {
|
|
75
80
|
absl::optional<uint32_t> fraction_per_million;
|
76
81
|
|
77
82
|
bool operator==(const Matchers& other) const {
|
78
|
-
return
|
79
|
-
|
80
|
-
|
83
|
+
return path_matcher == other.path_matcher &&
|
84
|
+
header_matchers == other.header_matchers &&
|
85
|
+
fraction_per_million == other.fraction_per_million;
|
81
86
|
}
|
82
87
|
std::string ToString() const;
|
83
88
|
};
|
84
89
|
|
90
|
+
struct HashPolicy {
|
91
|
+
enum Type { HEADER, CHANNEL_ID };
|
92
|
+
Type type;
|
93
|
+
bool terminal = false;
|
94
|
+
// Fields used for type HEADER.
|
95
|
+
std::string header_name;
|
96
|
+
std::unique_ptr<RE2> regex = nullptr;
|
97
|
+
std::string regex_substitution;
|
98
|
+
|
99
|
+
HashPolicy() {}
|
100
|
+
|
101
|
+
// Copyable.
|
102
|
+
HashPolicy(const HashPolicy& other);
|
103
|
+
HashPolicy& operator=(const HashPolicy& other);
|
104
|
+
|
105
|
+
// Moveable.
|
106
|
+
HashPolicy(HashPolicy&& other) noexcept;
|
107
|
+
HashPolicy& operator=(HashPolicy&& other) noexcept;
|
108
|
+
|
109
|
+
bool operator==(const HashPolicy& other) const;
|
110
|
+
std::string ToString() const;
|
111
|
+
};
|
112
|
+
|
85
113
|
Matchers matchers;
|
114
|
+
std::vector<HashPolicy> hash_policies;
|
86
115
|
|
87
116
|
// Action for this route.
|
88
117
|
// TODO(roth): When we can use absl::variant<>, consider using that
|
@@ -91,8 +120,11 @@ class XdsApi {
|
|
91
120
|
struct ClusterWeight {
|
92
121
|
std::string name;
|
93
122
|
uint32_t weight;
|
123
|
+
TypedPerFilterConfig typed_per_filter_config;
|
124
|
+
|
94
125
|
bool operator==(const ClusterWeight& other) const {
|
95
|
-
return
|
126
|
+
return name == other.name && weight == other.weight &&
|
127
|
+
typed_per_filter_config == other.typed_per_filter_config;
|
96
128
|
}
|
97
129
|
std::string ToString() const;
|
98
130
|
};
|
@@ -103,11 +135,13 @@ class XdsApi {
|
|
103
135
|
// not set.
|
104
136
|
absl::optional<Duration> max_stream_duration;
|
105
137
|
|
138
|
+
TypedPerFilterConfig typed_per_filter_config;
|
139
|
+
|
106
140
|
bool operator==(const Route& other) const {
|
107
|
-
return
|
108
|
-
|
109
|
-
|
110
|
-
|
141
|
+
return matchers == other.matchers && cluster_name == other.cluster_name &&
|
142
|
+
weighted_clusters == other.weighted_clusters &&
|
143
|
+
max_stream_duration == other.max_stream_duration &&
|
144
|
+
typed_per_filter_config == other.typed_per_filter_config;
|
111
145
|
}
|
112
146
|
std::string ToString() const;
|
113
147
|
};
|
@@ -116,9 +150,11 @@ class XdsApi {
|
|
116
150
|
struct VirtualHost {
|
117
151
|
std::vector<std::string> domains;
|
118
152
|
std::vector<Route> routes;
|
153
|
+
TypedPerFilterConfig typed_per_filter_config;
|
119
154
|
|
120
155
|
bool operator==(const VirtualHost& other) const {
|
121
|
-
return domains == other.domains && routes == other.routes
|
156
|
+
return domains == other.domains && routes == other.routes &&
|
157
|
+
typed_per_filter_config == other.typed_per_filter_config;
|
122
158
|
}
|
123
159
|
};
|
124
160
|
|
@@ -204,29 +240,157 @@ class XdsApi {
|
|
204
240
|
kTcpListener = 0,
|
205
241
|
kHttpApiListener,
|
206
242
|
} type;
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
243
|
+
|
244
|
+
struct HttpConnectionManager {
|
245
|
+
// The name to use in the RDS request.
|
246
|
+
std::string route_config_name;
|
247
|
+
// Storing the Http Connection Manager Common Http Protocol Option
|
248
|
+
// max_stream_duration
|
249
|
+
Duration http_max_stream_duration;
|
250
|
+
// The RouteConfiguration to use for this listener.
|
251
|
+
// Present only if it is inlined in the LDS response.
|
252
|
+
absl::optional<RdsUpdate> rds_update;
|
253
|
+
|
254
|
+
struct HttpFilter {
|
255
|
+
std::string name;
|
256
|
+
XdsHttpFilterImpl::FilterConfig config;
|
257
|
+
|
258
|
+
bool operator==(const HttpFilter& other) const {
|
259
|
+
return name == other.name && config == other.config;
|
260
|
+
}
|
261
|
+
|
262
|
+
std::string ToString() const;
|
263
|
+
};
|
264
|
+
std::vector<HttpFilter> http_filters;
|
265
|
+
|
266
|
+
bool operator==(const HttpConnectionManager& other) const {
|
267
|
+
return route_config_name == other.route_config_name &&
|
268
|
+
http_max_stream_duration == other.http_max_stream_duration &&
|
269
|
+
rds_update == other.rds_update &&
|
270
|
+
http_filters == other.http_filters;
|
271
|
+
}
|
272
|
+
|
273
|
+
std::string ToString() const;
|
274
|
+
};
|
275
|
+
|
276
|
+
// Populated for type=kHttpApiListener.
|
277
|
+
HttpConnectionManager http_connection_manager;
|
278
|
+
|
279
|
+
// Populated for type=kTcpListener.
|
280
|
+
// host:port listening_address set when type is kTcpListener
|
281
|
+
std::string address;
|
282
|
+
|
283
|
+
struct FilterChainData {
|
284
|
+
DownstreamTlsContext downstream_tls_context;
|
285
|
+
// This is in principle the filter list.
|
286
|
+
// We currently require exactly one filter, which is the HCM.
|
287
|
+
HttpConnectionManager http_connection_manager;
|
288
|
+
|
289
|
+
bool operator==(const FilterChainData& other) const {
|
290
|
+
return downstream_tls_context == other.downstream_tls_context &&
|
291
|
+
http_connection_manager == other.http_connection_manager;
|
292
|
+
}
|
293
|
+
|
294
|
+
std::string ToString() const;
|
295
|
+
} filter_chain_data;
|
296
|
+
|
297
|
+
// A multi-level map used to determine which filter chain to use for a given
|
298
|
+
// incoming connection. Determining the right filter chain for a given
|
299
|
+
// connection checks the following properties, in order:
|
300
|
+
// - destination port (never matched, so not present in map)
|
301
|
+
// - destination IP address
|
302
|
+
// - server name (never matched, so not present in map)
|
303
|
+
// - transport protocol (allows only "raw_buffer" or unset, prefers the
|
304
|
+
// former, so only one of those two types is present in map)
|
305
|
+
// - application protocol (never matched, so not present in map)
|
306
|
+
// - connection source type (any, local or external)
|
307
|
+
// - source IP address
|
308
|
+
// - source port
|
309
|
+
// https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/listener/v3/listener_components.proto#config-listener-v3-filterchainmatch
|
310
|
+
// for more details
|
311
|
+
struct FilterChainMap {
|
312
|
+
struct FilterChainDataSharedPtr {
|
313
|
+
std::shared_ptr<FilterChainData> data;
|
314
|
+
bool operator==(const FilterChainDataSharedPtr& other) const {
|
315
|
+
return *data == *other.data;
|
316
|
+
}
|
317
|
+
};
|
318
|
+
struct CidrRange {
|
319
|
+
grpc_resolved_address address;
|
320
|
+
uint32_t prefix_len;
|
321
|
+
|
322
|
+
bool operator==(const CidrRange& other) const {
|
323
|
+
return memcmp(&address, &other.address, sizeof(address)) == 0 &&
|
324
|
+
prefix_len == other.prefix_len;
|
325
|
+
}
|
326
|
+
|
327
|
+
std::string ToString() const;
|
328
|
+
};
|
329
|
+
using SourcePortsMap = std::map<uint16_t, FilterChainDataSharedPtr>;
|
330
|
+
struct SourceIp {
|
331
|
+
absl::optional<CidrRange> prefix_range;
|
332
|
+
SourcePortsMap ports_map;
|
333
|
+
|
334
|
+
bool operator==(const SourceIp& other) const {
|
335
|
+
return prefix_range == other.prefix_range &&
|
336
|
+
ports_map == other.ports_map;
|
337
|
+
}
|
338
|
+
};
|
339
|
+
using SourceIpVector = std::vector<SourceIp>;
|
340
|
+
enum class ConnectionSourceType {
|
341
|
+
kAny = 0,
|
342
|
+
kSameIpOrLoopback,
|
343
|
+
kExternal
|
344
|
+
};
|
345
|
+
using ConnectionSourceTypesArray = std::array<SourceIpVector, 3>;
|
346
|
+
struct DestinationIp {
|
347
|
+
absl::optional<CidrRange> prefix_range;
|
348
|
+
// We always fail match on server name, so those filter chains are not
|
349
|
+
// included here.
|
350
|
+
ConnectionSourceTypesArray source_types_array;
|
351
|
+
|
352
|
+
bool operator==(const DestinationIp& other) const {
|
353
|
+
return prefix_range == other.prefix_range &&
|
354
|
+
source_types_array == other.source_types_array;
|
355
|
+
}
|
356
|
+
};
|
357
|
+
// We always fail match on destination ports map
|
358
|
+
using DestinationIpVector = std::vector<DestinationIp>;
|
359
|
+
DestinationIpVector destination_ip_vector;
|
360
|
+
|
361
|
+
bool operator==(const FilterChainMap& other) const {
|
362
|
+
return destination_ip_vector == other.destination_ip_vector;
|
363
|
+
}
|
364
|
+
|
365
|
+
std::string ToString() const;
|
366
|
+
} filter_chain_map;
|
367
|
+
|
368
|
+
absl::optional<FilterChainData> default_filter_chain;
|
216
369
|
|
217
370
|
bool operator==(const LdsUpdate& other) const {
|
218
|
-
return
|
219
|
-
|
220
|
-
|
221
|
-
|
371
|
+
return http_connection_manager == other.http_connection_manager &&
|
372
|
+
address == other.address &&
|
373
|
+
filter_chain_map == other.filter_chain_map &&
|
374
|
+
default_filter_chain == other.default_filter_chain;
|
222
375
|
}
|
223
376
|
|
224
377
|
std::string ToString() const;
|
225
378
|
};
|
226
379
|
|
227
|
-
|
380
|
+
struct LdsResourceData {
|
381
|
+
LdsUpdate resource;
|
382
|
+
std::string serialized_proto;
|
383
|
+
};
|
384
|
+
|
385
|
+
using LdsUpdateMap = std::map<std::string /*server_name*/, LdsResourceData>;
|
386
|
+
|
387
|
+
struct RdsResourceData {
|
388
|
+
RdsUpdate resource;
|
389
|
+
std::string serialized_proto;
|
390
|
+
};
|
228
391
|
|
229
|
-
using RdsUpdateMap =
|
392
|
+
using RdsUpdateMap =
|
393
|
+
std::map<std::string /*route_config_name*/, RdsResourceData>;
|
230
394
|
|
231
395
|
struct CdsUpdate {
|
232
396
|
enum ClusterType { EDS, LOGICAL_DNS, AGGREGATE };
|
@@ -269,7 +433,12 @@ class XdsApi {
|
|
269
433
|
std::string ToString() const;
|
270
434
|
};
|
271
435
|
|
272
|
-
|
436
|
+
struct CdsResourceData {
|
437
|
+
CdsUpdate resource;
|
438
|
+
std::string serialized_proto;
|
439
|
+
};
|
440
|
+
|
441
|
+
using CdsUpdateMap = std::map<std::string /*cluster_name*/, CdsResourceData>;
|
273
442
|
|
274
443
|
struct EdsUpdate {
|
275
444
|
struct Priority {
|
@@ -353,7 +522,13 @@ class XdsApi {
|
|
353
522
|
std::string ToString() const;
|
354
523
|
};
|
355
524
|
|
356
|
-
|
525
|
+
struct EdsResourceData {
|
526
|
+
EdsUpdate resource;
|
527
|
+
std::string serialized_proto;
|
528
|
+
};
|
529
|
+
|
530
|
+
using EdsUpdateMap =
|
531
|
+
std::map<std::string /*eds_service_name*/, EdsResourceData>;
|
357
532
|
|
358
533
|
struct ClusterLoadReport {
|
359
534
|
XdsClusterDropStats::Snapshot dropped_requests;
|
@@ -366,18 +541,66 @@ class XdsApi {
|
|
366
541
|
std::pair<std::string /*cluster_name*/, std::string /*eds_service_name*/>,
|
367
542
|
ClusterLoadReport>;
|
368
543
|
|
369
|
-
|
544
|
+
// The metadata of the xDS resource; used by the xDS config dump.
|
545
|
+
struct ResourceMetadata {
|
546
|
+
// Resource status from the view of a xDS client, which tells the
|
547
|
+
// synchronization status between the xDS client and the xDS server.
|
548
|
+
enum ClientResourceStatus {
|
549
|
+
// Client requested this resource but hasn't received any update from
|
550
|
+
// management server. The client will not fail requests, but will queue
|
551
|
+
// them
|
552
|
+
// until update arrives or the client times out waiting for the resource.
|
553
|
+
REQUESTED = 1,
|
554
|
+
// This resource has been requested by the client but has either not been
|
555
|
+
// delivered by the server or was previously delivered by the server and
|
556
|
+
// then subsequently removed from resources provided by the server.
|
557
|
+
DOES_NOT_EXIST,
|
558
|
+
// Client received this resource and replied with ACK.
|
559
|
+
ACKED,
|
560
|
+
// Client received this resource and replied with NACK.
|
561
|
+
NACKED
|
562
|
+
};
|
370
563
|
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
564
|
+
// The client status of this resource.
|
565
|
+
ClientResourceStatus client_status = REQUESTED;
|
566
|
+
// The serialized bytes of the last successfully updated raw xDS resource.
|
567
|
+
std::string serialized_proto;
|
568
|
+
// The timestamp when the resource was last successfully updated.
|
569
|
+
grpc_millis update_time = 0;
|
570
|
+
// The last successfully updated version of the resource.
|
571
|
+
std::string version;
|
572
|
+
// The rejected version string of the last failed update attempt.
|
573
|
+
std::string failed_version;
|
574
|
+
// Details about the last failed update attempt.
|
575
|
+
std::string failed_details;
|
576
|
+
// Timestamp of the last failed update attempt.
|
577
|
+
grpc_millis failed_update_time = 0;
|
578
|
+
};
|
579
|
+
using ResourceMetadataMap =
|
580
|
+
std::map<absl::string_view /*resource_name*/, const ResourceMetadata*>;
|
581
|
+
struct ResourceTypeMetadata {
|
582
|
+
absl::string_view version;
|
583
|
+
ResourceMetadataMap resource_metadata_map;
|
584
|
+
};
|
585
|
+
using ResourceTypeMetadataMap =
|
586
|
+
std::map<absl::string_view /*type_url*/, ResourceTypeMetadata>;
|
587
|
+
static_assert(static_cast<ResourceMetadata::ClientResourceStatus>(
|
588
|
+
envoy_admin_v3_REQUESTED) ==
|
589
|
+
ResourceMetadata::ClientResourceStatus::REQUESTED,
|
590
|
+
"");
|
591
|
+
static_assert(static_cast<ResourceMetadata::ClientResourceStatus>(
|
592
|
+
envoy_admin_v3_DOES_NOT_EXIST) ==
|
593
|
+
ResourceMetadata::ClientResourceStatus::DOES_NOT_EXIST,
|
594
|
+
"");
|
595
|
+
static_assert(static_cast<ResourceMetadata::ClientResourceStatus>(
|
596
|
+
envoy_admin_v3_ACKED) ==
|
597
|
+
ResourceMetadata::ClientResourceStatus::ACKED,
|
598
|
+
"");
|
599
|
+
static_assert(static_cast<ResourceMetadata::ClientResourceStatus>(
|
600
|
+
envoy_admin_v3_NACKED) ==
|
601
|
+
ResourceMetadata::ClientResourceStatus::NACKED,
|
602
|
+
"");
|
379
603
|
|
380
|
-
// Parses an ADS response.
|
381
604
|
// If the response can't be parsed at the top level, the resulting
|
382
605
|
// type_url will be empty.
|
383
606
|
// If there is any other type of validation error, the parse_error
|
@@ -386,7 +609,7 @@ class XdsApi {
|
|
386
609
|
// Otherwise, one of the *_update_map fields will be populated, based
|
387
610
|
// on the type_url field.
|
388
611
|
struct AdsParseResult {
|
389
|
-
|
612
|
+
grpc_error_handle parse_error = GRPC_ERROR_NONE;
|
390
613
|
std::string version;
|
391
614
|
std::string nonce;
|
392
615
|
std::string type_url;
|
@@ -396,8 +619,21 @@ class XdsApi {
|
|
396
619
|
EdsUpdateMap eds_update_map;
|
397
620
|
std::set<std::string> resource_names_failed;
|
398
621
|
};
|
622
|
+
|
623
|
+
XdsApi(XdsClient* client, TraceFlag* tracer, const XdsBootstrap::Node* node);
|
624
|
+
|
625
|
+
// Creates an ADS request.
|
626
|
+
// Takes ownership of \a error.
|
627
|
+
grpc_slice CreateAdsRequest(const XdsBootstrap::XdsServer& server,
|
628
|
+
const std::string& type_url,
|
629
|
+
const std::set<absl::string_view>& resource_names,
|
630
|
+
const std::string& version,
|
631
|
+
const std::string& nonce, grpc_error_handle error,
|
632
|
+
bool populate_node);
|
633
|
+
|
634
|
+
// Parses an ADS response.
|
399
635
|
AdsParseResult ParseAdsResponse(
|
400
|
-
const grpc_slice& encoded_response,
|
636
|
+
const XdsBootstrap::XdsServer& server, const grpc_slice& encoded_response,
|
401
637
|
const std::set<absl::string_view>& expected_listener_names,
|
402
638
|
const std::set<absl::string_view>& expected_route_configuration_names,
|
403
639
|
const std::set<absl::string_view>& expected_cluster_names,
|
@@ -412,10 +648,14 @@ class XdsApi {
|
|
412
648
|
// Parses the LRS response and returns \a
|
413
649
|
// load_reporting_interval for client-side load reporting. If there is any
|
414
650
|
// error, the output config is invalid.
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
651
|
+
grpc_error_handle ParseLrsResponse(const grpc_slice& encoded_response,
|
652
|
+
bool* send_all_clusters,
|
653
|
+
std::set<std::string>* cluster_names,
|
654
|
+
grpc_millis* load_reporting_interval);
|
655
|
+
|
656
|
+
// Assemble the client config proto message and return the serialized result.
|
657
|
+
std::string AssembleClientConfig(
|
658
|
+
const ResourceTypeMetadataMap& resource_type_metadata_map);
|
419
659
|
|
420
660
|
private:
|
421
661
|
XdsClient* client_;
|
@@ -30,7 +30,6 @@
|
|
30
30
|
|
31
31
|
#include "src/core/ext/xds/certificate_provider_registry.h"
|
32
32
|
#include "src/core/ext/xds/xds_api.h"
|
33
|
-
#include "src/core/lib/gpr/env.h"
|
34
33
|
#include "src/core/lib/gpr/string.h"
|
35
34
|
#include "src/core/lib/iomgr/load_file.h"
|
36
35
|
#include "src/core/lib/security/credentials/credentials.h"
|
@@ -81,136 +80,27 @@ bool XdsBootstrap::XdsServer::ShouldUseV3() const {
|
|
81
80
|
// XdsBootstrap
|
82
81
|
//
|
83
82
|
|
84
|
-
|
85
|
-
|
86
|
-
std::string BootstrapString(const XdsBootstrap& bootstrap) {
|
87
|
-
std::vector<std::string> parts;
|
88
|
-
if (bootstrap.node() != nullptr) {
|
89
|
-
parts.push_back(absl::StrFormat(
|
90
|
-
"node={\n"
|
91
|
-
" id=\"%s\",\n"
|
92
|
-
" cluster=\"%s\",\n"
|
93
|
-
" locality={\n"
|
94
|
-
" region=\"%s\",\n"
|
95
|
-
" zone=\"%s\",\n"
|
96
|
-
" subzone=\"%s\"\n"
|
97
|
-
" },\n"
|
98
|
-
" metadata=%s,\n"
|
99
|
-
"},\n",
|
100
|
-
bootstrap.node()->id, bootstrap.node()->cluster,
|
101
|
-
bootstrap.node()->locality_region, bootstrap.node()->locality_zone,
|
102
|
-
bootstrap.node()->locality_subzone, bootstrap.node()->metadata.Dump()));
|
103
|
-
}
|
104
|
-
parts.push_back(absl::StrFormat(
|
105
|
-
"servers=[\n"
|
106
|
-
" {\n"
|
107
|
-
" uri=\"%s\",\n"
|
108
|
-
" creds_type=%s,\n",
|
109
|
-
bootstrap.server().server_uri, bootstrap.server().channel_creds_type));
|
110
|
-
if (bootstrap.server().channel_creds_config.type() != Json::Type::JSON_NULL) {
|
111
|
-
parts.push_back(
|
112
|
-
absl::StrFormat(" creds_config=%s,",
|
113
|
-
bootstrap.server().channel_creds_config.Dump()));
|
114
|
-
}
|
115
|
-
if (!bootstrap.server().server_features.empty()) {
|
116
|
-
parts.push_back(absl::StrCat(
|
117
|
-
" server_features=[",
|
118
|
-
absl::StrJoin(bootstrap.server().server_features, ", "), "],\n"));
|
119
|
-
}
|
120
|
-
parts.push_back(" }\n],\n");
|
121
|
-
parts.push_back("certificate_providers={\n");
|
122
|
-
for (const auto& entry : bootstrap.certificate_providers()) {
|
123
|
-
parts.push_back(
|
124
|
-
absl::StrFormat(" %s={\n"
|
125
|
-
" plugin_name=%s\n"
|
126
|
-
" config=%s\n"
|
127
|
-
" },\n",
|
128
|
-
entry.first, entry.second.plugin_name,
|
129
|
-
entry.second.config->ToString()));
|
130
|
-
}
|
131
|
-
parts.push_back("}");
|
132
|
-
return absl::StrJoin(parts, "");
|
133
|
-
}
|
134
|
-
|
135
|
-
std::unique_ptr<XdsBootstrap> ParseJsonAndCreate(
|
136
|
-
XdsClient* client, TraceFlag* tracer, absl::string_view json_string,
|
137
|
-
absl::string_view bootstrap_source, grpc_error** error) {
|
83
|
+
std::unique_ptr<XdsBootstrap> XdsBootstrap::Create(
|
84
|
+
absl::string_view json_string, grpc_error_handle* error) {
|
138
85
|
Json json = Json::Parse(json_string, error);
|
139
86
|
if (*error != GRPC_ERROR_NONE) {
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
error, 1);
|
87
|
+
grpc_error_handle error_out =
|
88
|
+
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
89
|
+
"Failed to parse bootstrap JSON string", error, 1);
|
144
90
|
GRPC_ERROR_UNREF(*error);
|
145
91
|
*error = error_out;
|
146
92
|
return nullptr;
|
147
93
|
}
|
148
|
-
|
149
|
-
absl::make_unique<XdsBootstrap>(std::move(json), error);
|
150
|
-
if (*error == GRPC_ERROR_NONE && GRPC_TRACE_FLAG_ENABLED(*tracer)) {
|
151
|
-
gpr_log(GPR_INFO,
|
152
|
-
"[xds_client %p] Bootstrap config for creating xds client:\n%s",
|
153
|
-
client, BootstrapString(*result).c_str());
|
154
|
-
}
|
155
|
-
return result;
|
156
|
-
}
|
157
|
-
|
158
|
-
} // namespace
|
159
|
-
|
160
|
-
std::unique_ptr<XdsBootstrap> XdsBootstrap::Create(XdsClient* client,
|
161
|
-
TraceFlag* tracer,
|
162
|
-
const char* fallback_config,
|
163
|
-
grpc_error** error) {
|
164
|
-
// First, try GRPC_XDS_BOOTSTRAP env var.
|
165
|
-
grpc_core::UniquePtr<char> path(gpr_getenv("GRPC_XDS_BOOTSTRAP"));
|
166
|
-
if (path != nullptr) {
|
167
|
-
if (GRPC_TRACE_FLAG_ENABLED(*tracer)) {
|
168
|
-
gpr_log(GPR_INFO,
|
169
|
-
"[xds_client %p] Got bootstrap file location from "
|
170
|
-
"GRPC_XDS_BOOTSTRAP environment variable: %s",
|
171
|
-
client, path.get());
|
172
|
-
}
|
173
|
-
grpc_slice contents;
|
174
|
-
*error =
|
175
|
-
grpc_load_file(path.get(), /*add_null_terminator=*/true, &contents);
|
176
|
-
if (*error != GRPC_ERROR_NONE) return nullptr;
|
177
|
-
absl::string_view contents_str_view = StringViewFromSlice(contents);
|
178
|
-
if (GRPC_TRACE_FLAG_ENABLED(*tracer)) {
|
179
|
-
gpr_log(GPR_DEBUG, "[xds_client %p] Bootstrap file contents: %s", client,
|
180
|
-
std::string(contents_str_view).c_str());
|
181
|
-
}
|
182
|
-
std::string bootstrap_source = absl::StrCat("file ", path.get());
|
183
|
-
auto result = ParseJsonAndCreate(client, tracer, contents_str_view,
|
184
|
-
bootstrap_source, error);
|
185
|
-
grpc_slice_unref_internal(contents);
|
186
|
-
return result;
|
187
|
-
}
|
188
|
-
// Next, try GRPC_XDS_BOOTSTRAP_CONFIG env var.
|
189
|
-
grpc_core::UniquePtr<char> env_config(
|
190
|
-
gpr_getenv("GRPC_XDS_BOOTSTRAP_CONFIG"));
|
191
|
-
if (env_config != nullptr) {
|
192
|
-
return ParseJsonAndCreate(client, tracer, env_config.get(),
|
193
|
-
"GRPC_XDS_BOOTSTRAP_CONFIG env var", error);
|
194
|
-
}
|
195
|
-
// Finally, try fallback config.
|
196
|
-
if (fallback_config != nullptr) {
|
197
|
-
return ParseJsonAndCreate(client, tracer, fallback_config,
|
198
|
-
"fallback config", error);
|
199
|
-
}
|
200
|
-
// No bootstrap config found.
|
201
|
-
*error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
202
|
-
"Environment variables GRPC_XDS_BOOTSTRAP or GRPC_XDS_BOOTSTRAP_CONFIG "
|
203
|
-
"not defined");
|
204
|
-
return nullptr;
|
94
|
+
return absl::make_unique<XdsBootstrap>(std::move(json), error);
|
205
95
|
}
|
206
96
|
|
207
|
-
XdsBootstrap::XdsBootstrap(Json json,
|
97
|
+
XdsBootstrap::XdsBootstrap(Json json, grpc_error_handle* error) {
|
208
98
|
if (json.type() != Json::Type::OBJECT) {
|
209
99
|
*error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
210
100
|
"malformed JSON in bootstrap file");
|
211
101
|
return;
|
212
102
|
}
|
213
|
-
std::vector<
|
103
|
+
std::vector<grpc_error_handle> error_list;
|
214
104
|
auto it = json.mutable_object()->find("xds_servers");
|
215
105
|
if (it == json.mutable_object()->end()) {
|
216
106
|
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
@@ -219,7 +109,7 @@ XdsBootstrap::XdsBootstrap(Json json, grpc_error** error) {
|
|
219
109
|
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
220
110
|
"\"xds_servers\" field is not an array"));
|
221
111
|
} else {
|
222
|
-
|
112
|
+
grpc_error_handle parse_error = ParseXdsServerList(&it->second);
|
223
113
|
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
224
114
|
}
|
225
115
|
it = json.mutable_object()->find("node");
|
@@ -228,10 +118,20 @@ XdsBootstrap::XdsBootstrap(Json json, grpc_error** error) {
|
|
228
118
|
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
229
119
|
"\"node\" field is not an object"));
|
230
120
|
} else {
|
231
|
-
|
121
|
+
grpc_error_handle parse_error = ParseNode(&it->second);
|
232
122
|
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
233
123
|
}
|
234
124
|
}
|
125
|
+
it = json.mutable_object()->find("server_listener_resource_name_template");
|
126
|
+
if (it != json.mutable_object()->end()) {
|
127
|
+
if (it->second.type() != Json::Type::STRING) {
|
128
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
129
|
+
"\"server_listener_resource_name_template\" field is not a string"));
|
130
|
+
} else {
|
131
|
+
server_listener_resource_name_template_ =
|
132
|
+
std::move(*it->second.mutable_string_value());
|
133
|
+
}
|
134
|
+
}
|
235
135
|
if (XdsSecurityEnabled()) {
|
236
136
|
it = json.mutable_object()->find("certificate_providers");
|
237
137
|
if (it != json.mutable_object()->end()) {
|
@@ -239,7 +139,7 @@ XdsBootstrap::XdsBootstrap(Json json, grpc_error** error) {
|
|
239
139
|
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
240
140
|
"\"certificate_providers\" field is not an object"));
|
241
141
|
} else {
|
242
|
-
|
142
|
+
grpc_error_handle parse_error = ParseCertificateProviders(&it->second);
|
243
143
|
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
244
144
|
}
|
245
145
|
}
|
@@ -248,15 +148,15 @@ XdsBootstrap::XdsBootstrap(Json json, grpc_error** error) {
|
|
248
148
|
&error_list);
|
249
149
|
}
|
250
150
|
|
251
|
-
|
252
|
-
std::vector<
|
151
|
+
grpc_error_handle XdsBootstrap::ParseXdsServerList(Json* json) {
|
152
|
+
std::vector<grpc_error_handle> error_list;
|
253
153
|
for (size_t i = 0; i < json->mutable_array()->size(); ++i) {
|
254
154
|
Json& child = json->mutable_array()->at(i);
|
255
155
|
if (child.type() != Json::Type::OBJECT) {
|
256
156
|
error_list.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
257
157
|
absl::StrCat("array element ", i, " is not an object").c_str()));
|
258
158
|
} else {
|
259
|
-
|
159
|
+
grpc_error_handle parse_error = ParseXdsServer(&child, i);
|
260
160
|
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
261
161
|
}
|
262
162
|
}
|
@@ -264,8 +164,8 @@ grpc_error* XdsBootstrap::ParseXdsServerList(Json* json) {
|
|
264
164
|
&error_list);
|
265
165
|
}
|
266
166
|
|
267
|
-
|
268
|
-
std::vector<
|
167
|
+
grpc_error_handle XdsBootstrap::ParseXdsServer(Json* json, size_t idx) {
|
168
|
+
std::vector<grpc_error_handle> error_list;
|
269
169
|
servers_.emplace_back();
|
270
170
|
XdsServer& server = servers_[servers_.size() - 1];
|
271
171
|
auto it = json->mutable_object()->find("server_uri");
|
@@ -286,7 +186,8 @@ grpc_error* XdsBootstrap::ParseXdsServer(Json* json, size_t idx) {
|
|
286
186
|
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
287
187
|
"\"channel_creds\" field is not an array"));
|
288
188
|
} else {
|
289
|
-
|
189
|
+
grpc_error_handle parse_error =
|
190
|
+
ParseChannelCredsArray(&it->second, &server);
|
290
191
|
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
291
192
|
}
|
292
193
|
it = json->mutable_object()->find("server_features");
|
@@ -295,14 +196,15 @@ grpc_error* XdsBootstrap::ParseXdsServer(Json* json, size_t idx) {
|
|
295
196
|
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
296
197
|
"\"server_features\" field is not an array"));
|
297
198
|
} else {
|
298
|
-
|
199
|
+
grpc_error_handle parse_error =
|
200
|
+
ParseServerFeaturesArray(&it->second, &server);
|
299
201
|
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
300
202
|
}
|
301
203
|
}
|
302
204
|
// Can't use GRPC_ERROR_CREATE_FROM_VECTOR() here, because the error
|
303
205
|
// string is not static in this case.
|
304
206
|
if (error_list.empty()) return GRPC_ERROR_NONE;
|
305
|
-
|
207
|
+
grpc_error_handle error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
306
208
|
absl::StrCat("errors parsing index ", idx).c_str());
|
307
209
|
for (size_t i = 0; i < error_list.size(); ++i) {
|
308
210
|
error = grpc_error_add_child(error, error_list[i]);
|
@@ -310,16 +212,16 @@ grpc_error* XdsBootstrap::ParseXdsServer(Json* json, size_t idx) {
|
|
310
212
|
return error;
|
311
213
|
}
|
312
214
|
|
313
|
-
|
314
|
-
|
315
|
-
std::vector<
|
215
|
+
grpc_error_handle XdsBootstrap::ParseChannelCredsArray(Json* json,
|
216
|
+
XdsServer* server) {
|
217
|
+
std::vector<grpc_error_handle> error_list;
|
316
218
|
for (size_t i = 0; i < json->mutable_array()->size(); ++i) {
|
317
219
|
Json& child = json->mutable_array()->at(i);
|
318
220
|
if (child.type() != Json::Type::OBJECT) {
|
319
221
|
error_list.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
320
222
|
absl::StrCat("array element ", i, " is not an object").c_str()));
|
321
223
|
} else {
|
322
|
-
|
224
|
+
grpc_error_handle parse_error = ParseChannelCreds(&child, i, server);
|
323
225
|
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
324
226
|
}
|
325
227
|
}
|
@@ -331,9 +233,9 @@ grpc_error* XdsBootstrap::ParseChannelCredsArray(Json* json,
|
|
331
233
|
&error_list);
|
332
234
|
}
|
333
235
|
|
334
|
-
|
335
|
-
|
336
|
-
std::vector<
|
236
|
+
grpc_error_handle XdsBootstrap::ParseChannelCreds(Json* json, size_t idx,
|
237
|
+
XdsServer* server) {
|
238
|
+
std::vector<grpc_error_handle> error_list;
|
337
239
|
std::string type;
|
338
240
|
auto it = json->mutable_object()->find("type");
|
339
241
|
if (it == json->mutable_object()->end()) {
|
@@ -369,7 +271,7 @@ grpc_error* XdsBootstrap::ParseChannelCreds(Json* json, size_t idx,
|
|
369
271
|
// Can't use GRPC_ERROR_CREATE_FROM_VECTOR() here, because the error
|
370
272
|
// string is not static in this case.
|
371
273
|
if (error_list.empty()) return GRPC_ERROR_NONE;
|
372
|
-
|
274
|
+
grpc_error_handle error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
373
275
|
absl::StrCat("errors parsing index ", idx).c_str());
|
374
276
|
for (size_t i = 0; i < error_list.size(); ++i) {
|
375
277
|
error = grpc_error_add_child(error, error_list[i]);
|
@@ -377,9 +279,9 @@ grpc_error* XdsBootstrap::ParseChannelCreds(Json* json, size_t idx,
|
|
377
279
|
return error;
|
378
280
|
}
|
379
281
|
|
380
|
-
|
381
|
-
|
382
|
-
std::vector<
|
282
|
+
grpc_error_handle XdsBootstrap::ParseServerFeaturesArray(Json* json,
|
283
|
+
XdsServer* server) {
|
284
|
+
std::vector<grpc_error_handle> error_list;
|
383
285
|
for (size_t i = 0; i < json->mutable_array()->size(); ++i) {
|
384
286
|
Json& child = json->mutable_array()->at(i);
|
385
287
|
if (child.type() == Json::Type::STRING &&
|
@@ -391,8 +293,8 @@ grpc_error* XdsBootstrap::ParseServerFeaturesArray(Json* json,
|
|
391
293
|
"errors parsing \"server_features\" array", &error_list);
|
392
294
|
}
|
393
295
|
|
394
|
-
|
395
|
-
std::vector<
|
296
|
+
grpc_error_handle XdsBootstrap::ParseNode(Json* json) {
|
297
|
+
std::vector<grpc_error_handle> error_list;
|
396
298
|
node_ = absl::make_unique<Node>();
|
397
299
|
auto it = json->mutable_object()->find("id");
|
398
300
|
if (it != json->mutable_object()->end()) {
|
@@ -418,7 +320,7 @@ grpc_error* XdsBootstrap::ParseNode(Json* json) {
|
|
418
320
|
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
419
321
|
"\"locality\" field is not an object"));
|
420
322
|
} else {
|
421
|
-
|
323
|
+
grpc_error_handle parse_error = ParseLocality(&it->second);
|
422
324
|
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
423
325
|
}
|
424
326
|
}
|
@@ -435,8 +337,8 @@ grpc_error* XdsBootstrap::ParseNode(Json* json) {
|
|
435
337
|
&error_list);
|
436
338
|
}
|
437
339
|
|
438
|
-
|
439
|
-
std::vector<
|
340
|
+
grpc_error_handle XdsBootstrap::ParseLocality(Json* json) {
|
341
|
+
std::vector<grpc_error_handle> error_list;
|
440
342
|
auto it = json->mutable_object()->find("region");
|
441
343
|
if (it != json->mutable_object()->end()) {
|
442
344
|
if (it->second.type() != Json::Type::STRING) {
|
@@ -455,21 +357,21 @@ grpc_error* XdsBootstrap::ParseLocality(Json* json) {
|
|
455
357
|
node_->locality_zone = std::move(*it->second.mutable_string_value());
|
456
358
|
}
|
457
359
|
}
|
458
|
-
it = json->mutable_object()->find("
|
360
|
+
it = json->mutable_object()->find("sub_zone");
|
459
361
|
if (it != json->mutable_object()->end()) {
|
460
362
|
if (it->second.type() != Json::Type::STRING) {
|
461
363
|
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
462
|
-
"\"
|
364
|
+
"\"sub_zone\" field is not a string"));
|
463
365
|
} else {
|
464
|
-
node_->
|
366
|
+
node_->locality_sub_zone = std::move(*it->second.mutable_string_value());
|
465
367
|
}
|
466
368
|
}
|
467
369
|
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing \"locality\" object",
|
468
370
|
&error_list);
|
469
371
|
}
|
470
372
|
|
471
|
-
|
472
|
-
std::vector<
|
373
|
+
grpc_error_handle XdsBootstrap::ParseCertificateProviders(Json* json) {
|
374
|
+
std::vector<grpc_error_handle> error_list;
|
473
375
|
for (auto& certificate_provider : *(json->mutable_object())) {
|
474
376
|
if (certificate_provider.second.type() != Json::Type::OBJECT) {
|
475
377
|
error_list.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
@@ -477,7 +379,7 @@ grpc_error* XdsBootstrap::ParseCertificateProviders(Json* json) {
|
|
477
379
|
"\" is not an object")
|
478
380
|
.c_str()));
|
479
381
|
} else {
|
480
|
-
|
382
|
+
grpc_error_handle parse_error = ParseCertificateProvider(
|
481
383
|
certificate_provider.first, &certificate_provider.second);
|
482
384
|
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
483
385
|
}
|
@@ -486,9 +388,9 @@ grpc_error* XdsBootstrap::ParseCertificateProviders(Json* json) {
|
|
486
388
|
"errors parsing \"certificate_providers\" object", &error_list);
|
487
389
|
}
|
488
390
|
|
489
|
-
|
391
|
+
grpc_error_handle XdsBootstrap::ParseCertificateProvider(
|
490
392
|
const std::string& instance_name, Json* certificate_provider_json) {
|
491
|
-
std::vector<
|
393
|
+
std::vector<grpc_error_handle> error_list;
|
492
394
|
auto it = certificate_provider_json->mutable_object()->find("plugin_name");
|
493
395
|
if (it == certificate_provider_json->mutable_object()->end()) {
|
494
396
|
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
@@ -509,14 +411,14 @@ grpc_error* XdsBootstrap::ParseCertificateProvider(
|
|
509
411
|
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
510
412
|
"\"config\" field is not an object"));
|
511
413
|
} else {
|
512
|
-
|
414
|
+
grpc_error_handle parse_error = GRPC_ERROR_NONE;
|
513
415
|
config = factory->CreateCertificateProviderConfig(it->second,
|
514
416
|
&parse_error);
|
515
417
|
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
516
418
|
}
|
517
419
|
} else {
|
518
420
|
// "config" is an optional field, so create an empty JSON object.
|
519
|
-
|
421
|
+
grpc_error_handle parse_error = GRPC_ERROR_NONE;
|
520
422
|
config = factory->CreateCertificateProviderConfig(Json::Object(),
|
521
423
|
&parse_error);
|
522
424
|
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
@@ -528,7 +430,7 @@ grpc_error* XdsBootstrap::ParseCertificateProvider(
|
|
528
430
|
// Can't use GRPC_ERROR_CREATE_FROM_VECTOR() here, because the error
|
529
431
|
// string is not static in this case.
|
530
432
|
if (error_list.empty()) return GRPC_ERROR_NONE;
|
531
|
-
|
433
|
+
grpc_error_handle error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
532
434
|
absl::StrCat("errors parsing element \"", instance_name, "\"").c_str());
|
533
435
|
for (size_t i = 0; i < error_list.size(); ++i) {
|
534
436
|
error = grpc_error_add_child(error, error_list[i]);
|
@@ -536,4 +438,56 @@ grpc_error* XdsBootstrap::ParseCertificateProvider(
|
|
536
438
|
return error;
|
537
439
|
}
|
538
440
|
|
441
|
+
std::string XdsBootstrap::ToString() const {
|
442
|
+
std::vector<std::string> parts;
|
443
|
+
if (node_ != nullptr) {
|
444
|
+
parts.push_back(absl::StrFormat(
|
445
|
+
"node={\n"
|
446
|
+
" id=\"%s\",\n"
|
447
|
+
" cluster=\"%s\",\n"
|
448
|
+
" locality={\n"
|
449
|
+
" region=\"%s\",\n"
|
450
|
+
" zone=\"%s\",\n"
|
451
|
+
" sub_zone=\"%s\"\n"
|
452
|
+
" },\n"
|
453
|
+
" metadata=%s,\n"
|
454
|
+
"},\n",
|
455
|
+
node_->id, node_->cluster, node_->locality_region, node_->locality_zone,
|
456
|
+
node_->locality_sub_zone, node_->metadata.Dump()));
|
457
|
+
}
|
458
|
+
parts.push_back(
|
459
|
+
absl::StrFormat("servers=[\n"
|
460
|
+
" {\n"
|
461
|
+
" uri=\"%s\",\n"
|
462
|
+
" creds_type=%s,\n",
|
463
|
+
server().server_uri, server().channel_creds_type));
|
464
|
+
if (server().channel_creds_config.type() != Json::Type::JSON_NULL) {
|
465
|
+
parts.push_back(absl::StrFormat(" creds_config=%s,",
|
466
|
+
server().channel_creds_config.Dump()));
|
467
|
+
}
|
468
|
+
if (!server().server_features.empty()) {
|
469
|
+
parts.push_back(absl::StrCat(" server_features=[",
|
470
|
+
absl::StrJoin(server().server_features, ", "),
|
471
|
+
"],\n"));
|
472
|
+
}
|
473
|
+
parts.push_back(" }\n],\n");
|
474
|
+
if (!server_listener_resource_name_template_.empty()) {
|
475
|
+
parts.push_back(
|
476
|
+
absl::StrFormat("server_listener_resource_name_template=\"%s\",\n",
|
477
|
+
server_listener_resource_name_template_));
|
478
|
+
}
|
479
|
+
parts.push_back("certificate_providers={\n");
|
480
|
+
for (const auto& entry : certificate_providers_) {
|
481
|
+
parts.push_back(
|
482
|
+
absl::StrFormat(" %s={\n"
|
483
|
+
" plugin_name=%s\n"
|
484
|
+
" config=%s\n"
|
485
|
+
" },\n",
|
486
|
+
entry.first, entry.second.plugin_name,
|
487
|
+
entry.second.config->ToString()));
|
488
|
+
}
|
489
|
+
parts.push_back("}");
|
490
|
+
return absl::StrJoin(parts, "");
|
491
|
+
}
|
492
|
+
|
539
493
|
} // namespace grpc_core
|