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
@@ -46,7 +46,9 @@
|
|
46
46
|
#include "src/core/lib/debug/trace.h"
|
47
47
|
#include "src/core/lib/gprpp/env.h"
|
48
48
|
#include "src/core/lib/gprpp/host_port.h"
|
49
|
+
#include "src/core/lib/gprpp/orphanable.h"
|
49
50
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
51
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
50
52
|
#include "src/core/lib/gprpp/sync.h"
|
51
53
|
#include "src/core/lib/gprpp/time.h"
|
52
54
|
#include "src/core/lib/http/httpcli.h"
|
@@ -65,8 +67,8 @@
|
|
65
67
|
#include "src/core/lib/security/credentials/jwt/json_token.h"
|
66
68
|
#include "src/core/lib/security/credentials/jwt/jwt_credentials.h"
|
67
69
|
#include "src/core/lib/security/credentials/oauth2/oauth2_credentials.h"
|
70
|
+
#include "src/core/lib/slice/slice.h"
|
68
71
|
#include "src/core/lib/slice/slice_internal.h"
|
69
|
-
#include "src/core/lib/slice/slice_refcount.h"
|
70
72
|
#include "src/core/lib/surface/api_trace.h"
|
71
73
|
#include "src/core/lib/transport/error_utils.h"
|
72
74
|
#include "src/core/lib/uri/uri_parser.h"
|
@@ -171,7 +173,7 @@ static void on_metadata_server_detection_http_response(
|
|
171
173
|
void* user_data, grpc_error_handle error) {
|
172
174
|
metadata_server_detector* detector =
|
173
175
|
static_cast<metadata_server_detector*>(user_data);
|
174
|
-
if (
|
176
|
+
if (error.ok() && detector->response.status == 200 &&
|
175
177
|
detector->response.hdr_count > 0) {
|
176
178
|
/* Internet providers can return a generic response to all requests, so
|
177
179
|
it is necessary to check that metadata header is present also. */
|
@@ -273,7 +275,12 @@ bool ValidateUrlField(const Json& json, const std::string& field) {
|
|
273
275
|
absl::string_view host;
|
274
276
|
absl::string_view port;
|
275
277
|
grpc_core::SplitHostPort(url->authority(), &host, &port);
|
276
|
-
if (absl::ConsumeSuffix(&host, ".googleapis.com")) {
|
278
|
+
if (absl::ConsumeSuffix(&host, ".p.googleapis.com")) {
|
279
|
+
if (absl::StartsWith(host, "sts-") ||
|
280
|
+
absl::StartsWith(host, "iamcredentials-")) {
|
281
|
+
return true;
|
282
|
+
}
|
283
|
+
} else if (absl::ConsumeSuffix(&host, ".googleapis.com")) {
|
277
284
|
if (host == "sts" || host == "iamcredentials") {
|
278
285
|
return true;
|
279
286
|
} else if (absl::StartsWith(host, "sts.") ||
|
@@ -307,14 +314,14 @@ static grpc_error_handle create_default_creds_from_path(
|
|
307
314
|
grpc_auth_refresh_token token;
|
308
315
|
grpc_core::RefCountedPtr<grpc_call_credentials> result;
|
309
316
|
grpc_slice creds_data = grpc_empty_slice();
|
310
|
-
grpc_error_handle error
|
317
|
+
grpc_error_handle error;
|
311
318
|
Json json;
|
312
319
|
if (creds_path.empty()) {
|
313
|
-
error =
|
320
|
+
error = GRPC_ERROR_CREATE("creds_path unset");
|
314
321
|
goto end;
|
315
322
|
}
|
316
323
|
error = grpc_load_file(creds_path.c_str(), 0, &creds_data);
|
317
|
-
if (!
|
324
|
+
if (!error.ok()) goto end;
|
318
325
|
{
|
319
326
|
auto json_or = Json::Parse(grpc_core::StringViewFromSlice(creds_data));
|
320
327
|
if (!json_or.ok()) {
|
@@ -324,9 +331,9 @@ static grpc_error_handle create_default_creds_from_path(
|
|
324
331
|
json = std::move(*json_or);
|
325
332
|
}
|
326
333
|
if (json.type() != Json::Type::OBJECT) {
|
327
|
-
error = grpc_error_set_str(
|
328
|
-
|
329
|
-
|
334
|
+
error = grpc_error_set_str(GRPC_ERROR_CREATE("Failed to parse JSON"),
|
335
|
+
grpc_core::StatusStrProperty::kRawBytes,
|
336
|
+
grpc_core::StringViewFromSlice(creds_data));
|
330
337
|
goto end;
|
331
338
|
}
|
332
339
|
|
@@ -337,7 +344,7 @@ static grpc_error_handle create_default_creds_from_path(
|
|
337
344
|
grpc_service_account_jwt_access_credentials_create_from_auth_json_key(
|
338
345
|
key, grpc_max_auth_token_lifetime());
|
339
346
|
if (result == nullptr) {
|
340
|
-
error =
|
347
|
+
error = GRPC_ERROR_CREATE(
|
341
348
|
"grpc_service_account_jwt_access_credentials_create_from_auth_json_"
|
342
349
|
"key failed");
|
343
350
|
}
|
@@ -350,7 +357,7 @@ static grpc_error_handle create_default_creds_from_path(
|
|
350
357
|
result =
|
351
358
|
grpc_refresh_token_credentials_create_from_auth_refresh_token(token);
|
352
359
|
if (result == nullptr) {
|
353
|
-
error =
|
360
|
+
error = GRPC_ERROR_CREATE(
|
354
361
|
"grpc_refresh_token_credentials_create_from_auth_refresh_token "
|
355
362
|
"failed");
|
356
363
|
}
|
@@ -359,15 +366,14 @@ static grpc_error_handle create_default_creds_from_path(
|
|
359
366
|
|
360
367
|
/* Finally try an external account credentials.*/
|
361
368
|
if (!ValidateExteralAccountCredentials(json)) {
|
362
|
-
error =
|
363
|
-
"Invalid external account credentials format.");
|
369
|
+
error = GRPC_ERROR_CREATE("Invalid external account credentials format.");
|
364
370
|
goto end;
|
365
371
|
}
|
366
372
|
result = grpc_core::ExternalAccountCredentials::Create(json, {}, &error);
|
367
373
|
|
368
374
|
end:
|
369
|
-
GPR_ASSERT((result == nullptr) + (
|
370
|
-
|
375
|
+
GPR_ASSERT((result == nullptr) + (error.ok()) == 1);
|
376
|
+
grpc_core::CSliceUnref(creds_data);
|
371
377
|
*creds = result;
|
372
378
|
return error;
|
373
379
|
}
|
@@ -402,14 +408,14 @@ static grpc_core::RefCountedPtr<grpc_call_credentials> make_default_call_creds(
|
|
402
408
|
auto path_from_env = grpc_core::GetEnv(GRPC_GOOGLE_CREDENTIALS_ENV_VAR);
|
403
409
|
if (path_from_env.has_value()) {
|
404
410
|
err = create_default_creds_from_path(*path_from_env, &call_creds);
|
405
|
-
if (
|
411
|
+
if (err.ok()) return call_creds;
|
406
412
|
*error = grpc_error_add_child(*error, err);
|
407
413
|
}
|
408
414
|
|
409
415
|
/* Then the well-known file. */
|
410
416
|
err = create_default_creds_from_path(
|
411
417
|
grpc_get_well_known_google_credentials_file_path(), &call_creds);
|
412
|
-
if (
|
418
|
+
if (err.ok()) return call_creds;
|
413
419
|
*error = grpc_error_add_child(*error, err);
|
414
420
|
|
415
421
|
update_tenancy();
|
@@ -418,11 +424,9 @@ static grpc_core::RefCountedPtr<grpc_call_credentials> make_default_call_creds(
|
|
418
424
|
call_creds = grpc_core::RefCountedPtr<grpc_call_credentials>(
|
419
425
|
grpc_google_compute_engine_credentials_create(nullptr));
|
420
426
|
if (call_creds == nullptr) {
|
421
|
-
*error =
|
422
|
-
GRPC_GOOGLE_CREDENTIAL_CREATION_ERROR);
|
427
|
+
*error = GRPC_ERROR_CREATE(GRPC_GOOGLE_CREDENTIAL_CREATION_ERROR);
|
423
428
|
*error = grpc_error_add_child(
|
424
|
-
*error,
|
425
|
-
"Failed to get credentials from network"));
|
429
|
+
*error, GRPC_ERROR_CREATE("Failed to get credentials from network"));
|
426
430
|
}
|
427
431
|
}
|
428
432
|
|
@@ -433,7 +437,7 @@ grpc_channel_credentials* grpc_google_default_credentials_create(
|
|
433
437
|
grpc_call_credentials* call_credentials) {
|
434
438
|
grpc_channel_credentials* result = nullptr;
|
435
439
|
grpc_core::RefCountedPtr<grpc_call_credentials> call_creds(call_credentials);
|
436
|
-
grpc_error_handle error
|
440
|
+
grpc_error_handle error;
|
437
441
|
grpc_core::ExecCtx exec_ctx;
|
438
442
|
|
439
443
|
GRPC_API_TRACE("grpc_google_default_credentials_create(%p)", 1,
|
@@ -462,9 +466,8 @@ grpc_channel_credentials* grpc_google_default_credentials_create(
|
|
462
466
|
GPR_ASSERT(result != nullptr);
|
463
467
|
} else {
|
464
468
|
gpr_log(GPR_ERROR, "Could not create google default credentials: %s",
|
465
|
-
|
469
|
+
grpc_core::StatusToString(error).c_str());
|
466
470
|
}
|
467
|
-
GRPC_ERROR_UNREF(error);
|
468
471
|
return result;
|
469
472
|
}
|
470
473
|
|
@@ -23,7 +23,6 @@
|
|
23
23
|
#include <stdint.h>
|
24
24
|
#include <string.h>
|
25
25
|
|
26
|
-
#include <map>
|
27
26
|
#include <string>
|
28
27
|
#include <utility>
|
29
28
|
|
@@ -77,7 +76,7 @@ grpc_auth_json_key grpc_auth_json_key_create_from_json(const Json& json) {
|
|
77
76
|
BIO* bio = nullptr;
|
78
77
|
const char* prop_value;
|
79
78
|
int success = 0;
|
80
|
-
grpc_error_handle error
|
79
|
+
grpc_error_handle error;
|
81
80
|
|
82
81
|
memset(&result, 0, sizeof(grpc_auth_json_key));
|
83
82
|
result.type = GRPC_AUTH_JSON_TYPE_INVALID;
|
@@ -63,8 +63,8 @@
|
|
63
63
|
#include "src/core/lib/iomgr/polling_entity.h"
|
64
64
|
#include "src/core/lib/security/credentials/credentials.h"
|
65
65
|
#include "src/core/lib/slice/b64.h"
|
66
|
+
#include "src/core/lib/slice/slice.h"
|
66
67
|
#include "src/core/lib/slice/slice_internal.h"
|
67
|
-
#include "src/core/lib/slice/slice_refcount.h"
|
68
68
|
#include "src/core/lib/uri/uri_parser.h"
|
69
69
|
#include "src/core/tsi/ssl_types.h"
|
70
70
|
|
@@ -114,7 +114,7 @@ static Json parse_json_part_from_jwt(const char* str, size_t len) {
|
|
114
114
|
}
|
115
115
|
absl::string_view string = grpc_core::StringViewFromSlice(slice);
|
116
116
|
auto json = Json::Parse(string);
|
117
|
-
|
117
|
+
grpc_core::CSliceUnref(slice);
|
118
118
|
if (!json.ok()) {
|
119
119
|
gpr_log(GPR_ERROR, "JSON parse error: %s",
|
120
120
|
json.status().ToString().c_str());
|
@@ -396,8 +396,8 @@ static verifier_cb_ctx* verifier_cb_ctx_create(
|
|
396
396
|
void verifier_cb_ctx_destroy(verifier_cb_ctx* ctx) {
|
397
397
|
if (ctx->audience != nullptr) gpr_free(ctx->audience);
|
398
398
|
if (ctx->claims != nullptr) grpc_jwt_claims_destroy(ctx->claims);
|
399
|
-
|
400
|
-
|
399
|
+
grpc_core::CSliceUnref(ctx->signature);
|
400
|
+
grpc_core::CSliceUnref(ctx->signed_data);
|
401
401
|
jose_header_destroy(ctx->header);
|
402
402
|
for (size_t i = 0; i < HTTP_RESPONSE_COUNT; i++) {
|
403
403
|
grpc_http_response_destroy(&ctx->responses[i]);
|
@@ -487,7 +487,7 @@ static BIGNUM* bignum_from_base64(const char* b64) {
|
|
487
487
|
}
|
488
488
|
result = BN_bin2bn(GRPC_SLICE_START_PTR(bin),
|
489
489
|
TSI_SIZE_AS_SIZE(GRPC_SLICE_LENGTH(bin)), nullptr);
|
490
|
-
|
490
|
+
grpc_core::CSliceUnref(bin);
|
491
491
|
return result;
|
492
492
|
}
|
493
493
|
|
@@ -47,6 +47,7 @@
|
|
47
47
|
#include "src/core/lib/debug/trace.h"
|
48
48
|
#include "src/core/lib/gprpp/memory.h"
|
49
49
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
50
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
50
51
|
#include "src/core/lib/http/httpcli_ssl_credentials.h"
|
51
52
|
#include "src/core/lib/iomgr/error.h"
|
52
53
|
#include "src/core/lib/iomgr/load_file.h"
|
@@ -56,11 +57,9 @@
|
|
56
57
|
#include "src/core/lib/promise/poll.h"
|
57
58
|
#include "src/core/lib/promise/promise.h"
|
58
59
|
#include "src/core/lib/security/util/json_util.h"
|
59
|
-
#include "src/core/lib/slice/slice_refcount.h"
|
60
60
|
#include "src/core/lib/surface/api_trace.h"
|
61
61
|
#include "src/core/lib/transport/error_utils.h"
|
62
62
|
#include "src/core/lib/transport/metadata_batch.h"
|
63
|
-
#include "src/core/lib/transport/transport.h"
|
64
63
|
#include "src/core/lib/uri/uri_parser.h"
|
65
64
|
|
66
65
|
using grpc_core::Json;
|
@@ -80,7 +79,7 @@ grpc_auth_refresh_token grpc_auth_refresh_token_create_from_json(
|
|
80
79
|
grpc_auth_refresh_token result;
|
81
80
|
const char* prop_value;
|
82
81
|
int success = 0;
|
83
|
-
grpc_error_handle error
|
82
|
+
grpc_error_handle error;
|
84
83
|
|
85
84
|
memset(&result, 0, sizeof(grpc_auth_refresh_token));
|
86
85
|
result.type = GRPC_AUTH_JSON_TYPE_INVALID;
|
@@ -235,7 +234,7 @@ end:
|
|
235
234
|
|
236
235
|
static void on_oauth2_token_fetcher_http_response(void* user_data,
|
237
236
|
grpc_error_handle error) {
|
238
|
-
GRPC_LOG_IF_ERROR("oauth_fetch",
|
237
|
+
GRPC_LOG_IF_ERROR("oauth_fetch", error);
|
239
238
|
grpc_credentials_metadata_request* r =
|
240
239
|
static_cast<grpc_credentials_metadata_request*>(user_data);
|
241
240
|
grpc_oauth2_token_fetcher_credentials* c =
|
@@ -248,10 +247,9 @@ void grpc_oauth2_token_fetcher_credentials::on_http_response(
|
|
248
247
|
absl::optional<grpc_core::Slice> access_token_value;
|
249
248
|
grpc_core::Duration token_lifetime;
|
250
249
|
grpc_credentials_status status =
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
: GRPC_CREDENTIALS_ERROR;
|
250
|
+
error.ok() ? grpc_oauth2_token_fetcher_credentials_parse_server_response(
|
251
|
+
&r->response, &access_token_value, &token_lifetime)
|
252
|
+
: GRPC_CREDENTIALS_ERROR;
|
255
253
|
// Update cache and grab list of pending requests.
|
256
254
|
gpr_mu_lock(&mu_);
|
257
255
|
token_fetch_pending_ = false;
|
@@ -275,10 +273,9 @@ void grpc_oauth2_token_fetcher_credentials::on_http_response(
|
|
275
273
|
[](absl::string_view, const grpc_core::Slice&) { abort(); });
|
276
274
|
pending_request->result = std::move(pending_request->md);
|
277
275
|
} else {
|
278
|
-
auto err =
|
276
|
+
auto err = GRPC_ERROR_CREATE_REFERENCING(
|
279
277
|
"Error occurred when fetching oauth2 token.", &error, 1);
|
280
278
|
pending_request->result = grpc_error_to_absl_status(err);
|
281
|
-
GRPC_ERROR_UNREF(err);
|
282
279
|
}
|
283
280
|
pending_request->done.store(true, std::memory_order_release);
|
284
281
|
pending_request->waker.Wakeup();
|
@@ -534,10 +531,10 @@ void MaybeAddToBody(const char* field_name, const char* field,
|
|
534
531
|
|
535
532
|
grpc_error_handle LoadTokenFile(const char* path, gpr_slice* token) {
|
536
533
|
grpc_error_handle err = grpc_load_file(path, 1, token);
|
537
|
-
if (!
|
534
|
+
if (!err.ok()) return err;
|
538
535
|
if (GRPC_SLICE_LENGTH(*token) == 0) {
|
539
536
|
gpr_log(GPR_ERROR, "Token file %s is empty", path);
|
540
|
-
err =
|
537
|
+
err = GRPC_ERROR_CREATE("Token file is empty.");
|
541
538
|
}
|
542
539
|
return err;
|
543
540
|
}
|
@@ -572,9 +569,8 @@ class StsTokenFetcherCredentials
|
|
572
569
|
grpc_http_request request;
|
573
570
|
memset(&request, 0, sizeof(grpc_http_request));
|
574
571
|
grpc_error_handle err = FillBody(&request.body, &request.body_length);
|
575
|
-
if (!
|
572
|
+
if (!err.ok()) {
|
576
573
|
response_cb(metadata_req, err);
|
577
|
-
GRPC_ERROR_UNREF(err);
|
578
574
|
return;
|
579
575
|
}
|
580
576
|
grpc_http_header header = {
|
@@ -606,22 +602,22 @@ class StsTokenFetcherCredentials
|
|
606
602
|
std::vector<std::string> body_parts;
|
607
603
|
grpc_slice subject_token = grpc_empty_slice();
|
608
604
|
grpc_slice actor_token = grpc_empty_slice();
|
609
|
-
grpc_error_handle err
|
605
|
+
grpc_error_handle err;
|
610
606
|
|
611
607
|
auto cleanup = [&body, &body_length, &body_parts, &subject_token,
|
612
608
|
&actor_token, &err]() {
|
613
|
-
if (
|
609
|
+
if (err.ok()) {
|
614
610
|
std::string body_str = absl::StrJoin(body_parts, "");
|
615
611
|
*body = gpr_strdup(body_str.c_str());
|
616
612
|
*body_length = body_str.size();
|
617
613
|
}
|
618
|
-
|
619
|
-
|
614
|
+
CSliceUnref(subject_token);
|
615
|
+
CSliceUnref(actor_token);
|
620
616
|
return err;
|
621
617
|
};
|
622
618
|
|
623
619
|
err = LoadTokenFile(subject_token_path_.get(), &subject_token);
|
624
|
-
if (!
|
620
|
+
if (!err.ok()) return cleanup();
|
625
621
|
body_parts.push_back(absl::StrFormat(
|
626
622
|
GRPC_STS_POST_MINIMAL_BODY_FORMAT_STRING,
|
627
623
|
reinterpret_cast<const char*>(GRPC_SLICE_START_PTR(subject_token)),
|
@@ -633,7 +629,7 @@ class StsTokenFetcherCredentials
|
|
633
629
|
&body_parts);
|
634
630
|
if ((actor_token_path_ != nullptr) && *actor_token_path_ != '\0') {
|
635
631
|
err = LoadTokenFile(actor_token_path_.get(), &actor_token);
|
636
|
-
if (!
|
632
|
+
if (!err.ok()) return cleanup();
|
637
633
|
MaybeAddToBody(
|
638
634
|
"actor_token",
|
639
635
|
reinterpret_cast<const char*>(GRPC_SLICE_START_PTR(actor_token)),
|
@@ -666,31 +662,29 @@ absl::StatusOr<URI> ValidateStsCredentialsOptions(
|
|
666
662
|
? ""
|
667
663
|
: options->token_exchange_service_uri);
|
668
664
|
if (!sts_url.ok()) {
|
669
|
-
error_list.push_back(
|
665
|
+
error_list.push_back(GRPC_ERROR_CREATE(
|
670
666
|
absl::StrFormat("Invalid or missing STS endpoint URL. Error: %s",
|
671
667
|
sts_url.status().ToString())));
|
672
668
|
} else if (sts_url->scheme() != "https" && sts_url->scheme() != "http") {
|
673
|
-
error_list.push_back(
|
674
|
-
"Invalid URI scheme, must be https to http."));
|
669
|
+
error_list.push_back(
|
670
|
+
GRPC_ERROR_CREATE("Invalid URI scheme, must be https to http."));
|
675
671
|
}
|
676
672
|
if (options->subject_token_path == nullptr ||
|
677
673
|
strlen(options->subject_token_path) == 0) {
|
678
|
-
error_list.push_back(
|
679
|
-
"subject_token needs to be specified"));
|
674
|
+
error_list.push_back(
|
675
|
+
GRPC_ERROR_CREATE("subject_token needs to be specified"));
|
680
676
|
}
|
681
677
|
if (options->subject_token_type == nullptr ||
|
682
678
|
strlen(options->subject_token_type) == 0) {
|
683
|
-
error_list.push_back(
|
684
|
-
"subject_token_type needs to be specified"));
|
679
|
+
error_list.push_back(
|
680
|
+
GRPC_ERROR_CREATE("subject_token_type needs to be specified"));
|
685
681
|
}
|
686
682
|
if (error_list.empty()) {
|
687
683
|
return sts_url;
|
688
684
|
}
|
689
685
|
auto grpc_error_vec = GRPC_ERROR_CREATE_FROM_VECTOR(
|
690
686
|
"Invalid STS Credentials Options", &error_list);
|
691
|
-
auto retval =
|
692
|
-
absl::InvalidArgumentError(grpc_error_std_string(grpc_error_vec));
|
693
|
-
GRPC_ERROR_UNREF(grpc_error_vec);
|
687
|
+
auto retval = absl::InvalidArgumentError(StatusToString(grpc_error_vec));
|
694
688
|
return retval;
|
695
689
|
}
|
696
690
|
|
@@ -21,6 +21,7 @@
|
|
21
21
|
#include "src/core/lib/security/credentials/plugin/plugin_credentials.h"
|
22
22
|
|
23
23
|
#include <atomic>
|
24
|
+
#include <memory>
|
24
25
|
|
25
26
|
#include "absl/status/status.h"
|
26
27
|
#include "absl/strings/str_cat.h"
|
@@ -95,7 +96,7 @@ grpc_plugin_credentials::PendingRequest::ProcessPluginResult(
|
|
95
96
|
for (size_t i = 0; i < num_md; ++i) {
|
96
97
|
md_->Append(
|
97
98
|
grpc_core::StringViewFromSlice(md[i].key),
|
98
|
-
grpc_core::Slice(
|
99
|
+
grpc_core::Slice(grpc_core::CSliceRef(md[i].value)),
|
99
100
|
[&error](absl::string_view message, const grpc_core::Slice&) {
|
100
101
|
error = absl::UnavailableError(message);
|
101
102
|
});
|
@@ -132,8 +133,8 @@ void grpc_plugin_credentials::PendingRequest::RequestMetadataReady(
|
|
132
133
|
}
|
133
134
|
for (size_t i = 0; i < num_md; ++i) {
|
134
135
|
grpc_metadata p;
|
135
|
-
p.key =
|
136
|
-
p.value =
|
136
|
+
p.key = grpc_core::CSliceRef(md[i].key);
|
137
|
+
p.value = grpc_core::CSliceRef(md[i].value);
|
137
138
|
r->metadata_.push_back(p);
|
138
139
|
}
|
139
140
|
r->error_details_ = error_details == nullptr ? "" : error_details;
|
@@ -191,8 +192,8 @@ grpc_plugin_credentials::GetRequestMetadata(
|
|
191
192
|
error_details);
|
192
193
|
// Clean up.
|
193
194
|
for (size_t i = 0; i < num_creds_md; ++i) {
|
194
|
-
|
195
|
-
|
195
|
+
grpc_core::CSliceUnref(creds_md[i].key);
|
196
|
+
grpc_core::CSliceUnref(creds_md[i].value);
|
196
197
|
}
|
197
198
|
gpr_free(const_cast<char*>(error_details));
|
198
199
|
|
@@ -45,7 +45,7 @@
|
|
45
45
|
#include "src/core/lib/promise/poll.h"
|
46
46
|
#include "src/core/lib/security/credentials/call_creds_util.h"
|
47
47
|
#include "src/core/lib/security/credentials/credentials.h"
|
48
|
-
#include "src/core/lib/slice/
|
48
|
+
#include "src/core/lib/slice/slice.h"
|
49
49
|
#include "src/core/lib/transport/transport.h"
|
50
50
|
|
51
51
|
extern grpc_core::TraceFlag grpc_plugin_credentials_trace;
|
@@ -81,8 +81,8 @@ struct grpc_plugin_credentials final : public grpc_call_credentials {
|
|
81
81
|
~PendingRequest() override {
|
82
82
|
grpc_auth_metadata_context_reset(&context_);
|
83
83
|
for (size_t i = 0; i < metadata_.size(); i++) {
|
84
|
-
|
85
|
-
|
84
|
+
grpc_core::CSliceUnref(metadata_[i].key);
|
85
|
+
grpc_core::CSliceUnref(metadata_[i].value);
|
86
86
|
}
|
87
87
|
}
|
88
88
|
|
@@ -19,7 +19,8 @@
|
|
19
19
|
#include "src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h"
|
20
20
|
|
21
21
|
#include <algorithm>
|
22
|
-
|
22
|
+
|
23
|
+
#include "absl/status/status.h"
|
23
24
|
|
24
25
|
#include <grpc/grpc_security.h>
|
25
26
|
#include <grpc/support/log.h>
|
@@ -32,7 +33,7 @@ void grpc_tls_certificate_distributor::SetKeyMaterials(
|
|
32
33
|
auto& cert_info = certificate_info_map_[cert_name];
|
33
34
|
if (pem_root_certs.has_value()) {
|
34
35
|
// Successful credential updates will clear any pre-existing error.
|
35
|
-
cert_info.SetRootError(
|
36
|
+
cert_info.SetRootError(absl::OkStatus());
|
36
37
|
for (auto* watcher_ptr : cert_info.root_cert_watchers) {
|
37
38
|
GPR_ASSERT(watcher_ptr != nullptr);
|
38
39
|
const auto watcher_it = watchers_.find(watcher_ptr);
|
@@ -57,7 +58,7 @@ void grpc_tls_certificate_distributor::SetKeyMaterials(
|
|
57
58
|
}
|
58
59
|
if (pem_key_cert_pairs.has_value()) {
|
59
60
|
// Successful credential updates will clear any pre-existing error.
|
60
|
-
cert_info.SetIdentityError(
|
61
|
+
cert_info.SetIdentityError(absl::OkStatus());
|
61
62
|
for (const auto watcher_ptr : cert_info.identity_cert_watchers) {
|
62
63
|
GPR_ASSERT(watcher_ptr != nullptr);
|
63
64
|
const auto watcher_it = watchers_.find(watcher_ptr);
|
@@ -113,7 +114,7 @@ void grpc_tls_certificate_distributor::SetErrorForCert(
|
|
113
114
|
GPR_ASSERT(watcher_it != watchers_.end());
|
114
115
|
// identity_cert_error_to_report is the error of the identity cert this
|
115
116
|
// watcher is watching, if there is any.
|
116
|
-
grpc_error_handle identity_cert_error_to_report
|
117
|
+
grpc_error_handle identity_cert_error_to_report;
|
117
118
|
if (identity_cert_error.has_value() &&
|
118
119
|
watcher_it->second.identity_cert_name == cert_name) {
|
119
120
|
identity_cert_error_to_report = *identity_cert_error;
|
@@ -122,8 +123,7 @@ void grpc_tls_certificate_distributor::SetErrorForCert(
|
|
122
123
|
certificate_info_map_[*watcher_it->second.identity_cert_name];
|
123
124
|
identity_cert_error_to_report = identity_cert_info.identity_cert_error;
|
124
125
|
}
|
125
|
-
watcher_ptr->OnError(
|
126
|
-
GRPC_ERROR_REF(identity_cert_error_to_report));
|
126
|
+
watcher_ptr->OnError(*root_cert_error, identity_cert_error_to_report);
|
127
127
|
}
|
128
128
|
cert_info.SetRootError(*root_cert_error);
|
129
129
|
}
|
@@ -134,7 +134,7 @@ void grpc_tls_certificate_distributor::SetErrorForCert(
|
|
134
134
|
GPR_ASSERT(watcher_it != watchers_.end());
|
135
135
|
// root_cert_error_to_report is the error of the root cert this watcher is
|
136
136
|
// watching, if there is any.
|
137
|
-
grpc_error_handle root_cert_error_to_report
|
137
|
+
grpc_error_handle root_cert_error_to_report;
|
138
138
|
if (root_cert_error.has_value() &&
|
139
139
|
watcher_it->second.root_cert_name == cert_name) {
|
140
140
|
// In this case, We've already sent the error updates at the time when
|
@@ -145,32 +145,28 @@ void grpc_tls_certificate_distributor::SetErrorForCert(
|
|
145
145
|
certificate_info_map_[*watcher_it->second.root_cert_name];
|
146
146
|
root_cert_error_to_report = root_cert_info.root_cert_error;
|
147
147
|
}
|
148
|
-
watcher_ptr->OnError(
|
149
|
-
GRPC_ERROR_REF(*identity_cert_error));
|
148
|
+
watcher_ptr->OnError(root_cert_error_to_report, *identity_cert_error);
|
150
149
|
}
|
151
150
|
cert_info.SetIdentityError(*identity_cert_error);
|
152
151
|
}
|
153
152
|
};
|
154
153
|
|
155
154
|
void grpc_tls_certificate_distributor::SetError(grpc_error_handle error) {
|
156
|
-
GPR_ASSERT(!
|
155
|
+
GPR_ASSERT(!error.ok());
|
157
156
|
grpc_core::MutexLock lock(&mu_);
|
158
157
|
for (const auto& watcher : watchers_) {
|
159
158
|
const auto watcher_ptr = watcher.first;
|
160
159
|
GPR_ASSERT(watcher_ptr != nullptr);
|
161
160
|
const auto& watcher_info = watcher.second;
|
162
161
|
watcher_ptr->OnError(
|
163
|
-
watcher_info.root_cert_name.has_value() ?
|
164
|
-
|
165
|
-
watcher_info.identity_cert_name.has_value() ? GRPC_ERROR_REF(error)
|
166
|
-
: GRPC_ERROR_NONE);
|
162
|
+
watcher_info.root_cert_name.has_value() ? error : absl::OkStatus(),
|
163
|
+
watcher_info.identity_cert_name.has_value() ? error : absl::OkStatus());
|
167
164
|
}
|
168
165
|
for (auto& cert_info_entry : certificate_info_map_) {
|
169
166
|
auto& cert_info = cert_info_entry.second;
|
170
|
-
cert_info.SetRootError(
|
171
|
-
cert_info.SetIdentityError(
|
167
|
+
cert_info.SetRootError(error);
|
168
|
+
cert_info.SetIdentityError(error);
|
172
169
|
}
|
173
|
-
GRPC_ERROR_UNREF(error);
|
174
170
|
};
|
175
171
|
|
176
172
|
void grpc_tls_certificate_distributor::WatchTlsCertificates(
|
@@ -195,15 +191,15 @@ void grpc_tls_certificate_distributor::WatchTlsCertificates(
|
|
195
191
|
identity_cert_name};
|
196
192
|
absl::optional<absl::string_view> updated_root_certs;
|
197
193
|
absl::optional<grpc_core::PemKeyCertPairList> updated_identity_pairs;
|
198
|
-
grpc_error_handle root_error
|
199
|
-
grpc_error_handle identity_error
|
194
|
+
grpc_error_handle root_error;
|
195
|
+
grpc_error_handle identity_error;
|
200
196
|
if (root_cert_name.has_value()) {
|
201
197
|
CertificateInfo& cert_info = certificate_info_map_[*root_cert_name];
|
202
198
|
start_watching_root_cert = cert_info.root_cert_watchers.empty();
|
203
199
|
already_watching_identity_for_root_cert =
|
204
200
|
!cert_info.identity_cert_watchers.empty();
|
205
201
|
cert_info.root_cert_watchers.insert(watcher_ptr);
|
206
|
-
root_error =
|
202
|
+
root_error = cert_info.root_cert_error;
|
207
203
|
// Empty credentials will be treated as no updates.
|
208
204
|
if (!cert_info.pem_root_certs.empty()) {
|
209
205
|
updated_root_certs = cert_info.pem_root_certs;
|
@@ -215,7 +211,7 @@ void grpc_tls_certificate_distributor::WatchTlsCertificates(
|
|
215
211
|
already_watching_root_for_identity_cert =
|
216
212
|
!cert_info.root_cert_watchers.empty();
|
217
213
|
cert_info.identity_cert_watchers.insert(watcher_ptr);
|
218
|
-
identity_error =
|
214
|
+
identity_error = cert_info.identity_cert_error;
|
219
215
|
// Empty credentials will be treated as no updates.
|
220
216
|
if (!cert_info.pem_key_cert_pairs.empty()) {
|
221
217
|
updated_identity_pairs = cert_info.pem_key_cert_pairs;
|
@@ -231,13 +227,9 @@ void grpc_tls_certificate_distributor::WatchTlsCertificates(
|
|
231
227
|
std::move(updated_identity_pairs));
|
232
228
|
}
|
233
229
|
// Notify this watcher if the certs it is watching already had some errors.
|
234
|
-
if (!
|
235
|
-
|
236
|
-
watcher_ptr->OnError(GRPC_ERROR_REF(root_error),
|
237
|
-
GRPC_ERROR_REF(identity_error));
|
230
|
+
if (!root_error.ok() || !identity_error.ok()) {
|
231
|
+
watcher_ptr->OnError(root_error, identity_error);
|
238
232
|
}
|
239
|
-
GRPC_ERROR_UNREF(root_error);
|
240
|
-
GRPC_ERROR_UNREF(identity_error);
|
241
233
|
}
|
242
234
|
// Invoke watch status callback if needed.
|
243
235
|
{
|
@@ -176,9 +176,9 @@ struct grpc_tls_certificate_distributor
|
|
176
176
|
// The contents of the identity key-certificate pairs.
|
177
177
|
grpc_core::PemKeyCertPairList pem_key_cert_pairs;
|
178
178
|
// The root cert reloading error propagated by the caller.
|
179
|
-
grpc_error_handle root_cert_error
|
179
|
+
grpc_error_handle root_cert_error;
|
180
180
|
// The identity cert reloading error propagated by the caller.
|
181
|
-
grpc_error_handle identity_cert_error
|
181
|
+
grpc_error_handle identity_cert_error;
|
182
182
|
// The set of watchers watching root certificates.
|
183
183
|
// This is mainly used for quickly looking up the affected watchers while
|
184
184
|
// performing a credential reloading.
|
@@ -188,16 +188,9 @@ struct grpc_tls_certificate_distributor
|
|
188
188
|
// credential reloading.
|
189
189
|
std::set<TlsCertificatesWatcherInterface*> identity_cert_watchers;
|
190
190
|
|
191
|
-
~CertificateInfo() {
|
192
|
-
|
193
|
-
GRPC_ERROR_UNREF(identity_cert_error);
|
194
|
-
}
|
195
|
-
void SetRootError(grpc_error_handle error) {
|
196
|
-
GRPC_ERROR_UNREF(root_cert_error);
|
197
|
-
root_cert_error = error;
|
198
|
-
}
|
191
|
+
~CertificateInfo() {}
|
192
|
+
void SetRootError(grpc_error_handle error) { root_cert_error = error; }
|
199
193
|
void SetIdentityError(grpc_error_handle error) {
|
200
|
-
GRPC_ERROR_UNREF(identity_cert_error);
|
201
194
|
identity_cert_error = error;
|
202
195
|
}
|
203
196
|
};
|