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
@@ -35,22 +35,21 @@ const char* grpc_json_get_string_property(const grpc_core::Json& json,
|
|
35
35
|
grpc_error_handle* error) {
|
36
36
|
if (json.type() != grpc_core::Json::Type::OBJECT) {
|
37
37
|
if (error != nullptr) {
|
38
|
-
*error =
|
39
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("JSON value is not an object");
|
38
|
+
*error = GRPC_ERROR_CREATE("JSON value is not an object");
|
40
39
|
}
|
41
40
|
return nullptr;
|
42
41
|
}
|
43
42
|
auto it = json.object_value().find(prop_name);
|
44
43
|
if (it == json.object_value().end()) {
|
45
44
|
if (error != nullptr) {
|
46
|
-
*error =
|
45
|
+
*error = GRPC_ERROR_CREATE(
|
47
46
|
absl::StrCat("Property ", prop_name, " not found in JSON object."));
|
48
47
|
}
|
49
48
|
return nullptr;
|
50
49
|
}
|
51
50
|
if (it->second.type() != grpc_core::Json::Type::STRING) {
|
52
51
|
if (error != nullptr) {
|
53
|
-
*error =
|
52
|
+
*error = GRPC_ERROR_CREATE(absl::StrCat(
|
54
53
|
"Property ", prop_name, " n JSON object is not a string."));
|
55
54
|
}
|
56
55
|
return nullptr;
|
@@ -61,7 +60,7 @@ const char* grpc_json_get_string_property(const grpc_core::Json& json,
|
|
61
60
|
bool grpc_copy_json_string_property(const grpc_core::Json& json,
|
62
61
|
const char* prop_name,
|
63
62
|
char** copied_value) {
|
64
|
-
grpc_error_handle error
|
63
|
+
grpc_error_handle error;
|
65
64
|
const char* prop_value =
|
66
65
|
grpc_json_get_string_property(json, prop_name, &error);
|
67
66
|
GRPC_LOG_IF_ERROR("Could not copy JSON property", error);
|
@@ -58,7 +58,7 @@
|
|
58
58
|
namespace grpc_core {
|
59
59
|
|
60
60
|
// TODO(roth): Consider stripping this down further to the completely minimal
|
61
|
-
// interface
|
61
|
+
// interface required to be exposed as part of the resolver API.
|
62
62
|
class ServiceConfig : public RefCounted<ServiceConfig> {
|
63
63
|
public:
|
64
64
|
static absl::string_view ChannelArgName() {
|
@@ -20,198 +20,151 @@
|
|
20
20
|
|
21
21
|
#include <string.h>
|
22
22
|
|
23
|
-
#include <map>
|
24
23
|
#include <string>
|
25
24
|
#include <utility>
|
26
25
|
|
27
|
-
#include "absl/memory/memory.h"
|
28
|
-
#include "absl/status/status.h"
|
29
26
|
#include "absl/status/statusor.h"
|
30
27
|
#include "absl/strings/str_cat.h"
|
31
|
-
#include "absl/
|
32
|
-
|
33
|
-
#include <grpc/support/log.h>
|
28
|
+
#include "absl/types/optional.h"
|
34
29
|
|
35
30
|
#include "src/core/lib/config/core_configuration.h"
|
36
31
|
#include "src/core/lib/gprpp/memory.h"
|
32
|
+
#include "src/core/lib/gprpp/validation_errors.h"
|
37
33
|
#include "src/core/lib/json/json.h"
|
34
|
+
#include "src/core/lib/json/json_args.h"
|
35
|
+
#include "src/core/lib/json/json_object_loader.h"
|
38
36
|
#include "src/core/lib/service_config/service_config_parser.h"
|
37
|
+
#include "src/core/lib/slice/slice.h"
|
39
38
|
#include "src/core/lib/slice/slice_internal.h"
|
40
|
-
#include "src/core/lib/slice/slice_refcount.h"
|
41
39
|
|
42
40
|
namespace grpc_core {
|
43
41
|
|
42
|
+
namespace {
|
43
|
+
|
44
|
+
struct MethodConfig {
|
45
|
+
struct Name {
|
46
|
+
absl::optional<std::string> service;
|
47
|
+
absl::optional<std::string> method;
|
48
|
+
|
49
|
+
static const JsonLoaderInterface* JsonLoader(const JsonArgs&) {
|
50
|
+
static const auto* loader = JsonObjectLoader<Name>()
|
51
|
+
.OptionalField("service", &Name::service)
|
52
|
+
.OptionalField("method", &Name::method)
|
53
|
+
.Finish();
|
54
|
+
return loader;
|
55
|
+
}
|
56
|
+
|
57
|
+
void JsonPostLoad(const Json&, const JsonArgs&, ValidationErrors* errors) {
|
58
|
+
if (!service.has_value() && method.has_value()) {
|
59
|
+
errors->AddError("method name populated without service name");
|
60
|
+
}
|
61
|
+
}
|
62
|
+
|
63
|
+
std::string Path() const {
|
64
|
+
if (!service.has_value() || service->empty()) return "";
|
65
|
+
return absl::StrCat("/", *service, "/",
|
66
|
+
method.has_value() ? *method : "");
|
67
|
+
}
|
68
|
+
};
|
69
|
+
|
70
|
+
std::vector<Name> names;
|
71
|
+
|
72
|
+
static const JsonLoaderInterface* JsonLoader(const JsonArgs&) {
|
73
|
+
static const auto* loader = JsonObjectLoader<MethodConfig>()
|
74
|
+
.OptionalField("name", &MethodConfig::names)
|
75
|
+
.Finish();
|
76
|
+
return loader;
|
77
|
+
}
|
78
|
+
};
|
79
|
+
|
80
|
+
} // namespace
|
81
|
+
|
44
82
|
absl::StatusOr<RefCountedPtr<ServiceConfig>> ServiceConfigImpl::Create(
|
45
83
|
const ChannelArgs& args, absl::string_view json_string) {
|
46
84
|
auto json = Json::Parse(json_string);
|
47
85
|
if (!json.ok()) return json.status();
|
48
|
-
|
49
|
-
auto service_config =
|
50
|
-
|
51
|
-
if (!status.ok()) return status;
|
86
|
+
ValidationErrors errors;
|
87
|
+
auto service_config = Create(args, *json, json_string, &errors);
|
88
|
+
if (!errors.ok()) return errors.status("errors validating service config");
|
52
89
|
return service_config;
|
53
90
|
}
|
54
91
|
|
55
|
-
ServiceConfigImpl::
|
56
|
-
|
57
|
-
|
58
|
-
: json_string_(std::move(json_string)), json_(std::move(json)) {
|
59
|
-
GPR_DEBUG_ASSERT(status != nullptr);
|
60
|
-
if (json_.type() != Json::Type::OBJECT) {
|
61
|
-
*status = absl::InvalidArgumentError("JSON value is not an object");
|
62
|
-
return;
|
63
|
-
}
|
64
|
-
std::vector<std::string> errors;
|
65
|
-
auto parsed_global_configs =
|
66
|
-
CoreConfiguration::Get().service_config_parser().ParseGlobalParameters(
|
67
|
-
args, json_);
|
68
|
-
if (!parsed_global_configs.ok()) {
|
69
|
-
errors.emplace_back(parsed_global_configs.status().message());
|
70
|
-
} else {
|
71
|
-
parsed_global_configs_ = std::move(*parsed_global_configs);
|
72
|
-
}
|
73
|
-
absl::Status local_status = ParsePerMethodParams(args);
|
74
|
-
if (!local_status.ok()) errors.emplace_back(local_status.message());
|
75
|
-
if (!errors.empty()) {
|
76
|
-
*status = absl::InvalidArgumentError(absl::StrCat(
|
77
|
-
"Service config parsing errors: [", absl::StrJoin(errors, "; "), "]"));
|
78
|
-
}
|
79
|
-
}
|
80
|
-
|
81
|
-
ServiceConfigImpl::~ServiceConfigImpl() {
|
82
|
-
for (auto& p : parsed_method_configs_map_) {
|
83
|
-
grpc_slice_unref_internal(p.first);
|
84
|
-
}
|
92
|
+
RefCountedPtr<ServiceConfig> ServiceConfigImpl::Create(
|
93
|
+
const ChannelArgs& args, const Json& json, ValidationErrors* errors) {
|
94
|
+
return Create(args, json, json.Dump(), errors);
|
85
95
|
}
|
86
96
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
auto parsed_configs_or =
|
94
|
-
CoreConfiguration::Get().service_config_parser().ParsePerMethodParameters(
|
95
|
-
args, json);
|
96
|
-
if (!parsed_configs_or.ok()) {
|
97
|
-
errors.emplace_back(parsed_configs_or.status().message());
|
98
|
-
} else {
|
99
|
-
auto parsed_configs =
|
100
|
-
absl::make_unique<ServiceConfigParser::ParsedConfigVector>(
|
101
|
-
std::move(*parsed_configs_or));
|
102
|
-
parsed_method_config_vectors_storage_.push_back(std::move(parsed_configs));
|
103
|
-
vector_ptr = parsed_method_config_vectors_storage_.back().get();
|
97
|
+
RefCountedPtr<ServiceConfig> ServiceConfigImpl::Create(
|
98
|
+
const ChannelArgs& args, const Json& json, absl::string_view json_string,
|
99
|
+
ValidationErrors* errors) {
|
100
|
+
if (json.type() != Json::Type::OBJECT) {
|
101
|
+
errors->AddError("is not an object");
|
102
|
+
return nullptr;
|
104
103
|
}
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
104
|
+
auto service_config = MakeRefCounted<ServiceConfigImpl>();
|
105
|
+
service_config->json_string_ = std::string(json_string);
|
106
|
+
// Parse global parameters.
|
107
|
+
service_config->parsed_global_configs_ =
|
108
|
+
CoreConfiguration::Get().service_config_parser().ParseGlobalParameters(
|
109
|
+
args, json, errors);
|
110
|
+
// Parse per-method parameters.
|
111
|
+
auto method_configs = LoadJsonObjectField<std::vector<Json::Object>>(
|
112
|
+
json.object_value(), JsonArgs(), "methodConfig", errors,
|
113
|
+
/*required=*/false);
|
114
|
+
if (method_configs.has_value()) {
|
115
|
+
service_config->parsed_method_config_vectors_storage_.reserve(
|
116
|
+
method_configs->size());
|
117
|
+
for (size_t i = 0; i < method_configs->size(); ++i) {
|
118
|
+
const Json::Object& method_config_json = (*method_configs)[i];
|
119
|
+
ValidationErrors::ScopedField field(
|
120
|
+
errors, absl::StrCat(".methodConfig[", i, "]"));
|
121
|
+
// Have each parser read this method config.
|
122
|
+
auto parsed_configs =
|
123
|
+
CoreConfiguration::Get()
|
124
|
+
.service_config_parser()
|
125
|
+
.ParsePerMethodParameters(args, method_config_json, errors);
|
126
|
+
// Store the parsed configs.
|
127
|
+
service_config->parsed_method_config_vectors_storage_.push_back(
|
128
|
+
std::move(parsed_configs));
|
129
|
+
const ServiceConfigParser::ParsedConfigVector* vector_ptr =
|
130
|
+
&service_config->parsed_method_config_vectors_storage_.back();
|
131
|
+
// Parse the names.
|
132
|
+
auto method_config =
|
133
|
+
LoadFromJson<MethodConfig>(method_config_json, JsonArgs(), errors);
|
134
|
+
for (size_t j = 0; j < method_config.names.size(); ++j) {
|
135
|
+
ValidationErrors::ScopedField field(errors,
|
136
|
+
absl::StrCat(".name[", j, "]"));
|
137
|
+
std::string path = method_config.names[j].Path();
|
138
|
+
if (path.empty()) {
|
139
|
+
if (service_config->default_method_config_vector_ != nullptr) {
|
140
|
+
errors->AddError("duplicate default method config");
|
141
|
+
}
|
142
|
+
service_config->default_method_config_vector_ = vector_ptr;
|
116
143
|
} else {
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
144
|
+
grpc_slice key = grpc_slice_from_cpp_string(std::move(path));
|
145
|
+
// If the key is not already present in the map, this will
|
146
|
+
// store a ref to the key in the map.
|
147
|
+
auto& value = service_config->parsed_method_configs_map_[key];
|
148
|
+
if (value != nullptr) {
|
149
|
+
errors->AddError(absl::StrCat("multiple method configs for path ",
|
150
|
+
StringViewFromSlice(key)));
|
151
|
+
// The map entry already existed, so we need to unref the
|
152
|
+
// key we just created.
|
153
|
+
CSliceUnref(key);
|
123
154
|
} else {
|
124
|
-
|
125
|
-
// If the key is not already present in the map, this will
|
126
|
-
// store a ref to the key in the map.
|
127
|
-
auto& value = parsed_method_configs_map_[key];
|
128
|
-
if (value != nullptr) {
|
129
|
-
errors.emplace_back(
|
130
|
-
"field:name error:multiple method configs with same name");
|
131
|
-
// The map entry already existed, so we need to unref the
|
132
|
-
// key we just created.
|
133
|
-
grpc_slice_unref_internal(key);
|
134
|
-
} else {
|
135
|
-
value = vector_ptr;
|
136
|
-
}
|
155
|
+
value = vector_ptr;
|
137
156
|
}
|
138
157
|
}
|
139
158
|
}
|
140
159
|
}
|
141
160
|
}
|
142
|
-
|
143
|
-
return absl::InvalidArgumentError(
|
144
|
-
absl::StrCat("index ", index, ": [", absl::StrJoin(errors, "; "), "]"));
|
145
|
-
}
|
146
|
-
return absl::OkStatus();
|
147
|
-
}
|
148
|
-
|
149
|
-
absl::Status ServiceConfigImpl::ParsePerMethodParams(const ChannelArgs& args) {
|
150
|
-
auto it = json_.object_value().find("methodConfig");
|
151
|
-
if (it == json_.object_value().end()) return absl::OkStatus();
|
152
|
-
if (it->second.type() != Json::Type::ARRAY) {
|
153
|
-
return absl::InvalidArgumentError("field must be of type array");
|
154
|
-
}
|
155
|
-
std::vector<std::string> errors;
|
156
|
-
for (size_t i = 0; i < it->second.array_value().size(); ++i) {
|
157
|
-
const Json& method_config = it->second.array_value()[i];
|
158
|
-
if (method_config.type() != Json::Type::OBJECT) {
|
159
|
-
errors.emplace_back(absl::StrCat("index ", i, ": not of type Object"));
|
160
|
-
} else {
|
161
|
-
absl::Status status = ParseJsonMethodConfig(args, method_config, i);
|
162
|
-
if (!status.ok()) errors.emplace_back(status.message());
|
163
|
-
}
|
164
|
-
}
|
165
|
-
if (!errors.empty()) {
|
166
|
-
return absl::InvalidArgumentError(absl::StrCat(
|
167
|
-
"errors parsing methodConfig: [", absl::StrJoin(errors, "; "), "]"));
|
168
|
-
}
|
169
|
-
return absl::OkStatus();
|
161
|
+
return service_config;
|
170
162
|
}
|
171
163
|
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
return absl::InvalidArgumentError("field:name error:type is not object");
|
176
|
-
}
|
177
|
-
// Find service name.
|
178
|
-
const std::string* service_name = nullptr;
|
179
|
-
auto it = json.object_value().find("service");
|
180
|
-
if (it != json.object_value().end() &&
|
181
|
-
it->second.type() != Json::Type::JSON_NULL) {
|
182
|
-
if (it->second.type() != Json::Type::STRING) {
|
183
|
-
return absl::InvalidArgumentError(
|
184
|
-
"field:name error: field:service error:not of type string");
|
185
|
-
}
|
186
|
-
if (!it->second.string_value().empty()) {
|
187
|
-
service_name = &it->second.string_value();
|
188
|
-
}
|
189
|
-
}
|
190
|
-
const std::string* method_name = nullptr;
|
191
|
-
// Find method name.
|
192
|
-
it = json.object_value().find("method");
|
193
|
-
if (it != json.object_value().end() &&
|
194
|
-
it->second.type() != Json::Type::JSON_NULL) {
|
195
|
-
if (it->second.type() != Json::Type::STRING) {
|
196
|
-
return absl::InvalidArgumentError(
|
197
|
-
"field:name error: field:method error:not of type string");
|
198
|
-
}
|
199
|
-
if (!it->second.string_value().empty()) {
|
200
|
-
method_name = &it->second.string_value();
|
201
|
-
}
|
202
|
-
}
|
203
|
-
// If neither service nor method are specified, it's the default.
|
204
|
-
// Method name may not be specified without service name.
|
205
|
-
if (service_name == nullptr) {
|
206
|
-
if (method_name != nullptr) {
|
207
|
-
return absl::InvalidArgumentError(
|
208
|
-
"field:name error:method name populated without service name");
|
209
|
-
}
|
210
|
-
return "";
|
164
|
+
ServiceConfigImpl::~ServiceConfigImpl() {
|
165
|
+
for (auto& p : parsed_method_configs_map_) {
|
166
|
+
CSliceUnref(p.first);
|
211
167
|
}
|
212
|
-
// Construct path.
|
213
|
-
return absl::StrCat("/", *service_name, "/",
|
214
|
-
method_name == nullptr ? "" : *method_name);
|
215
168
|
}
|
216
169
|
|
217
170
|
const ServiceConfigParser::ParsedConfigVector*
|
@@ -26,7 +26,6 @@
|
|
26
26
|
#include <unordered_map>
|
27
27
|
#include <vector>
|
28
28
|
|
29
|
-
#include "absl/status/status.h"
|
30
29
|
#include "absl/status/statusor.h"
|
31
30
|
#include "absl/strings/string_view.h"
|
32
31
|
|
@@ -35,6 +34,7 @@
|
|
35
34
|
|
36
35
|
#include "src/core/lib/channel/channel_args.h"
|
37
36
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
37
|
+
#include "src/core/lib/gprpp/validation_errors.h"
|
38
38
|
#include "src/core/lib/json/json.h"
|
39
39
|
#include "src/core/lib/service_config/service_config.h"
|
40
40
|
#include "src/core/lib/service_config/service_config_parser.h"
|
@@ -72,8 +72,15 @@ class ServiceConfigImpl final : public ServiceConfig {
|
|
72
72
|
static absl::StatusOr<RefCountedPtr<ServiceConfig>> Create(
|
73
73
|
const ChannelArgs& args, absl::string_view json_string);
|
74
74
|
|
75
|
-
|
76
|
-
|
75
|
+
// Alternate forms that are useful in edge cases.
|
76
|
+
static RefCountedPtr<ServiceConfig> Create(const ChannelArgs& args,
|
77
|
+
const Json& json,
|
78
|
+
absl::string_view json_string,
|
79
|
+
ValidationErrors* errors);
|
80
|
+
static RefCountedPtr<ServiceConfig> Create(const ChannelArgs& args,
|
81
|
+
const Json& json,
|
82
|
+
ValidationErrors* errors);
|
83
|
+
|
77
84
|
~ServiceConfigImpl() override;
|
78
85
|
|
79
86
|
absl::string_view json_string() const override { return json_string_; }
|
@@ -94,20 +101,10 @@ class ServiceConfigImpl final : public ServiceConfig {
|
|
94
101
|
const grpc_slice& path) const override;
|
95
102
|
|
96
103
|
private:
|
97
|
-
// Helper functions for parsing the method configs.
|
98
|
-
absl::Status ParsePerMethodParams(const ChannelArgs& args);
|
99
|
-
absl::Status ParseJsonMethodConfig(const ChannelArgs& args, const Json& json,
|
100
|
-
size_t index);
|
101
|
-
|
102
|
-
// Returns a path string for the JSON name object specified by json.
|
103
|
-
// Sets *error on error.
|
104
|
-
static absl::StatusOr<std::string> ParseJsonMethodName(const Json& json);
|
105
|
-
|
106
104
|
std::string json_string_;
|
107
105
|
Json json_;
|
108
106
|
|
109
|
-
|
110
|
-
parsed_global_configs_;
|
107
|
+
ServiceConfigParser::ParsedConfigVector parsed_global_configs_;
|
111
108
|
// A map from the method name to the parsed config vector. Note that we are
|
112
109
|
// using a raw pointer and not a unique pointer so that we can use the same
|
113
110
|
// vector for multiple names.
|
@@ -118,11 +115,11 @@ class ServiceConfigImpl final : public ServiceConfig {
|
|
118
115
|
const ServiceConfigParser::ParsedConfigVector* default_method_config_vector_ =
|
119
116
|
nullptr;
|
120
117
|
// Storage for all the vectors that are being used in
|
121
|
-
//
|
122
|
-
std::vector<
|
118
|
+
// parsed_method_configs_map_ and default_method_config_vector_.
|
119
|
+
std::vector<ServiceConfigParser::ParsedConfigVector>
|
123
120
|
parsed_method_config_vectors_storage_;
|
124
121
|
};
|
125
122
|
|
126
123
|
} // namespace grpc_core
|
127
124
|
|
128
|
-
#endif
|
125
|
+
#endif // GRPC_CORE_LIB_SERVICE_CONFIG_SERVICE_CONFIG_IMPL_H
|
@@ -22,9 +22,7 @@
|
|
22
22
|
|
23
23
|
#include <string>
|
24
24
|
|
25
|
-
#include "absl/status/status.h"
|
26
25
|
#include "absl/strings/str_cat.h"
|
27
|
-
#include "absl/strings/str_join.h"
|
28
26
|
|
29
27
|
#include <grpc/support/log.h>
|
30
28
|
|
@@ -49,43 +47,28 @@ void ServiceConfigParser::Builder::RegisterParser(
|
|
49
47
|
registered_parsers_.emplace_back(std::move(parser));
|
50
48
|
}
|
51
49
|
|
52
|
-
|
50
|
+
ServiceConfigParser::ParsedConfigVector
|
53
51
|
ServiceConfigParser::ParseGlobalParameters(const ChannelArgs& args,
|
54
|
-
const Json& json
|
52
|
+
const Json& json,
|
53
|
+
ValidationErrors* errors) const {
|
55
54
|
ParsedConfigVector parsed_global_configs;
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
if (!parsed_config.ok()) {
|
60
|
-
errors.emplace_back(parsed_config.status().message());
|
61
|
-
} else {
|
62
|
-
parsed_global_configs.push_back(std::move(*parsed_config));
|
63
|
-
}
|
64
|
-
}
|
65
|
-
if (!errors.empty()) {
|
66
|
-
return absl::InvalidArgumentError(absl::StrJoin(errors, "; "));
|
55
|
+
for (auto& parser : registered_parsers_) {
|
56
|
+
parsed_global_configs.push_back(
|
57
|
+
parser->ParseGlobalParams(args, json, errors));
|
67
58
|
}
|
68
|
-
return
|
59
|
+
return parsed_global_configs;
|
69
60
|
}
|
70
61
|
|
71
|
-
|
62
|
+
ServiceConfigParser::ParsedConfigVector
|
72
63
|
ServiceConfigParser::ParsePerMethodParameters(const ChannelArgs& args,
|
73
|
-
const Json& json
|
64
|
+
const Json& json,
|
65
|
+
ValidationErrors* errors) const {
|
74
66
|
ParsedConfigVector parsed_method_configs;
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
registered_parsers_[i]->ParsePerMethodParams(args, json);
|
79
|
-
if (!parsed_config.ok()) {
|
80
|
-
errors.emplace_back(parsed_config.status().message());
|
81
|
-
} else {
|
82
|
-
parsed_method_configs.push_back(std::move(*parsed_config));
|
83
|
-
}
|
84
|
-
}
|
85
|
-
if (!errors.empty()) {
|
86
|
-
return absl::InvalidArgumentError(absl::StrJoin(errors, "; "));
|
67
|
+
for (auto& parser : registered_parsers_) {
|
68
|
+
parsed_method_configs.push_back(
|
69
|
+
parser->ParsePerMethodParams(args, json, errors));
|
87
70
|
}
|
88
|
-
return
|
71
|
+
return parsed_method_configs;
|
89
72
|
}
|
90
73
|
|
91
74
|
size_t ServiceConfigParser::GetParserIndex(absl::string_view name) const {
|
@@ -26,10 +26,10 @@
|
|
26
26
|
#include <utility>
|
27
27
|
#include <vector>
|
28
28
|
|
29
|
-
#include "absl/status/statusor.h"
|
30
29
|
#include "absl/strings/string_view.h"
|
31
30
|
|
32
31
|
#include "src/core/lib/channel/channel_args.h"
|
32
|
+
#include "src/core/lib/gprpp/validation_errors.h"
|
33
33
|
#include "src/core/lib/json/json.h"
|
34
34
|
|
35
35
|
namespace grpc_core {
|
@@ -52,13 +52,15 @@ class ServiceConfigParser {
|
|
52
52
|
|
53
53
|
virtual absl::string_view name() const = 0;
|
54
54
|
|
55
|
-
virtual
|
56
|
-
const ChannelArgs& /*args*/, const Json& /*json
|
55
|
+
virtual std::unique_ptr<ParsedConfig> ParseGlobalParams(
|
56
|
+
const ChannelArgs& /*args*/, const Json& /*json*/,
|
57
|
+
ValidationErrors* /*errors*/) {
|
57
58
|
return nullptr;
|
58
59
|
}
|
59
60
|
|
60
|
-
virtual
|
61
|
-
const ChannelArgs& /*args*/, const Json& /*json
|
61
|
+
virtual std::unique_ptr<ParsedConfig> ParsePerMethodParams(
|
62
|
+
const ChannelArgs& /*args*/, const Json& /*json*/,
|
63
|
+
ValidationErrors* /*errors*/) {
|
62
64
|
return nullptr;
|
63
65
|
}
|
64
66
|
};
|
@@ -80,11 +82,13 @@ class ServiceConfigParser {
|
|
80
82
|
ServiceConfigParserList registered_parsers_;
|
81
83
|
};
|
82
84
|
|
83
|
-
|
84
|
-
|
85
|
+
ParsedConfigVector ParseGlobalParameters(const ChannelArgs& args,
|
86
|
+
const Json& json,
|
87
|
+
ValidationErrors* errors) const;
|
85
88
|
|
86
|
-
|
87
|
-
|
89
|
+
ParsedConfigVector ParsePerMethodParameters(const ChannelArgs& args,
|
90
|
+
const Json& json,
|
91
|
+
ValidationErrors* errors) const;
|
88
92
|
|
89
93
|
// Return the index for a given registered parser.
|
90
94
|
// If there is an error, return -1.
|
@@ -98,4 +102,4 @@ class ServiceConfigParser {
|
|
98
102
|
|
99
103
|
} // namespace grpc_core
|
100
104
|
|
101
|
-
#endif
|
105
|
+
#endif // GRPC_CORE_LIB_SERVICE_CONFIG_SERVICE_CONFIG_PARSER_H
|
data/src/core/lib/slice/b64.cc
CHANGED
@@ -27,7 +27,7 @@
|
|
27
27
|
#include <grpc/support/log.h>
|
28
28
|
|
29
29
|
#include "src/core/lib/gpr/useful.h"
|
30
|
-
#include "src/core/lib/slice/
|
30
|
+
#include "src/core/lib/slice/slice.h"
|
31
31
|
|
32
32
|
/* --- Constants. --- */
|
33
33
|
|
@@ -234,6 +234,6 @@ grpc_slice grpc_base64_decode_with_len(const char* b64, size_t b64_len,
|
|
234
234
|
return result;
|
235
235
|
|
236
236
|
fail:
|
237
|
-
|
237
|
+
grpc_core::CSliceUnref(result);
|
238
238
|
return grpc_empty_slice();
|
239
239
|
}
|
data/src/core/lib/slice/slice.cc
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
#include "src/core/lib/gprpp/memory.h"
|
32
32
|
#include "src/core/lib/slice/slice_internal.h"
|
33
|
-
#include "src/core/lib/slice/
|
33
|
+
#include "src/core/lib/slice/slice_refcount.h"
|
34
34
|
|
35
35
|
char* grpc_slice_to_c_string(grpc_slice slice) {
|
36
36
|
char* out = static_cast<char*>(gpr_malloc(GRPC_SLICE_LENGTH(slice) + 1));
|
@@ -494,3 +494,9 @@ grpc_slice grpc_slice_dup(grpc_slice a) {
|
|
494
494
|
GRPC_SLICE_LENGTH(a));
|
495
495
|
return copy;
|
496
496
|
}
|
497
|
+
|
498
|
+
grpc_slice grpc_slice_ref(grpc_slice slice) {
|
499
|
+
return grpc_core::CSliceRef(slice);
|
500
|
+
}
|
501
|
+
|
502
|
+
void grpc_slice_unref(grpc_slice slice) { grpc_core::CSliceUnref(slice); }
|
data/src/core/lib/slice/slice.h
CHANGED
@@ -31,7 +31,6 @@
|
|
31
31
|
#include "src/core/lib/gpr/string.h"
|
32
32
|
#include "src/core/lib/slice/slice_internal.h"
|
33
33
|
#include "src/core/lib/slice/slice_refcount.h"
|
34
|
-
#include "src/core/lib/slice/slice_refcount_base.h"
|
35
34
|
|
36
35
|
// Herein lies grpc_core::Slice and its team of thin wrappers around grpc_slice.
|
37
36
|
// They aim to keep you safe by providing strong guarantees around lifetime and
|
@@ -53,6 +52,19 @@
|
|
53
52
|
|
54
53
|
namespace grpc_core {
|
55
54
|
|
55
|
+
inline const grpc_slice& CSliceRef(const grpc_slice& slice) {
|
56
|
+
if (reinterpret_cast<uintptr_t>(slice.refcount) > 1) {
|
57
|
+
slice.refcount->Ref();
|
58
|
+
}
|
59
|
+
return slice;
|
60
|
+
}
|
61
|
+
|
62
|
+
inline void CSliceUnref(const grpc_slice& slice) {
|
63
|
+
if (reinterpret_cast<uintptr_t>(slice.refcount) > 1) {
|
64
|
+
slice.refcount->Unref();
|
65
|
+
}
|
66
|
+
}
|
67
|
+
|
56
68
|
namespace slice_detail {
|
57
69
|
|
58
70
|
// Returns an empty slice.
|
@@ -110,7 +122,7 @@ class BaseSlice {
|
|
110
122
|
return grpc_slice_is_equivalent(slice_, other.slice_);
|
111
123
|
}
|
112
124
|
|
113
|
-
uint32_t Hash() const { return
|
125
|
+
uint32_t Hash() const { return grpc_slice_hash(slice_); }
|
114
126
|
|
115
127
|
protected:
|
116
128
|
BaseSlice() : slice_(EmptySlice()) {}
|
@@ -249,7 +261,7 @@ class MutableSlice : public slice_detail::BaseSlice,
|
|
249
261
|
: slice_detail::BaseSlice(slice) {
|
250
262
|
GPR_DEBUG_ASSERT(slice.refcount == nullptr || slice.refcount->IsUnique());
|
251
263
|
}
|
252
|
-
~MutableSlice() {
|
264
|
+
~MutableSlice() { CSliceUnref(c_slice()); }
|
253
265
|
|
254
266
|
MutableSlice(const MutableSlice&) = delete;
|
255
267
|
MutableSlice& operator=(const MutableSlice&) = delete;
|
@@ -284,7 +296,8 @@ class Slice : public slice_detail::BaseSlice,
|
|
284
296
|
public slice_detail::StaticConstructors<Slice> {
|
285
297
|
public:
|
286
298
|
Slice() = default;
|
287
|
-
~Slice() {
|
299
|
+
~Slice() { CSliceUnref(c_slice()); }
|
300
|
+
|
288
301
|
explicit Slice(const grpc_slice& slice) : slice_detail::BaseSlice(slice) {}
|
289
302
|
explicit Slice(slice_detail::BaseSlice&& other)
|
290
303
|
: slice_detail::BaseSlice(other.TakeCSlice()) {}
|
@@ -326,7 +339,7 @@ class Slice : public slice_detail::BaseSlice,
|
|
326
339
|
if (c_slice().refcount == grpc_slice_refcount::NoopRefcount()) {
|
327
340
|
return Slice(grpc_slice_copy(c_slice()));
|
328
341
|
}
|
329
|
-
return
|
342
|
+
return Ref();
|
330
343
|
}
|
331
344
|
|
332
345
|
// TakeMutable returns a MutableSlice, and leaves the current slice in an
|
@@ -365,7 +378,7 @@ class Slice : public slice_detail::BaseSlice,
|
|
365
378
|
return Slice(grpc_slice_split_tail(c_slice_ptr(), split));
|
366
379
|
}
|
367
380
|
|
368
|
-
Slice Ref() const { return Slice(
|
381
|
+
Slice Ref() const { return Slice(CSliceRef(c_slice())); }
|
369
382
|
|
370
383
|
Slice Copy() const { return Slice(grpc_slice_copy(c_slice())); }
|
371
384
|
|