grpc 1.50.0.pre1 → 1.51.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 +131 -42
- data/include/grpc/event_engine/event_engine.h +10 -3
- data/include/grpc/event_engine/slice_buffer.h +17 -0
- data/include/grpc/grpc.h +0 -10
- data/include/grpc/impl/codegen/grpc_types.h +1 -5
- data/include/grpc/impl/codegen/port_platform.h +0 -3
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +19 -13
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -5
- data/src/core/ext/filters/client_channel/client_channel.cc +120 -140
- data/src/core/ext/filters/client_channel/client_channel.h +3 -4
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +0 -2
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
- data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +20 -47
- data/src/core/ext/filters/client_channel/dynamic_filters.h +7 -8
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +3 -4
- data/src/core/ext/filters/client_channel/http_proxy.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +8 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +35 -44
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +41 -29
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +9 -11
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -12
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +8 -10
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +26 -27
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +7 -9
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +44 -26
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +17 -27
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +13 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +48 -47
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -126
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -32
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +22 -23
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +50 -52
- 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/native/dns_resolver.cc +2 -4
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +34 -26
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +63 -46
- data/src/core/ext/filters/client_channel/retry_filter.cc +80 -102
- data/src/core/ext/filters/client_channel/retry_service_config.cc +192 -234
- data/src/core/ext/filters/client_channel/retry_service_config.h +20 -23
- data/src/core/ext/filters/client_channel/retry_throttle.cc +8 -8
- data/src/core/ext/filters/client_channel/retry_throttle.h +8 -7
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/subchannel.cc +21 -25
- data/src/core/ext/filters/client_channel/subchannel.h +2 -2
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +11 -12
- data/src/core/ext/filters/deadline/deadline_filter.cc +13 -14
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -4
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
- data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
- data/src/core/ext/filters/http/client/http_client_filter.cc +16 -16
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +13 -13
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +34 -34
- data/src/core/ext/filters/http/server/http_server_filter.cc +26 -25
- data/src/core/ext/filters/message_size/message_size_filter.cc +86 -117
- data/src/core/ext/filters/message_size/message_size_filter.h +22 -15
- data/src/core/ext/filters/rbac/rbac_filter.cc +12 -12
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +728 -530
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -3
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +1 -1
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +17 -21
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +57 -72
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +212 -253
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -11
- data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -3
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +16 -15
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +13 -13
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +10 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +15 -17
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +5 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +31 -39
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/internal.h +24 -8
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -52
- data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/varint.h +11 -8
- data/src/core/ext/transport/chttp2/transport/writing.cc +16 -16
- data/src/core/ext/transport/inproc/inproc_transport.cc +97 -115
- data/src/core/ext/xds/certificate_provider_store.cc +4 -4
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -7
- data/src/core/ext/xds/xds_api.cc +15 -68
- data/src/core/ext/xds/xds_api.h +3 -7
- data/src/core/ext/xds/xds_bootstrap.h +0 -1
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +3 -12
- data/src/core/ext/xds/xds_bootstrap_grpc.h +16 -1
- data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +0 -1
- data/src/core/ext/xds/xds_client.cc +122 -90
- data/src/core/ext/xds/xds_client.h +7 -2
- data/src/core/ext/xds/xds_client_grpc.cc +5 -24
- data/src/core/ext/xds/xds_cluster.cc +291 -183
- data/src/core/ext/xds/xds_cluster.h +11 -15
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +32 -29
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +35 -16
- data/src/core/ext/xds/xds_common_types.cc +208 -141
- data/src/core/ext/xds/xds_common_types.h +19 -13
- data/src/core/ext/xds/xds_endpoint.cc +214 -129
- data/src/core/ext/xds/xds_endpoint.h +4 -7
- data/src/core/ext/xds/xds_http_fault_filter.cc +56 -43
- data/src/core/ext/xds/xds_http_fault_filter.h +13 -21
- data/src/core/ext/xds/xds_http_filters.cc +60 -73
- data/src/core/ext/xds/xds_http_filters.h +67 -19
- data/src/core/ext/xds/xds_http_rbac_filter.cc +152 -207
- data/src/core/ext/xds/xds_http_rbac_filter.h +12 -15
- data/src/core/ext/xds/xds_lb_policy_registry.cc +122 -169
- data/src/core/ext/xds/xds_lb_policy_registry.h +10 -11
- data/src/core/ext/xds/xds_listener.cc +459 -417
- data/src/core/ext/xds/xds_listener.h +43 -47
- data/src/core/ext/xds/xds_resource_type.h +3 -11
- data/src/core/ext/xds/xds_resource_type_impl.h +8 -13
- data/src/core/ext/xds/xds_route_config.cc +94 -80
- data/src/core/ext/xds/xds_route_config.h +10 -10
- data/src/core/ext/xds/xds_routing.cc +2 -1
- data/src/core/ext/xds/xds_routing.h +2 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -94
- data/src/core/ext/xds/xds_transport_grpc.cc +4 -5
- data/src/core/lib/address_utils/parse_address.cc +11 -10
- data/src/core/lib/channel/channel_args.h +16 -1
- data/src/core/lib/channel/channel_stack.cc +23 -20
- data/src/core/lib/channel/channel_stack.h +17 -4
- data/src/core/lib/channel/channel_stack_builder.cc +4 -7
- data/src/core/lib/channel/channel_stack_builder.h +14 -6
- data/src/core/lib/channel/channel_stack_builder_impl.cc +25 -7
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -0
- data/src/core/lib/channel/channel_trace.cc +4 -5
- data/src/core/lib/channel/channelz.cc +1 -1
- data/src/core/lib/channel/connected_channel.cc +695 -35
- data/src/core/lib/channel/connected_channel.h +0 -4
- data/src/core/lib/channel/promise_based_filter.cc +1004 -140
- data/src/core/lib/channel/promise_based_filter.h +364 -87
- data/src/core/lib/compression/message_compress.cc +5 -5
- data/src/core/lib/debug/event_log.cc +88 -0
- data/src/core/lib/debug/event_log.h +81 -0
- data/src/core/lib/debug/histogram_view.cc +69 -0
- data/src/core/lib/{slice/slice_refcount.cc → debug/histogram_view.h} +15 -13
- data/src/core/lib/debug/stats.cc +22 -119
- data/src/core/lib/debug/stats.h +29 -35
- data/src/core/lib/debug/stats_data.cc +224 -73
- data/src/core/lib/debug/stats_data.h +263 -122
- data/src/core/lib/event_engine/common_closures.h +71 -0
- data/src/core/lib/event_engine/default_event_engine.cc +38 -15
- data/src/core/lib/event_engine/default_event_engine.h +15 -3
- data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -4
- data/src/core/lib/event_engine/memory_allocator.cc +1 -1
- data/src/core/lib/event_engine/poller.h +10 -4
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
- data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
- data/src/core/lib/event_engine/{executor/threaded_executor.cc → posix_engine/event_poller_posix_default.h} +13 -16
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +453 -18
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +148 -24
- data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
- data/src/core/lib/event_engine/posix_engine/timer.h +9 -8
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +57 -194
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +21 -49
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
- data/src/core/lib/event_engine/slice.cc +7 -6
- data/src/core/lib/event_engine/slice_buffer.cc +2 -2
- data/src/core/lib/event_engine/thread_pool.cc +106 -25
- data/src/core/lib/event_engine/thread_pool.h +32 -9
- data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
- data/src/core/lib/event_engine/windows/windows_engine.cc +18 -12
- data/src/core/lib/event_engine/windows/windows_engine.h +8 -4
- data/src/core/lib/experiments/config.cc +1 -1
- data/src/core/lib/experiments/experiments.cc +13 -2
- data/src/core/lib/experiments/experiments.h +8 -1
- data/src/core/lib/gpr/cpu_linux.cc +6 -2
- data/src/core/lib/gpr/log_linux.cc +3 -4
- data/src/core/lib/gpr/string.h +1 -1
- data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
- data/src/core/lib/gprpp/load_file.cc +75 -0
- data/src/core/lib/gprpp/load_file.h +33 -0
- data/src/core/lib/gprpp/per_cpu.h +46 -0
- data/src/core/lib/gprpp/stat_posix.cc +5 -4
- data/src/core/lib/gprpp/stat_windows.cc +3 -2
- data/src/core/lib/gprpp/status_helper.h +1 -3
- data/src/core/lib/gprpp/strerror.cc +41 -0
- data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/strerror.h} +9 -13
- data/src/core/lib/gprpp/thd_windows.cc +1 -2
- data/src/core/lib/gprpp/time.cc +3 -4
- data/src/core/lib/gprpp/time.h +13 -2
- data/src/core/lib/gprpp/validation_errors.h +18 -1
- data/src/core/lib/http/httpcli.cc +40 -44
- data/src/core/lib/http/httpcli.h +6 -5
- data/src/core/lib/http/httpcli_security_connector.cc +4 -6
- data/src/core/lib/http/parser.cc +54 -65
- data/src/core/lib/iomgr/buffer_list.cc +105 -116
- data/src/core/lib/iomgr/buffer_list.h +60 -44
- data/src/core/lib/iomgr/call_combiner.cc +11 -10
- data/src/core/lib/iomgr/call_combiner.h +3 -4
- data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
- data/src/core/lib/iomgr/closure.h +49 -5
- data/src/core/lib/iomgr/combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +26 -25
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
- data/src/core/lib/iomgr/error.cc +27 -42
- data/src/core/lib/iomgr/error.h +22 -152
- data/src/core/lib/iomgr/ev_apple.cc +4 -4
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +26 -25
- data/src/core/lib/iomgr/ev_poll_posix.cc +27 -31
- data/src/core/lib/iomgr/exec_ctx.cc +3 -4
- data/src/core/lib/iomgr/exec_ctx.h +2 -3
- data/src/core/lib/iomgr/executor.cc +1 -2
- data/src/core/lib/iomgr/internal_errqueue.cc +3 -1
- data/src/core/lib/iomgr/iocp_windows.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -1
- data/src/core/lib/iomgr/iomgr_windows.cc +2 -1
- data/src/core/lib/iomgr/load_file.cc +5 -9
- data/src/core/lib/iomgr/lockfree_event.cc +10 -10
- data/src/core/lib/iomgr/pollset_windows.cc +4 -4
- data/src/core/lib/iomgr/python_util.h +2 -2
- data/src/core/lib/iomgr/resolve_address.cc +8 -3
- data/src/core/lib/iomgr/resolve_address.h +3 -4
- data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +14 -25
- data/src/core/lib/iomgr/resolve_address_posix.h +1 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +14 -17
- data/src/core/lib/iomgr/resolve_address_windows.h +1 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +30 -29
- data/src/core/lib/iomgr/socket_utils_posix.cc +1 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +2 -2
- data/src/core/lib/iomgr/socket_windows.cc +2 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -10
- data/src/core/lib/iomgr/tcp_client_posix.cc +31 -35
- data/src/core/lib/iomgr/tcp_client_windows.cc +8 -12
- data/src/core/lib/iomgr/tcp_posix.cc +92 -108
- data/src/core/lib/iomgr/tcp_server_posix.cc +34 -34
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +18 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -13
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_windows.cc +26 -29
- data/src/core/lib/iomgr/tcp_windows.cc +27 -34
- data/src/core/lib/iomgr/timer.h +8 -8
- data/src/core/lib/iomgr/timer_generic.cc +9 -15
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
- data/src/core/lib/json/json_channel_args.h +42 -0
- data/src/core/lib/json/json_object_loader.cc +7 -2
- data/src/core/lib/json/json_object_loader.h +22 -0
- data/src/core/lib/json/json_util.cc +5 -5
- data/src/core/lib/json/json_util.h +4 -4
- data/src/core/lib/load_balancing/lb_policy.cc +1 -1
- data/src/core/lib/load_balancing/lb_policy.h +4 -0
- data/src/core/lib/load_balancing/subchannel_interface.h +0 -7
- data/src/core/lib/matchers/matchers.cc +3 -4
- data/src/core/lib/promise/activity.cc +16 -2
- data/src/core/lib/promise/activity.h +38 -15
- data/src/core/lib/promise/arena_promise.h +80 -51
- data/src/core/lib/promise/context.h +13 -6
- data/src/core/lib/promise/detail/basic_seq.h +9 -28
- data/src/core/lib/promise/detail/promise_factory.h +58 -10
- data/src/core/lib/promise/detail/status.h +28 -0
- data/src/core/lib/promise/detail/switch.h +1455 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +3 -1
- data/src/core/lib/promise/for_each.h +129 -0
- data/src/core/lib/promise/loop.h +7 -5
- data/src/core/lib/promise/map_pipe.h +87 -0
- data/src/core/lib/promise/pipe.cc +19 -0
- data/src/core/lib/promise/pipe.h +505 -0
- data/src/core/lib/promise/poll.h +13 -0
- data/src/core/lib/promise/seq.h +3 -5
- data/src/core/lib/promise/sleep.cc +5 -4
- data/src/core/lib/promise/sleep.h +1 -2
- data/src/core/lib/promise/try_concurrently.h +341 -0
- data/src/core/lib/promise/try_seq.h +10 -13
- data/src/core/lib/resolver/server_address.cc +1 -0
- data/src/core/lib/resolver/server_address.h +1 -3
- data/src/core/lib/resource_quota/api.cc +0 -1
- data/src/core/lib/resource_quota/arena.cc +19 -0
- data/src/core/lib/resource_quota/arena.h +89 -0
- data/src/core/lib/resource_quota/memory_quota.cc +1 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +1 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
- data/src/core/lib/security/authorization/matchers.cc +25 -22
- data/src/core/lib/security/authorization/rbac_policy.cc +2 -3
- data/src/core/lib/security/context/security_context.h +10 -0
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +77 -55
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -51
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +17 -21
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +21 -25
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -24
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -5
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +24 -30
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +19 -27
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -11
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -41
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +6 -11
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +8 -15
- 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 +2 -6
- data/src/core/lib/security/security_connector/load_system_roots_supported.cc +1 -4
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +7 -11
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +9 -14
- data/src/core/lib/security/security_connector/ssl_utils.cc +5 -7
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -27
- data/src/core/lib/security/transport/client_auth_filter.cc +1 -1
- data/src/core/lib/security/transport/secure_endpoint.cc +26 -28
- data/src/core/lib/security/transport/security_handshaker.cc +53 -53
- data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
- data/src/core/lib/security/transport/tsi_error.cc +6 -3
- data/src/core/lib/security/util/json_util.cc +4 -5
- data/src/core/lib/service_config/service_config.h +1 -1
- data/src/core/lib/service_config/service_config_impl.cc +111 -158
- data/src/core/lib/service_config/service_config_impl.h +14 -17
- data/src/core/lib/service_config/service_config_parser.cc +14 -31
- data/src/core/lib/service_config/service_config_parser.h +14 -10
- data/src/core/lib/slice/b64.cc +2 -2
- data/src/core/lib/slice/slice.cc +7 -1
- data/src/core/lib/slice/slice.h +19 -6
- data/src/core/lib/slice/slice_buffer.cc +13 -14
- data/src/core/lib/slice/slice_internal.h +13 -21
- data/src/core/lib/slice/slice_refcount.h +34 -19
- data/src/core/lib/surface/byte_buffer.cc +3 -4
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
- data/src/core/lib/surface/call.cc +1366 -239
- data/src/core/lib/surface/call.h +44 -0
- data/src/core/lib/surface/call_details.cc +3 -3
- data/src/core/lib/surface/call_trace.cc +113 -0
- data/src/core/lib/surface/call_trace.h +30 -0
- data/src/core/lib/surface/channel.cc +44 -49
- data/src/core/lib/surface/channel.h +9 -1
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/channel_stack_type.cc +4 -0
- data/src/core/lib/surface/channel_stack_type.h +2 -0
- data/src/core/lib/surface/completion_queue.cc +38 -52
- data/src/core/lib/surface/init.cc +8 -39
- data/src/core/lib/surface/init_internally.h +8 -0
- data/src/core/lib/surface/lame_client.cc +10 -8
- data/src/core/lib/surface/server.cc +48 -70
- data/src/core/lib/surface/server.h +3 -4
- data/src/core/lib/surface/validate_metadata.cc +11 -12
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/connectivity_state.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +34 -28
- data/src/core/lib/transport/error_utils.h +3 -3
- data/src/core/lib/transport/handshaker.cc +14 -14
- data/src/core/lib/transport/handshaker.h +1 -1
- data/src/core/lib/transport/handshaker_factory.h +26 -0
- data/src/core/lib/transport/handshaker_registry.cc +8 -2
- data/src/core/lib/transport/handshaker_registry.h +3 -4
- data/src/core/lib/transport/http_connect_handshaker.cc +23 -24
- data/src/core/lib/transport/metadata_batch.h +17 -1
- data/src/core/lib/transport/parsed_metadata.cc +2 -6
- data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -20
- data/src/core/lib/transport/transport.cc +63 -17
- data/src/core/lib/transport/transport.h +64 -68
- data/src/core/lib/transport/transport_impl.h +1 -1
- data/src/core/lib/transport/transport_op_string.cc +7 -6
- data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -10
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -14
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +10 -10
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +8 -8
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +5 -5
- data/src/core/tsi/fake_transport_security.cc +3 -3
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +7 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +6 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +0 -3
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/channel_spec.rb +0 -43
- data/src/ruby/spec/generic/active_call_spec.rb +12 -3
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
- data/third_party/zlib/compress.c +3 -3
- data/third_party/zlib/crc32.c +21 -12
- data/third_party/zlib/deflate.c +112 -106
- data/third_party/zlib/deflate.h +2 -2
- data/third_party/zlib/gzlib.c +1 -1
- data/third_party/zlib/gzread.c +3 -5
- data/third_party/zlib/gzwrite.c +1 -1
- data/third_party/zlib/infback.c +10 -7
- data/third_party/zlib/inflate.c +5 -2
- data/third_party/zlib/inftrees.c +2 -2
- data/third_party/zlib/inftrees.h +1 -1
- data/third_party/zlib/trees.c +61 -62
- data/third_party/zlib/uncompr.c +2 -2
- data/third_party/zlib/zconf.h +16 -3
- data/third_party/zlib/zlib.h +10 -10
- data/third_party/zlib/zutil.c +9 -7
- data/third_party/zlib/zutil.h +1 -0
- metadata +57 -20
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
- data/src/core/lib/event_engine/executor/threaded_executor.h +0 -44
- data/src/core/lib/gpr/murmur_hash.cc +0 -82
- data/src/core/lib/gpr/murmur_hash.h +0 -29
- data/src/core/lib/gpr/tls.h +0 -156
- data/src/core/lib/promise/call_push_pull.h +0 -148
- data/src/core/lib/slice/slice_api.cc +0 -39
- data/src/core/lib/slice/slice_buffer_api.cc +0 -35
- data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -43,6 +43,7 @@
|
|
43
43
|
#include <grpc/support/log.h>
|
44
44
|
#include <grpc/support/string_util.h>
|
45
45
|
|
46
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
46
47
|
#include "src/core/lib/http/httpcli_ssl_credentials.h"
|
47
48
|
#include "src/core/lib/http/parser.h"
|
48
49
|
#include "src/core/lib/security/credentials/credentials.h"
|
@@ -104,51 +105,45 @@ bool MatchWorkforcePoolAudience(absl::string_view audience) {
|
|
104
105
|
RefCountedPtr<ExternalAccountCredentials> ExternalAccountCredentials::Create(
|
105
106
|
const Json& json, std::vector<std::string> scopes,
|
106
107
|
grpc_error_handle* error) {
|
107
|
-
GPR_ASSERT(
|
108
|
+
GPR_ASSERT(error->ok());
|
108
109
|
Options options;
|
109
110
|
options.type = GRPC_AUTH_JSON_TYPE_INVALID;
|
110
111
|
if (json.type() != Json::Type::OBJECT) {
|
111
|
-
*error =
|
112
|
-
"Invalid json to construct credentials options.");
|
112
|
+
*error =
|
113
|
+
GRPC_ERROR_CREATE("Invalid json to construct credentials options.");
|
113
114
|
return nullptr;
|
114
115
|
}
|
115
116
|
auto it = json.object_value().find("type");
|
116
117
|
if (it == json.object_value().end()) {
|
117
|
-
*error =
|
118
|
+
*error = GRPC_ERROR_CREATE("type field not present.");
|
118
119
|
return nullptr;
|
119
120
|
}
|
120
121
|
if (it->second.type() != Json::Type::STRING) {
|
121
|
-
*error =
|
122
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("type field must be a string.");
|
122
|
+
*error = GRPC_ERROR_CREATE("type field must be a string.");
|
123
123
|
return nullptr;
|
124
124
|
}
|
125
125
|
if (it->second.string_value() != GRPC_AUTH_JSON_TYPE_EXTERNAL_ACCOUNT) {
|
126
|
-
*error =
|
127
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid credentials json type.");
|
126
|
+
*error = GRPC_ERROR_CREATE("Invalid credentials json type.");
|
128
127
|
return nullptr;
|
129
128
|
}
|
130
129
|
options.type = GRPC_AUTH_JSON_TYPE_EXTERNAL_ACCOUNT;
|
131
130
|
it = json.object_value().find("audience");
|
132
131
|
if (it == json.object_value().end()) {
|
133
|
-
*error =
|
134
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("audience field not present.");
|
132
|
+
*error = GRPC_ERROR_CREATE("audience field not present.");
|
135
133
|
return nullptr;
|
136
134
|
}
|
137
135
|
if (it->second.type() != Json::Type::STRING) {
|
138
|
-
*error =
|
139
|
-
"audience field must be a string.");
|
136
|
+
*error = GRPC_ERROR_CREATE("audience field must be a string.");
|
140
137
|
return nullptr;
|
141
138
|
}
|
142
139
|
options.audience = it->second.string_value();
|
143
140
|
it = json.object_value().find("subject_token_type");
|
144
141
|
if (it == json.object_value().end()) {
|
145
|
-
*error =
|
146
|
-
"subject_token_type field not present.");
|
142
|
+
*error = GRPC_ERROR_CREATE("subject_token_type field not present.");
|
147
143
|
return nullptr;
|
148
144
|
}
|
149
145
|
if (it->second.type() != Json::Type::STRING) {
|
150
|
-
*error =
|
151
|
-
"subject_token_type field must be a string.");
|
146
|
+
*error = GRPC_ERROR_CREATE("subject_token_type field must be a string.");
|
152
147
|
return nullptr;
|
153
148
|
}
|
154
149
|
options.subject_token_type = it->second.string_value();
|
@@ -158,13 +153,11 @@ RefCountedPtr<ExternalAccountCredentials> ExternalAccountCredentials::Create(
|
|
158
153
|
}
|
159
154
|
it = json.object_value().find("token_url");
|
160
155
|
if (it == json.object_value().end()) {
|
161
|
-
*error =
|
162
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("token_url field not present.");
|
156
|
+
*error = GRPC_ERROR_CREATE("token_url field not present.");
|
163
157
|
return nullptr;
|
164
158
|
}
|
165
159
|
if (it->second.type() != Json::Type::STRING) {
|
166
|
-
*error =
|
167
|
-
"token_url field must be a string.");
|
160
|
+
*error = GRPC_ERROR_CREATE("token_url field must be a string.");
|
168
161
|
return nullptr;
|
169
162
|
}
|
170
163
|
options.token_url = it->second.string_value();
|
@@ -174,8 +167,7 @@ RefCountedPtr<ExternalAccountCredentials> ExternalAccountCredentials::Create(
|
|
174
167
|
}
|
175
168
|
it = json.object_value().find("credential_source");
|
176
169
|
if (it == json.object_value().end()) {
|
177
|
-
*error =
|
178
|
-
"credential_source field not present.");
|
170
|
+
*error = GRPC_ERROR_CREATE("credential_source field not present.");
|
179
171
|
return nullptr;
|
180
172
|
}
|
181
173
|
options.credential_source = it->second;
|
@@ -196,7 +188,7 @@ RefCountedPtr<ExternalAccountCredentials> ExternalAccountCredentials::Create(
|
|
196
188
|
if (MatchWorkforcePoolAudience(options.audience)) {
|
197
189
|
options.workforce_pool_user_project = it->second.string_value();
|
198
190
|
} else {
|
199
|
-
*error =
|
191
|
+
*error = GRPC_ERROR_CREATE(
|
200
192
|
"workforce_pool_user_project should not be set for non-workforce "
|
201
193
|
"pool credentials");
|
202
194
|
return nullptr;
|
@@ -216,11 +208,11 @@ RefCountedPtr<ExternalAccountCredentials> ExternalAccountCredentials::Create(
|
|
216
208
|
creds = MakeRefCounted<UrlExternalAccountCredentials>(
|
217
209
|
std::move(options), std::move(scopes), error);
|
218
210
|
} else {
|
219
|
-
*error =
|
211
|
+
*error = GRPC_ERROR_CREATE(
|
220
212
|
"Invalid options credential source to create "
|
221
213
|
"ExternalAccountCredentials.");
|
222
214
|
}
|
223
|
-
if (
|
215
|
+
if (error->ok()) {
|
224
216
|
return creds;
|
225
217
|
} else {
|
226
218
|
return nullptr;
|
@@ -272,7 +264,7 @@ void ExternalAccountCredentials::fetch_oauth2(
|
|
272
264
|
|
273
265
|
void ExternalAccountCredentials::OnRetrieveSubjectTokenInternal(
|
274
266
|
absl::string_view subject_token, grpc_error_handle error) {
|
275
|
-
if (!
|
267
|
+
if (!error.ok()) {
|
276
268
|
FinishTokenFetch(error);
|
277
269
|
} else {
|
278
270
|
ExchangeToken(subject_token);
|
@@ -283,7 +275,7 @@ void ExternalAccountCredentials::ExchangeToken(
|
|
283
275
|
absl::string_view subject_token) {
|
284
276
|
absl::StatusOr<URI> uri = URI::Parse(options_.token_url);
|
285
277
|
if (!uri.ok()) {
|
286
|
-
FinishTokenFetch(
|
278
|
+
FinishTokenFetch(GRPC_ERROR_CREATE(
|
287
279
|
absl::StrFormat("Invalid token url: %s. Error: %s", options_.token_url,
|
288
280
|
uri.status().ToString())));
|
289
281
|
return;
|
@@ -366,13 +358,13 @@ void ExternalAccountCredentials::OnExchangeToken(void* arg,
|
|
366
358
|
grpc_error_handle error) {
|
367
359
|
ExternalAccountCredentials* self =
|
368
360
|
static_cast<ExternalAccountCredentials*>(arg);
|
369
|
-
self->OnExchangeTokenInternal(
|
361
|
+
self->OnExchangeTokenInternal(error);
|
370
362
|
}
|
371
363
|
|
372
364
|
void ExternalAccountCredentials::OnExchangeTokenInternal(
|
373
365
|
grpc_error_handle error) {
|
374
366
|
http_request_.reset();
|
375
|
-
if (!
|
367
|
+
if (!error.ok()) {
|
376
368
|
FinishTokenFetch(error);
|
377
369
|
} else {
|
378
370
|
if (options_.service_account_impersonation_url.empty()) {
|
@@ -387,7 +379,7 @@ void ExternalAccountCredentials::OnExchangeTokenInternal(
|
|
387
379
|
metadata_req_->response.hdrs[i].value =
|
388
380
|
gpr_strdup(ctx_->response.hdrs[i].value);
|
389
381
|
}
|
390
|
-
FinishTokenFetch(
|
382
|
+
FinishTokenFetch(absl::OkStatus());
|
391
383
|
} else {
|
392
384
|
ImpersenateServiceAccount();
|
393
385
|
}
|
@@ -399,19 +391,19 @@ void ExternalAccountCredentials::ImpersenateServiceAccount() {
|
|
399
391
|
ctx_->response.body_length);
|
400
392
|
auto json = Json::Parse(response_body);
|
401
393
|
if (!json.ok()) {
|
402
|
-
FinishTokenFetch(
|
394
|
+
FinishTokenFetch(GRPC_ERROR_CREATE(absl::StrCat(
|
403
395
|
"Invalid token exchange response: ", json.status().ToString())));
|
404
396
|
return;
|
405
397
|
}
|
406
398
|
if (json->type() != Json::Type::OBJECT) {
|
407
|
-
FinishTokenFetch(
|
399
|
+
FinishTokenFetch(GRPC_ERROR_CREATE(
|
408
400
|
"Invalid token exchange response: JSON type is not object"));
|
409
401
|
return;
|
410
402
|
}
|
411
403
|
auto it = json->object_value().find("access_token");
|
412
404
|
if (it == json->object_value().end() ||
|
413
405
|
it->second.type() != Json::Type::STRING) {
|
414
|
-
FinishTokenFetch(
|
406
|
+
FinishTokenFetch(GRPC_ERROR_CREATE(absl::StrFormat(
|
415
407
|
"Missing or invalid access_token in %s.", response_body)));
|
416
408
|
return;
|
417
409
|
}
|
@@ -419,7 +411,7 @@ void ExternalAccountCredentials::ImpersenateServiceAccount() {
|
|
419
411
|
absl::StatusOr<URI> uri =
|
420
412
|
URI::Parse(options_.service_account_impersonation_url);
|
421
413
|
if (!uri.ok()) {
|
422
|
-
FinishTokenFetch(
|
414
|
+
FinishTokenFetch(GRPC_ERROR_CREATE(absl::StrFormat(
|
423
415
|
"Invalid service account impersonation url: %s. Error: %s",
|
424
416
|
options_.service_account_impersonation_url, uri.status().ToString())));
|
425
417
|
return;
|
@@ -463,13 +455,13 @@ void ExternalAccountCredentials::OnImpersenateServiceAccount(
|
|
463
455
|
void* arg, grpc_error_handle error) {
|
464
456
|
ExternalAccountCredentials* self =
|
465
457
|
static_cast<ExternalAccountCredentials*>(arg);
|
466
|
-
self->OnImpersenateServiceAccountInternal(
|
458
|
+
self->OnImpersenateServiceAccountInternal(error);
|
467
459
|
}
|
468
460
|
|
469
461
|
void ExternalAccountCredentials::OnImpersenateServiceAccountInternal(
|
470
462
|
grpc_error_handle error) {
|
471
463
|
http_request_.reset();
|
472
|
-
if (!
|
464
|
+
if (!error.ok()) {
|
473
465
|
FinishTokenFetch(error);
|
474
466
|
return;
|
475
467
|
}
|
@@ -477,21 +469,21 @@ void ExternalAccountCredentials::OnImpersenateServiceAccountInternal(
|
|
477
469
|
ctx_->response.body_length);
|
478
470
|
auto json = Json::Parse(response_body);
|
479
471
|
if (!json.ok()) {
|
480
|
-
FinishTokenFetch(
|
472
|
+
FinishTokenFetch(GRPC_ERROR_CREATE(
|
481
473
|
absl::StrCat("Invalid service account impersonation response: ",
|
482
474
|
json.status().ToString())));
|
483
475
|
return;
|
484
476
|
}
|
485
477
|
if (json->type() != Json::Type::OBJECT) {
|
486
|
-
FinishTokenFetch(
|
487
|
-
"Invalid service account impersonation response: "
|
488
|
-
|
478
|
+
FinishTokenFetch(
|
479
|
+
GRPC_ERROR_CREATE("Invalid service account impersonation response: "
|
480
|
+
"JSON type is not object"));
|
489
481
|
return;
|
490
482
|
}
|
491
483
|
auto it = json->object_value().find("accessToken");
|
492
484
|
if (it == json->object_value().end() ||
|
493
485
|
it->second.type() != Json::Type::STRING) {
|
494
|
-
FinishTokenFetch(
|
486
|
+
FinishTokenFetch(GRPC_ERROR_CREATE(absl::StrFormat(
|
495
487
|
"Missing or invalid accessToken in %s.", response_body)));
|
496
488
|
return;
|
497
489
|
}
|
@@ -499,14 +491,14 @@ void ExternalAccountCredentials::OnImpersenateServiceAccountInternal(
|
|
499
491
|
it = json->object_value().find("expireTime");
|
500
492
|
if (it == json->object_value().end() ||
|
501
493
|
it->second.type() != Json::Type::STRING) {
|
502
|
-
FinishTokenFetch(
|
494
|
+
FinishTokenFetch(GRPC_ERROR_CREATE(absl::StrFormat(
|
503
495
|
"Missing or invalid expireTime in %s.", response_body)));
|
504
496
|
return;
|
505
497
|
}
|
506
498
|
std::string expire_time = it->second.string_value();
|
507
499
|
absl::Time t;
|
508
500
|
if (!absl::ParseTime(absl::RFC3339_full, expire_time, &t, nullptr)) {
|
509
|
-
FinishTokenFetch(
|
501
|
+
FinishTokenFetch(GRPC_ERROR_CREATE(
|
510
502
|
"Invalid expire time of service account impersonation response."));
|
511
503
|
return;
|
512
504
|
}
|
@@ -525,12 +517,11 @@ void ExternalAccountCredentials::OnImpersenateServiceAccountInternal(
|
|
525
517
|
metadata_req_->response.hdrs[i].value =
|
526
518
|
gpr_strdup(ctx_->response.hdrs[i].value);
|
527
519
|
}
|
528
|
-
FinishTokenFetch(
|
520
|
+
FinishTokenFetch(absl::OkStatus());
|
529
521
|
}
|
530
522
|
|
531
523
|
void ExternalAccountCredentials::FinishTokenFetch(grpc_error_handle error) {
|
532
|
-
GRPC_LOG_IF_ERROR("Fetch external account credentials access token",
|
533
|
-
GRPC_ERROR_REF(error));
|
524
|
+
GRPC_LOG_IF_ERROR("Fetch external account credentials access token", error);
|
534
525
|
// Move object state into local variables.
|
535
526
|
auto* cb = response_cb_;
|
536
527
|
response_cb_ = nullptr;
|
@@ -542,7 +533,6 @@ void ExternalAccountCredentials::FinishTokenFetch(grpc_error_handle error) {
|
|
542
533
|
cb(metadata_req, error);
|
543
534
|
// Delete context.
|
544
535
|
delete ctx;
|
545
|
-
GRPC_ERROR_UNREF(error);
|
546
536
|
}
|
547
537
|
|
548
538
|
} // namespace grpc_core
|
@@ -557,15 +547,14 @@ grpc_call_credentials* grpc_external_account_credentials_create(
|
|
557
547
|
return nullptr;
|
558
548
|
}
|
559
549
|
std::vector<std::string> scopes = absl::StrSplit(scopes_string, ',');
|
560
|
-
grpc_error_handle error
|
550
|
+
grpc_error_handle error;
|
561
551
|
auto creds = grpc_core::ExternalAccountCredentials::Create(
|
562
552
|
*json, std::move(scopes), &error)
|
563
553
|
.release();
|
564
|
-
if (!
|
554
|
+
if (!error.ok()) {
|
565
555
|
gpr_log(GPR_ERROR,
|
566
556
|
"External account credentials creation failed. Error: %s.",
|
567
|
-
|
568
|
-
GRPC_ERROR_UNREF(error);
|
557
|
+
grpc_core::StatusToString(error).c_str());
|
569
558
|
return nullptr;
|
570
559
|
}
|
571
560
|
return creds;
|
@@ -20,6 +20,7 @@
|
|
20
20
|
#include <map>
|
21
21
|
#include <utility>
|
22
22
|
|
23
|
+
#include "absl/status/status.h"
|
23
24
|
#include "absl/status/statusor.h"
|
24
25
|
#include "absl/strings/string_view.h"
|
25
26
|
|
@@ -27,8 +28,8 @@
|
|
27
28
|
|
28
29
|
#include "src/core/lib/iomgr/load_file.h"
|
29
30
|
#include "src/core/lib/json/json.h"
|
31
|
+
#include "src/core/lib/slice/slice.h"
|
30
32
|
#include "src/core/lib/slice/slice_internal.h"
|
31
|
-
#include "src/core/lib/slice/slice_refcount.h"
|
32
33
|
|
33
34
|
namespace grpc_core {
|
34
35
|
|
@@ -38,7 +39,7 @@ FileExternalAccountCredentials::Create(Options options,
|
|
38
39
|
grpc_error_handle* error) {
|
39
40
|
auto creds = MakeRefCounted<FileExternalAccountCredentials>(
|
40
41
|
std::move(options), std::move(scopes), error);
|
41
|
-
if (
|
42
|
+
if (error->ok()) {
|
42
43
|
return creds;
|
43
44
|
} else {
|
44
45
|
return nullptr;
|
@@ -50,12 +51,11 @@ FileExternalAccountCredentials::FileExternalAccountCredentials(
|
|
50
51
|
: ExternalAccountCredentials(options, std::move(scopes)) {
|
51
52
|
auto it = options.credential_source.object_value().find("file");
|
52
53
|
if (it == options.credential_source.object_value().end()) {
|
53
|
-
*error =
|
54
|
+
*error = GRPC_ERROR_CREATE("file field not present.");
|
54
55
|
return;
|
55
56
|
}
|
56
57
|
if (it->second.type() != Json::Type::STRING) {
|
57
|
-
*error =
|
58
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("file field must be a string.");
|
58
|
+
*error = GRPC_ERROR_CREATE("file field must be a string.");
|
59
59
|
return;
|
60
60
|
}
|
61
61
|
file_ = it->second.string_value();
|
@@ -63,32 +63,30 @@ FileExternalAccountCredentials::FileExternalAccountCredentials(
|
|
63
63
|
if (it != options.credential_source.object_value().end()) {
|
64
64
|
const Json& format_json = it->second;
|
65
65
|
if (format_json.type() != Json::Type::OBJECT) {
|
66
|
-
*error =
|
66
|
+
*error = GRPC_ERROR_CREATE(
|
67
67
|
"The JSON value of credential source format is not an object.");
|
68
68
|
return;
|
69
69
|
}
|
70
70
|
auto format_it = format_json.object_value().find("type");
|
71
71
|
if (format_it == format_json.object_value().end()) {
|
72
|
-
*error =
|
73
|
-
"format.type field not present.");
|
72
|
+
*error = GRPC_ERROR_CREATE("format.type field not present.");
|
74
73
|
return;
|
75
74
|
}
|
76
75
|
if (format_it->second.type() != Json::Type::STRING) {
|
77
|
-
*error =
|
78
|
-
"format.type field must be a string.");
|
76
|
+
*error = GRPC_ERROR_CREATE("format.type field must be a string.");
|
79
77
|
return;
|
80
78
|
}
|
81
79
|
format_type_ = format_it->second.string_value();
|
82
80
|
if (format_type_ == "json") {
|
83
81
|
format_it = format_json.object_value().find("subject_token_field_name");
|
84
82
|
if (format_it == format_json.object_value().end()) {
|
85
|
-
*error =
|
83
|
+
*error = GRPC_ERROR_CREATE(
|
86
84
|
"format.subject_token_field_name field must be present if the "
|
87
85
|
"format is in Json.");
|
88
86
|
return;
|
89
87
|
}
|
90
88
|
if (format_it->second.type() != Json::Type::STRING) {
|
91
|
-
*error =
|
89
|
+
*error = GRPC_ERROR_CREATE(
|
92
90
|
"format.subject_token_field_name field must be a string.");
|
93
91
|
return;
|
94
92
|
}
|
@@ -101,7 +99,7 @@ void FileExternalAccountCredentials::RetrieveSubjectToken(
|
|
101
99
|
HTTPRequestContext* /*ctx*/, const Options& /*options*/,
|
102
100
|
std::function<void(std::string, grpc_error_handle)> cb) {
|
103
101
|
struct SliceWrapper {
|
104
|
-
~SliceWrapper() {
|
102
|
+
~SliceWrapper() { CSliceUnref(slice); }
|
105
103
|
grpc_slice slice = grpc_empty_slice();
|
106
104
|
};
|
107
105
|
SliceWrapper content_slice;
|
@@ -109,7 +107,7 @@ void FileExternalAccountCredentials::RetrieveSubjectToken(
|
|
109
107
|
// request because it may have changed since the last request.
|
110
108
|
grpc_error_handle error =
|
111
109
|
grpc_load_file(file_.c_str(), 0, &content_slice.slice);
|
112
|
-
if (!
|
110
|
+
if (!error.ok()) {
|
113
111
|
cb("", error);
|
114
112
|
return;
|
115
113
|
}
|
@@ -117,26 +115,24 @@ void FileExternalAccountCredentials::RetrieveSubjectToken(
|
|
117
115
|
if (format_type_ == "json") {
|
118
116
|
auto content_json = Json::Parse(content);
|
119
117
|
if (!content_json.ok() || content_json->type() != Json::Type::OBJECT) {
|
120
|
-
cb("",
|
118
|
+
cb("", GRPC_ERROR_CREATE(
|
121
119
|
"The content of the file is not a valid json object."));
|
122
120
|
return;
|
123
121
|
}
|
124
122
|
auto content_it =
|
125
123
|
content_json->object_value().find(format_subject_token_field_name_);
|
126
124
|
if (content_it == content_json->object_value().end()) {
|
127
|
-
cb("",
|
128
|
-
"Subject token field not present."));
|
125
|
+
cb("", GRPC_ERROR_CREATE("Subject token field not present."));
|
129
126
|
return;
|
130
127
|
}
|
131
128
|
if (content_it->second.type() != Json::Type::STRING) {
|
132
|
-
cb("",
|
133
|
-
"Subject token field must be a string."));
|
129
|
+
cb("", GRPC_ERROR_CREATE("Subject token field must be a string."));
|
134
130
|
return;
|
135
131
|
}
|
136
|
-
cb(content_it->second.string_value(),
|
132
|
+
cb(content_it->second.string_value(), absl::OkStatus());
|
137
133
|
return;
|
138
134
|
}
|
139
|
-
cb(std::string(content),
|
135
|
+
cb(std::string(content), absl::OkStatus());
|
140
136
|
}
|
141
137
|
|
142
138
|
} // namespace grpc_core
|
@@ -50,7 +50,7 @@ UrlExternalAccountCredentials::Create(Options options,
|
|
50
50
|
grpc_error_handle* error) {
|
51
51
|
auto creds = MakeRefCounted<UrlExternalAccountCredentials>(
|
52
52
|
std::move(options), std::move(scopes), error);
|
53
|
-
if (
|
53
|
+
if (error->ok()) {
|
54
54
|
return creds;
|
55
55
|
} else {
|
56
56
|
return nullptr;
|
@@ -62,17 +62,16 @@ UrlExternalAccountCredentials::UrlExternalAccountCredentials(
|
|
62
62
|
: ExternalAccountCredentials(options, std::move(scopes)) {
|
63
63
|
auto it = options.credential_source.object_value().find("url");
|
64
64
|
if (it == options.credential_source.object_value().end()) {
|
65
|
-
*error =
|
65
|
+
*error = GRPC_ERROR_CREATE("url field not present.");
|
66
66
|
return;
|
67
67
|
}
|
68
68
|
if (it->second.type() != Json::Type::STRING) {
|
69
|
-
*error =
|
70
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("url field must be a string.");
|
69
|
+
*error = GRPC_ERROR_CREATE("url field must be a string.");
|
71
70
|
return;
|
72
71
|
}
|
73
72
|
absl::StatusOr<URI> tmp_url = URI::Parse(it->second.string_value());
|
74
73
|
if (!tmp_url.ok()) {
|
75
|
-
*error =
|
74
|
+
*error = GRPC_ERROR_CREATE(
|
76
75
|
absl::StrFormat("Invalid credential source url. Error: %s",
|
77
76
|
tmp_url.status().ToString()));
|
78
77
|
return;
|
@@ -85,7 +84,7 @@ UrlExternalAccountCredentials::UrlExternalAccountCredentials(
|
|
85
84
|
it = options.credential_source.object_value().find("headers");
|
86
85
|
if (it != options.credential_source.object_value().end()) {
|
87
86
|
if (it->second.type() != Json::Type::OBJECT) {
|
88
|
-
*error =
|
87
|
+
*error = GRPC_ERROR_CREATE(
|
89
88
|
"The JSON value of credential source headers is not an object.");
|
90
89
|
return;
|
91
90
|
}
|
@@ -97,32 +96,30 @@ UrlExternalAccountCredentials::UrlExternalAccountCredentials(
|
|
97
96
|
if (it != options.credential_source.object_value().end()) {
|
98
97
|
const Json& format_json = it->second;
|
99
98
|
if (format_json.type() != Json::Type::OBJECT) {
|
100
|
-
*error =
|
99
|
+
*error = GRPC_ERROR_CREATE(
|
101
100
|
"The JSON value of credential source format is not an object.");
|
102
101
|
return;
|
103
102
|
}
|
104
103
|
auto format_it = format_json.object_value().find("type");
|
105
104
|
if (format_it == format_json.object_value().end()) {
|
106
|
-
*error =
|
107
|
-
"format.type field not present.");
|
105
|
+
*error = GRPC_ERROR_CREATE("format.type field not present.");
|
108
106
|
return;
|
109
107
|
}
|
110
108
|
if (format_it->second.type() != Json::Type::STRING) {
|
111
|
-
*error =
|
112
|
-
"format.type field must be a string.");
|
109
|
+
*error = GRPC_ERROR_CREATE("format.type field must be a string.");
|
113
110
|
return;
|
114
111
|
}
|
115
112
|
format_type_ = format_it->second.string_value();
|
116
113
|
if (format_type_ == "json") {
|
117
114
|
format_it = format_json.object_value().find("subject_token_field_name");
|
118
115
|
if (format_it == format_json.object_value().end()) {
|
119
|
-
*error =
|
116
|
+
*error = GRPC_ERROR_CREATE(
|
120
117
|
"format.subject_token_field_name field must be present if the "
|
121
118
|
"format is in Json.");
|
122
119
|
return;
|
123
120
|
}
|
124
121
|
if (format_it->second.type() != Json::Type::STRING) {
|
125
|
-
*error =
|
122
|
+
*error = GRPC_ERROR_CREATE(
|
126
123
|
"format.subject_token_field_name field must be a string.");
|
127
124
|
return;
|
128
125
|
}
|
@@ -137,7 +134,7 @@ void UrlExternalAccountCredentials::RetrieveSubjectToken(
|
|
137
134
|
if (ctx == nullptr) {
|
138
135
|
FinishRetrieveSubjectToken(
|
139
136
|
"",
|
140
|
-
|
137
|
+
GRPC_ERROR_CREATE(
|
141
138
|
"Missing HTTPRequestContext to start subject token retrieval."));
|
142
139
|
return;
|
143
140
|
}
|
@@ -189,13 +186,13 @@ void UrlExternalAccountCredentials::OnRetrieveSubjectToken(
|
|
189
186
|
void* arg, grpc_error_handle error) {
|
190
187
|
UrlExternalAccountCredentials* self =
|
191
188
|
static_cast<UrlExternalAccountCredentials*>(arg);
|
192
|
-
self->OnRetrieveSubjectTokenInternal(
|
189
|
+
self->OnRetrieveSubjectTokenInternal(error);
|
193
190
|
}
|
194
191
|
|
195
192
|
void UrlExternalAccountCredentials::OnRetrieveSubjectTokenInternal(
|
196
193
|
grpc_error_handle error) {
|
197
194
|
http_request_.reset();
|
198
|
-
if (!
|
195
|
+
if (!error.ok()) {
|
199
196
|
FinishRetrieveSubjectToken("", error);
|
200
197
|
return;
|
201
198
|
}
|
@@ -205,27 +202,26 @@ void UrlExternalAccountCredentials::OnRetrieveSubjectTokenInternal(
|
|
205
202
|
auto response_json = Json::Parse(response_body);
|
206
203
|
if (!response_json.ok() || response_json->type() != Json::Type::OBJECT) {
|
207
204
|
FinishRetrieveSubjectToken(
|
208
|
-
"",
|
205
|
+
"", GRPC_ERROR_CREATE(
|
209
206
|
"The format of response is not a valid json object."));
|
210
207
|
return;
|
211
208
|
}
|
212
209
|
auto response_it =
|
213
210
|
response_json->object_value().find(format_subject_token_field_name_);
|
214
211
|
if (response_it == response_json->object_value().end()) {
|
215
|
-
FinishRetrieveSubjectToken(
|
216
|
-
|
212
|
+
FinishRetrieveSubjectToken(
|
213
|
+
"", GRPC_ERROR_CREATE("Subject token field not present."));
|
217
214
|
return;
|
218
215
|
}
|
219
216
|
if (response_it->second.type() != Json::Type::STRING) {
|
220
|
-
FinishRetrieveSubjectToken(
|
221
|
-
|
222
|
-
"Subject token field must be a string."));
|
217
|
+
FinishRetrieveSubjectToken(
|
218
|
+
"", GRPC_ERROR_CREATE("Subject token field must be a string."));
|
223
219
|
return;
|
224
220
|
}
|
225
221
|
FinishRetrieveSubjectToken(response_it->second.string_value(), error);
|
226
222
|
return;
|
227
223
|
}
|
228
|
-
FinishRetrieveSubjectToken(std::string(response_body),
|
224
|
+
FinishRetrieveSubjectToken(std::string(response_body), absl::OkStatus());
|
229
225
|
}
|
230
226
|
|
231
227
|
void UrlExternalAccountCredentials::FinishRetrieveSubjectToken(
|
@@ -236,10 +232,10 @@ void UrlExternalAccountCredentials::FinishRetrieveSubjectToken(
|
|
236
232
|
auto cb = cb_;
|
237
233
|
cb_ = nullptr;
|
238
234
|
// Invoke the callback.
|
239
|
-
if (!
|
235
|
+
if (!error.ok()) {
|
240
236
|
cb("", error);
|
241
237
|
} else {
|
242
|
-
cb(subject_token,
|
238
|
+
cb(subject_token, absl::OkStatus());
|
243
239
|
}
|
244
240
|
}
|
245
241
|
|