grpc 1.42.0 → 1.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +705 -451
- data/include/grpc/compression.h +1 -1
- data/include/grpc/event_engine/endpoint_config.h +11 -5
- data/include/grpc/event_engine/event_engine.h +122 -44
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -31
- data/include/grpc/event_engine/memory_allocator.h +27 -26
- data/include/grpc/event_engine/memory_request.h +57 -0
- data/include/grpc/event_engine/port.h +1 -1
- data/include/grpc/event_engine/slice.h +286 -0
- data/include/grpc/event_engine/slice_buffer.h +135 -0
- data/include/grpc/grpc.h +43 -27
- data/include/grpc/grpc_posix.h +20 -19
- data/include/grpc/grpc_security.h +323 -195
- data/include/grpc/grpc_security_constants.h +1 -14
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +19 -28
- data/include/grpc/impl/codegen/atm_gcc_sync.h +0 -2
- data/include/grpc/impl/codegen/atm_windows.h +0 -2
- data/include/grpc/impl/codegen/compression_types.h +2 -3
- data/include/grpc/impl/codegen/connectivity_state.h +2 -1
- data/include/grpc/impl/codegen/gpr_types.h +2 -1
- data/include/grpc/impl/codegen/grpc_types.h +31 -30
- data/include/grpc/impl/codegen/port_platform.h +107 -47
- data/include/grpc/impl/codegen/slice.h +5 -2
- data/include/grpc/slice.h +0 -11
- data/src/core/ext/filters/census/grpc_context.cc +3 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +315 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +142 -0
- data/src/core/ext/filters/channel_idle/idle_filter_state.cc +96 -0
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +68 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +20 -16
- data/src/core/ext/filters/client_channel/backend_metric.h +19 -8
- data/src/core/ext/filters/client_channel/backup_poller.cc +23 -19
- data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +54 -30
- data/src/core/ext/filters/client_channel/client_channel.cc +684 -615
- data/src/core/ext/filters/client_channel/client_channel.h +103 -58
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -6
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -26
- data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -8
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -41
- data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
- data/src/core/ext/filters/client_channel/client_channel_service_config.h +111 -0
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
- data/src/core/ext/filters/client_channel/config_selector.h +21 -11
- data/src/core/ext/filters/client_channel/connector.h +13 -8
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +36 -51
- data/src/core/ext/filters/client_channel/dynamic_filters.h +19 -10
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +4 -22
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +6 -15
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +139 -583
- data/src/core/ext/filters/client_channel/health/health_check_client.h +26 -160
- data/src/core/ext/filters/client_channel/http_proxy.cc +96 -130
- data/src/core/ext/filters/client_channel/http_proxy.h +25 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +12 -8
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +36 -15
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +15 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +21 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +380 -313
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +15 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +2 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +8 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +26 -16
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +10 -8
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +415 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1152 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +94 -0
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +228 -207
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +491 -452
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +523 -391
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +16 -6
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +636 -626
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +280 -254
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +147 -134
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +275 -223
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +266 -249
- 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_attributes.h +64 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +288 -277
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +213 -182
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +589 -737
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +43 -33
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +676 -334
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +30 -13
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +29 -24
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +51 -71
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +358 -357
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +55 -40
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +3 -2
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +124 -255
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +37 -49
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +18 -3
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +190 -102
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +258 -0
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +123 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +56 -61
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +648 -503
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
- data/src/core/ext/filters/client_channel/retry_filter.cc +382 -294
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +198 -232
- data/src/core/ext/filters/client_channel/retry_service_config.h +41 -32
- data/src/core/ext/filters/client_channel/retry_throttle.cc +18 -39
- data/src/core/ext/filters/client_channel/retry_throttle.h +26 -13
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +37 -19
- data/src/core/ext/filters/client_channel/subchannel.cc +272 -319
- data/src/core/ext/filters/client_channel/subchannel.h +100 -47
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +17 -77
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +20 -26
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +470 -0
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +222 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +48 -39
- data/src/core/ext/filters/deadline/deadline_filter.h +11 -4
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +179 -403
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +38 -6
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +112 -0
- data/src/core/ext/filters/http/client/http_client_filter.cc +106 -551
- data/src/core/ext/filters/http/client/http_client_filter.h +35 -5
- data/src/core/ext/filters/http/client_authority_filter.cc +43 -112
- data/src/core/ext/filters/http/client_authority_filter.h +28 -6
- data/src/core/ext/filters/http/http_filters_plugin.cc +35 -28
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +112 -333
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +85 -161
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +100 -476
- data/src/core/ext/filters/http/server/http_server_filter.h +37 -3
- data/src/core/ext/filters/message_size/message_size_filter.cc +130 -159
- data/src/core/ext/filters/message_size/message_size_filter.h +41 -17
- data/src/core/ext/filters/rbac/rbac_filter.cc +174 -0
- data/src/core/ext/filters/rbac/rbac_filter.h +84 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +819 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +86 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +62 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +85 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +160 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +33 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +268 -110
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -9
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +387 -216
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -5
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +791 -1179
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +16 -5
- data/src/core/ext/transport/chttp2/transport/context_list.cc +6 -3
- data/src/core/ext/transport/chttp2/transport/context_list.h +6 -4
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +287 -0
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +1018 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +297 -285
- data/src/core/ext/transport/chttp2/transport/flow_control.h +191 -293
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +66 -218
- data/src/core/ext/transport/chttp2/transport/frame_data.h +13 -36
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +16 -13
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +12 -7
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +21 -9
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +27 -59
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +15 -16
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +381 -260
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +106 -147
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +5 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +12 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +157 -229
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +143 -42
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +50 -50
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +74 -163
- data/src/core/ext/transport/chttp2/transport/parsing.cc +170 -91
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +11 -11
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
- data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/varint.h +13 -8
- data/src/core/ext/transport/chttp2/transport/writing.cc +150 -183
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -5
- data/src/core/ext/transport/inproc/inproc_transport.cc +237 -323
- data/src/core/ext/transport/inproc/inproc_transport.h +4 -5
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +117 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +502 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +569 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +60 -341
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +280 -1355
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +159 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +64 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +189 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +128 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +106 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +101 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +106 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +613 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +107 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +51 -0
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +30 -4
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +54 -17
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +143 -116
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +730 -385
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +241 -199
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1360 -663
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +49 -28
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +213 -90
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +321 -271
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1776 -826
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +20 -7
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +47 -23
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +60 -27
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +277 -98
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +299 -0
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1437 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +74 -53
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +383 -189
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +21 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +50 -24
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +215 -176
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1179 -583
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +105 -45
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +554 -166
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +19 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +43 -23
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +16 -22
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +46 -100
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +159 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +145 -117
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +821 -409
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +141 -92
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +773 -348
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +62 -30
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +204 -125
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1068 -398
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +17 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +33 -16
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +27 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +92 -48
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +22 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +80 -33
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +26 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +98 -48
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +51 -25
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +51 -35
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +207 -108
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +74 -55
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +374 -189
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +70 -53
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +378 -187
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +19 -6
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +39 -20
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +122 -71
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +660 -259
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +104 -79
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +589 -300
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +31 -16
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +109 -48
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +27 -10
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +98 -39
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +140 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +82 -61
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +446 -234
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +86 -65
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +443 -236
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +139 -103
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +649 -293
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +45 -41
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +255 -165
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +706 -570
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +4125 -1898
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +38 -19
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +161 -71
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +241 -0
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +1191 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +92 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +107 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +27 -13
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +86 -45
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +138 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +254 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +98 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +221 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +33 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +43 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +226 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +150 -0
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +17 -4
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +39 -23
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +45 -28
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +208 -111
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +51 -36
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +273 -131
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +71 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +237 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +26 -13
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +91 -42
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +292 -224
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1679 -733
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +168 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +9 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +6 -3
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +107 -60
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +607 -234
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +41 -26
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +169 -86
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +126 -83
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +651 -262
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +168 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +15 -2
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +26 -14
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +206 -72
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +1095 -255
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +31 -17
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +116 -61
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +74 -57
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +368 -185
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +116 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +34 -18
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +140 -80
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +230 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +28 -14
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +108 -56
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +55 -30
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +20 -7
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +53 -26
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +19 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +43 -23
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +35 -20
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +130 -68
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +31 -17
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +132 -64
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +26 -12
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +94 -52
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +37 -22
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +163 -82
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +50 -31
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -144
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +53 -36
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +256 -130
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +213 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +9 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +3 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +143 -0
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +23 -9
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +71 -35
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +30 -15
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -51
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +26 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +41 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +19 -6
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +45 -18
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +131 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +22 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +23 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +154 -125
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +765 -381
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +158 -126
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +844 -401
- data/src/core/ext/upb-generated/google/api/http.upb.c +43 -28
- data/src/core/ext/upb-generated/google/api/http.upb.h +229 -114
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +115 -0
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +18 -5
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +43 -21
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +374 -282
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2199 -1029
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +18 -5
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +41 -19
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +15 -2
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +26 -14
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +47 -31
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +190 -92
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +18 -5
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +41 -19
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +57 -36
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +277 -148
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +21 -8
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +57 -29
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +335 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +32 -18
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +108 -47
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +135 -107
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +726 -358
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +27 -12
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +85 -40
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +22 -8
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +65 -34
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +81 -61
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +435 -237
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +34 -19
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +124 -62
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +792 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +75 -13
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +206 -56
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -5
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +59 -17
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +21 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +16 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +31 -5
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +61 -19
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +30 -4
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +54 -17
- data/src/core/ext/upb-generated/validate/validate.upb.c +406 -310
- data/src/core/ext/upb-generated/validate/validate.upb.h +2822 -1164
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +290 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +112 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +46 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +64 -17
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +191 -67
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +103 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +17 -4
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +35 -18
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +30 -16
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +107 -54
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +25 -11
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +58 -29
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +107 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +22 -9
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +60 -29
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +33 -19
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +139 -69
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +22 -9
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +63 -29
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +36 -21
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +106 -45
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +113 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +207 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +914 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +151 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +226 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +20 -7
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +47 -23
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +75 -327
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +16 -101
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +10 -8
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +10 -13
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +120 -150
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +46 -46
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +253 -280
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +55 -55
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +60 -62
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +387 -424
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +76 -76
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +16 -18
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +25 -23
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
- data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +17 -32
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +22 -22
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +17 -19
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +203 -246
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +73 -73
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +140 -116
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +26 -16
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +16 -19
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +24 -43
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +4 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +23 -51
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +43 -43
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +179 -187
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +30 -25
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +16 -19
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +254 -254
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +53 -43
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +14 -16
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +16 -20
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +16 -18
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +26 -28
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +15 -18
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +20 -28
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +13 -13
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +21 -33
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +19 -19
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +20 -30
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +16 -18
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +180 -165
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +24 -19
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +155 -166
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +22 -22
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +21 -23
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +46 -42
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +19 -35
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +25 -25
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +19 -37
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +28 -28
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +194 -0
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +75 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -85
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +7 -12
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +874 -917
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +170 -160
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +54 -48
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +199 -0
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +90 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +17 -21
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +61 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +17 -18
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +19 -29
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +20 -26
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +80 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +19 -20
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +405 -410
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +63 -58
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +17 -13
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +174 -157
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +24 -19
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +21 -27
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +219 -216
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +24 -19
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +16 -18
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +162 -107
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +57 -22
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +18 -22
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +125 -135
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +15 -23
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +13 -13
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +17 -21
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +17 -19
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +17 -19
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +17 -19
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +38 -43
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +17 -21
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +16 -21
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +18 -24
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +15 -29
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +22 -22
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +16 -26
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +12 -10
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +14 -19
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +13 -19
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +13 -16
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +7 -7
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +5 -14
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
- data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +5 -10
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +96 -151
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +5 -10
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +5 -10
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +5 -16
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +5 -10
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +5 -26
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +6 -11
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
- data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +6 -15
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +7 -12
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +6 -6
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +6 -11
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +6 -11
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +8 -57
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +70 -70
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +6 -17
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +13 -13
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +7 -12
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +9 -16
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +6 -13
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +8 -13
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +8 -15
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +8 -13
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +7 -12
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +4 -4
- data/src/core/ext/xds/certificate_provider_store.cc +75 -3
- data/src/core/ext/xds/certificate_provider_store.h +28 -2
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +20 -14
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +11 -3
- data/src/core/ext/xds/upb_utils.h +45 -0
- data/src/core/ext/xds/xds_api.cc +329 -3648
- data/src/core/ext/xds/xds_api.h +78 -630
- data/src/core/ext/xds/xds_bootstrap.cc +10 -443
- data/src/core/ext/xds/xds_bootstrap.h +44 -81
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +361 -0
- data/src/core/ext/xds/xds_bootstrap_grpc.h +184 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +36 -25
- data/src/core/ext/xds/xds_certificate_provider.h +35 -3
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +27 -21
- data/src/core/ext/xds/xds_channel_stack_modifier.h +17 -4
- data/src/core/ext/xds/xds_client.cc +1278 -2037
- data/src/core/ext/xds/xds_client.h +158 -197
- data/src/core/ext/xds/xds_client_grpc.cc +210 -0
- data/src/core/ext/xds/xds_client_grpc.h +79 -0
- data/src/core/ext/xds/xds_client_stats.cc +18 -19
- data/src/core/ext/xds/xds_client_stats.h +9 -7
- data/src/core/ext/xds/xds_cluster.cc +659 -0
- data/src/core/ext/xds/xds_cluster.h +116 -0
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +152 -0
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +92 -0
- data/src/core/ext/xds/xds_common_types.cc +501 -0
- data/src/core/ext/xds/xds_common_types.h +108 -0
- data/src/core/ext/xds/xds_endpoint.cc +468 -0
- data/src/core/ext/xds/xds_endpoint.h +139 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +67 -59
- data/src/core/ext/xds/xds_http_fault_filter.h +18 -24
- data/src/core/ext/xds/xds_http_filters.cc +66 -66
- data/src/core/ext/xds/xds_http_filters.h +72 -24
- data/src/core/ext/xds/xds_http_rbac_filter.cc +505 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +58 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +243 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +71 -0
- data/src/core/ext/xds/xds_listener.cc +1144 -0
- data/src/core/ext/xds/xds_listener.h +224 -0
- data/src/core/ext/xds/xds_resource_type.h +104 -0
- data/src/core/ext/xds/xds_resource_type_impl.h +86 -0
- data/src/core/ext/xds/xds_route_config.cc +1166 -0
- data/src/core/ext/xds/xds_route_config.h +241 -0
- data/src/core/ext/xds/xds_routing.cc +264 -0
- data/src/core/ext/xds/xds_routing.h +106 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +1155 -324
- data/src/core/ext/xds/xds_transport.h +86 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +356 -0
- data/src/core/ext/xds/xds_transport_grpc.h +135 -0
- data/src/core/lib/address_utils/parse_address.cc +36 -16
- data/src/core/lib/address_utils/parse_address.h +11 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +82 -51
- data/src/core/lib/address_utils/sockaddr_utils.h +9 -19
- data/src/core/lib/avl/avl.h +476 -88
- data/src/core/lib/backoff/backoff.cc +9 -40
- data/src/core/lib/backoff/backoff.h +12 -12
- data/src/core/lib/channel/call_finalization.h +88 -0
- data/src/core/lib/channel/call_tracer.h +16 -7
- data/src/core/lib/channel/channel_args.cc +274 -48
- data/src/core/lib/channel/channel_args.h +413 -12
- data/src/core/lib/channel/channel_args_preconditioning.cc +43 -0
- data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +64 -17
- data/src/core/lib/channel/channel_stack.h +96 -14
- data/src/core/lib/channel/channel_stack_builder.cc +18 -280
- data/src/core/lib/channel/channel_stack_builder.h +112 -150
- data/src/core/lib/channel/channel_stack_builder_impl.cc +113 -0
- data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
- data/src/core/lib/channel/channel_trace.cc +12 -22
- data/src/core/lib/channel/channel_trace.h +6 -3
- data/src/core/lib/channel/channelz.cc +36 -49
- data/src/core/lib/channel/channelz.h +24 -7
- data/src/core/lib/channel/channelz_registry.cc +11 -19
- data/src/core/lib/channel/channelz_registry.h +10 -9
- data/src/core/lib/channel/connected_channel.cc +704 -48
- data/src/core/lib/channel/connected_channel.h +3 -4
- data/src/core/lib/channel/context.h +11 -0
- data/src/core/lib/channel/promise_based_filter.cc +2126 -0
- data/src/core/lib/channel/promise_based_filter.h +848 -0
- data/src/core/lib/channel/status_util.cc +29 -0
- data/src/core/lib/channel/status_util.h +9 -2
- data/src/core/lib/compression/compression.cc +26 -113
- data/src/core/lib/compression/compression_internal.cc +170 -204
- data/src/core/lib/compression/compression_internal.h +68 -72
- data/src/core/lib/compression/message_compress.cc +18 -16
- data/src/core/lib/compression/message_compress.h +4 -5
- data/src/core/lib/config/core_configuration.cc +18 -3
- data/src/core/lib/config/core_configuration.h +133 -36
- 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/debug/histogram_view.h +37 -0
- data/src/core/lib/debug/stats.cc +31 -135
- data/src/core/lib/debug/stats.h +30 -37
- data/src/core/lib/debug/stats_data.cc +290 -638
- data/src/core/lib/debug/stats_data.h +263 -527
- data/src/core/lib/debug/trace.cc +0 -2
- data/src/core/lib/debug/trace.h +15 -14
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +40 -0
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +49 -0
- data/src/core/lib/event_engine/common_closures.h +71 -0
- data/src/core/lib/event_engine/default_event_engine.cc +94 -0
- data/src/core/lib/event_engine/default_event_engine.h +49 -0
- data/src/core/lib/event_engine/default_event_engine_factory.cc +48 -0
- data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
- data/src/core/lib/event_engine/executor/executor.h +38 -0
- data/src/core/lib/event_engine/forkable.cc +101 -0
- data/src/core/lib/event_engine/forkable.h +61 -0
- data/src/core/lib/event_engine/handle_containers.h +67 -0
- data/src/core/lib/event_engine/memory_allocator.cc +74 -0
- data/src/core/lib/event_engine/poller.h +62 -0
- 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/posix_engine/event_poller_posix_default.h +33 -0
- 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 +577 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +245 -0
- 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.cc +311 -0
- data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
- data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +174 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
- 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/resolved_address.cc +41 -0
- data/src/core/lib/event_engine/slice.cc +103 -0
- data/src/core/lib/event_engine/slice_buffer.cc +50 -0
- data/src/core/lib/event_engine/socket_notifier.h +55 -0
- data/src/core/lib/event_engine/thread_pool.cc +276 -0
- data/src/core/lib/event_engine/thread_pool.h +137 -0
- data/src/core/lib/event_engine/time_util.cc +30 -0
- data/src/core/lib/event_engine/time_util.h +32 -0
- data/src/core/lib/event_engine/trace.cc +18 -0
- data/src/core/lib/event_engine/trace.h +30 -0
- data/src/core/lib/event_engine/utils.cc +44 -0
- data/src/core/lib/event_engine/utils.h +36 -0
- data/src/core/lib/event_engine/windows/iocp.cc +155 -0
- data/src/core/lib/event_engine/windows/iocp.h +69 -0
- data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
- data/src/core/lib/event_engine/windows/win_socket.h +120 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +165 -0
- data/src/core/lib/event_engine/windows/windows_engine.h +124 -0
- data/src/core/lib/experiments/config.cc +146 -0
- data/src/core/lib/experiments/config.h +43 -0
- data/src/core/lib/experiments/experiments.cc +86 -0
- data/src/core/lib/experiments/experiments.h +63 -0
- data/src/core/lib/gpr/alloc.cc +1 -9
- data/src/core/lib/gpr/cpu_linux.cc +6 -2
- data/src/core/lib/gpr/log.cc +5 -0
- data/src/core/lib/gpr/log_linux.cc +3 -4
- data/src/core/lib/gpr/log_windows.cc +0 -1
- data/src/core/lib/gpr/string.h +1 -1
- data/src/core/lib/gpr/string_util_windows.cc +3 -30
- data/src/core/lib/gpr/sync_abseil.cc +0 -14
- data/src/core/lib/gpr/sync_posix.cc +1 -14
- data/src/core/lib/gpr/time.cc +13 -10
- data/src/core/lib/gpr/time_posix.cc +6 -15
- data/src/core/lib/gpr/time_precise.h +1 -1
- data/src/core/lib/gpr/time_windows.cc +10 -7
- data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
- data/src/core/lib/gpr/tmpfile_windows.cc +5 -7
- data/src/core/lib/gpr/useful.h +58 -0
- data/src/core/lib/gprpp/bitset.h +27 -14
- data/src/core/lib/gprpp/chunked_vector.h +49 -3
- data/src/core/lib/gprpp/construct_destruct.h +1 -0
- data/src/core/lib/gprpp/cpp_impl_of.h +49 -0
- data/src/core/lib/gprpp/debug_location.h +41 -7
- data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
- data/src/core/lib/gprpp/env.h +53 -0
- data/src/core/lib/gprpp/env_linux.cc +80 -0
- data/src/core/lib/gprpp/env_posix.cc +47 -0
- data/src/core/lib/gprpp/env_windows.cc +56 -0
- data/src/core/lib/gprpp/examine_stack.h +0 -1
- data/src/core/lib/gprpp/fork.cc +17 -28
- data/src/core/lib/gprpp/fork.h +0 -8
- data/src/core/lib/gprpp/global_config.h +2 -4
- data/src/core/lib/gprpp/global_config_env.cc +16 -14
- data/src/core/lib/gprpp/global_config_env.h +5 -3
- data/src/core/lib/gprpp/global_config_generic.h +0 -4
- data/src/core/lib/gprpp/host_port.cc +2 -0
- 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/manual_constructor.h +0 -70
- data/src/core/lib/gprpp/match.h +2 -0
- data/src/core/lib/gprpp/memory.h +1 -5
- data/src/core/lib/gprpp/no_destruct.h +94 -0
- data/src/core/lib/gprpp/notification.h +67 -0
- data/src/core/lib/gprpp/orphanable.h +2 -5
- data/src/core/lib/gprpp/packed_table.h +40 -0
- data/src/core/lib/gprpp/per_cpu.h +46 -0
- data/src/core/lib/gprpp/ref_counted.h +4 -4
- data/src/core/lib/gprpp/ref_counted_ptr.h +23 -39
- data/src/core/lib/gprpp/single_set_ptr.h +87 -0
- data/src/core/lib/gprpp/sorted_pack.h +98 -0
- data/src/core/lib/gprpp/stat.h +0 -2
- data/src/core/lib/gprpp/stat_posix.cc +10 -4
- data/src/core/lib/gprpp/stat_windows.cc +3 -2
- data/src/core/lib/gprpp/status_helper.cc +75 -48
- data/src/core/lib/gprpp/status_helper.h +16 -21
- data/src/core/lib/gprpp/strerror.cc +41 -0
- data/src/core/lib/gprpp/strerror.h +29 -0
- data/src/core/lib/gprpp/sync.h +3 -1
- data/src/core/lib/gprpp/table.h +42 -2
- data/src/core/lib/gprpp/tchar.cc +49 -0
- data/src/core/lib/gprpp/tchar.h +33 -0
- data/src/core/lib/gprpp/thd.h +2 -5
- data/src/core/lib/gprpp/thd_posix.cc +4 -2
- data/src/core/lib/gprpp/thd_windows.cc +3 -2
- data/src/core/lib/gprpp/time.cc +234 -0
- data/src/core/lib/gprpp/time.h +367 -0
- data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
- data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
- data/src/core/lib/gprpp/time_util.cc +4 -0
- data/src/core/lib/gprpp/time_util.h +1 -1
- data/src/core/lib/gprpp/unique_type_name.h +104 -0
- data/src/core/lib/gprpp/validation_errors.cc +61 -0
- data/src/core/lib/gprpp/validation_errors.h +127 -0
- data/src/core/lib/gprpp/work_serializer.cc +247 -0
- data/src/core/lib/gprpp/work_serializer.h +86 -0
- data/src/core/lib/handshaker/proxy_mapper.h +53 -0
- data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
- data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
- data/src/core/lib/http/format_request.cc +62 -29
- data/src/core/lib/http/format_request.h +10 -7
- data/src/core/lib/http/httpcli.cc +313 -244
- data/src/core/lib/http/httpcli.h +234 -90
- data/src/core/lib/http/httpcli_security_connector.cc +84 -86
- data/src/core/lib/http/httpcli_ssl_credentials.h +39 -0
- data/src/core/lib/http/parser.cc +124 -65
- data/src/core/lib/http/parser.h +18 -2
- data/src/core/lib/iomgr/buffer_list.cc +110 -121
- data/src/core/lib/iomgr/buffer_list.h +68 -52
- data/src/core/lib/iomgr/call_combiner.cc +17 -40
- 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 +68 -14
- data/src/core/lib/iomgr/combiner.cc +11 -9
- data/src/core/lib/iomgr/endpoint.cc +4 -4
- data/src/core/lib/iomgr/endpoint.h +7 -6
- data/src/core/lib/iomgr/endpoint_cfstream.cc +40 -53
- data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +15 -11
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
- data/src/core/lib/iomgr/error.cc +30 -813
- data/src/core/lib/iomgr/error.h +22 -295
- data/src/core/lib/iomgr/error_cfstream.cc +0 -5
- data/src/core/lib/iomgr/ev_apple.cc +10 -9
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +88 -84
- data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +123 -109
- data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
- data/src/core/lib/iomgr/ev_posix.cc +58 -100
- data/src/core/lib/iomgr/ev_posix.h +6 -4
- data/src/core/lib/iomgr/exec_ctx.cc +14 -109
- data/src/core/lib/iomgr/exec_ctx.h +24 -66
- data/src/core/lib/iomgr/executor.cc +16 -21
- data/src/core/lib/iomgr/executor.h +1 -4
- data/src/core/lib/iomgr/fork_posix.cc +1 -0
- data/src/core/lib/iomgr/internal_errqueue.cc +40 -47
- data/src/core/lib/iomgr/internal_errqueue.h +1 -6
- data/src/core/lib/iomgr/iocp_windows.cc +10 -10
- data/src/core/lib/iomgr/iocp_windows.h +1 -1
- data/src/core/lib/iomgr/iomgr.cc +6 -2
- data/src/core/lib/iomgr/iomgr_fwd.h +26 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +4 -3
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +4 -2
- data/src/core/lib/iomgr/iomgr_windows.cc +3 -2
- data/src/core/lib/iomgr/load_file.cc +5 -9
- data/src/core/lib/iomgr/lockfree_event.cc +10 -27
- data/src/core/lib/iomgr/polling_entity.h +6 -0
- data/src/core/lib/iomgr/pollset.cc +1 -1
- data/src/core/lib/iomgr/pollset.h +5 -5
- data/src/core/lib/iomgr/pollset_set.h +1 -3
- data/src/core/lib/iomgr/pollset_windows.cc +6 -6
- data/src/core/lib/iomgr/port.h +29 -12
- data/src/core/lib/iomgr/python_util.h +2 -2
- data/src/core/lib/iomgr/resolve_address.cc +16 -22
- data/src/core/lib/iomgr/resolve_address.h +79 -46
- data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +112 -78
- data/src/core/lib/iomgr/resolve_address_posix.h +63 -0
- data/src/core/lib/iomgr/resolve_address_windows.cc +125 -81
- data/src/core/lib/iomgr/resolve_address_windows.h +63 -0
- data/src/core/lib/iomgr/resolved_address.h +39 -0
- data/src/core/lib/iomgr/sockaddr.h +2 -3
- data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +63 -0
- data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +44 -81
- data/src/core/lib/iomgr/socket_utils_posix.cc +84 -1
- data/src/core/lib/iomgr/socket_utils_posix.h +98 -6
- data/src/core/lib/iomgr/socket_windows.cc +2 -2
- data/src/core/lib/iomgr/socket_windows.h +0 -2
- data/src/core/lib/iomgr/tcp_client.cc +11 -9
- data/src/core/lib/iomgr/tcp_client.h +25 -15
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +28 -26
- data/src/core/lib/iomgr/tcp_client_posix.cc +194 -85
- data/src/core/lib/iomgr/tcp_client_posix.h +14 -12
- data/src/core/lib/iomgr/tcp_client_windows.cc +33 -35
- data/src/core/lib/iomgr/tcp_posix.cc +465 -254
- data/src/core/lib/iomgr/tcp_posix.h +4 -4
- data/src/core/lib/iomgr/tcp_server.cc +3 -4
- data/src/core/lib/iomgr/tcp_server.h +5 -4
- data/src/core/lib/iomgr/tcp_server_posix.cc +109 -101
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +21 -20
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +50 -49
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +19 -16
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_windows.cc +45 -48
- data/src/core/lib/iomgr/tcp_windows.cc +43 -46
- data/src/core/lib/iomgr/tcp_windows.h +1 -3
- data/src/core/lib/iomgr/timer.cc +2 -2
- data/src/core/lib/iomgr/timer.h +18 -13
- data/src/core/lib/iomgr/timer_generic.cc +108 -97
- data/src/core/lib/iomgr/timer_manager.cc +14 -14
- data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -34
- data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -5
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
- data/src/core/lib/json/json.h +20 -24
- data/src/core/lib/json/json_args.h +34 -0
- data/src/core/lib/json/json_channel_args.h +42 -0
- data/src/core/lib/json/json_object_loader.cc +207 -0
- data/src/core/lib/json/json_object_loader.h +620 -0
- data/src/core/lib/json/json_reader.cc +155 -75
- data/src/core/lib/json/json_util.cc +17 -37
- data/src/core/lib/json/json_util.h +18 -9
- data/src/core/lib/json/json_writer.cc +6 -1
- data/src/core/lib/load_balancing/lb_policy.cc +93 -0
- data/src/core/lib/load_balancing/lb_policy.h +439 -0
- data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
- data/src/core/lib/load_balancing/lb_policy_registry.cc +141 -0
- data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
- data/src/core/lib/load_balancing/subchannel_interface.h +133 -0
- data/src/core/lib/matchers/matchers.cc +10 -8
- data/src/core/lib/matchers/matchers.h +2 -0
- data/src/core/lib/promise/activity.cc +134 -0
- data/src/core/lib/promise/activity.h +604 -0
- data/src/core/lib/promise/arena_promise.h +230 -0
- data/src/core/lib/promise/context.h +92 -0
- data/src/core/lib/promise/detail/basic_seq.h +497 -0
- data/src/core/lib/promise/detail/promise_factory.h +235 -0
- data/src/core/lib/promise/detail/promise_like.h +85 -0
- data/src/core/lib/promise/detail/status.h +78 -0
- data/src/core/lib/promise/detail/switch.h +1455 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +50 -0
- data/src/core/lib/promise/for_each.h +129 -0
- data/src/core/lib/promise/intra_activity_waiter.h +49 -0
- data/src/core/lib/promise/latch.h +103 -0
- data/src/core/lib/promise/loop.h +138 -0
- data/src/core/lib/promise/map.h +87 -0
- 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 +79 -0
- data/src/core/lib/promise/promise.h +96 -0
- data/src/core/lib/promise/race.h +83 -0
- data/src/core/lib/promise/seq.h +106 -0
- data/src/core/lib/promise/sleep.cc +90 -0
- data/src/core/lib/promise/sleep.h +84 -0
- data/src/core/lib/promise/try_concurrently.h +341 -0
- data/src/core/lib/promise/try_seq.h +174 -0
- data/src/core/lib/resolver/resolver.cc +37 -0
- data/src/core/lib/resolver/resolver.h +138 -0
- data/src/core/lib/resolver/resolver_factory.h +77 -0
- data/src/core/lib/resolver/resolver_registry.cc +149 -0
- data/src/core/lib/resolver/resolver_registry.h +123 -0
- data/src/core/lib/resolver/server_address.cc +181 -0
- data/src/core/lib/resolver/server_address.h +145 -0
- data/src/core/lib/resource_quota/api.cc +104 -0
- data/src/core/lib/resource_quota/api.h +49 -0
- data/src/core/lib/resource_quota/arena.cc +138 -0
- data/src/core/lib/resource_quota/arena.h +252 -0
- data/src/core/lib/resource_quota/memory_quota.cc +603 -0
- data/src/core/lib/resource_quota/memory_quota.h +530 -0
- data/src/core/lib/resource_quota/periodic_update.cc +78 -0
- data/src/core/lib/resource_quota/periodic_update.h +71 -0
- data/src/core/lib/resource_quota/resource_quota.cc +33 -0
- data/src/core/lib/resource_quota/resource_quota.h +74 -0
- data/src/core/lib/resource_quota/thread_quota.cc +45 -0
- data/src/core/lib/resource_quota/thread_quota.h +61 -0
- data/src/core/lib/resource_quota/trace.cc +19 -0
- data/src/core/lib/resource_quota/trace.h +24 -0
- data/src/core/lib/security/authorization/authorization_policy_provider.h +14 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +53 -45
- data/src/core/lib/security/authorization/evaluate_args.h +9 -5
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +64 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +69 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +122 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +61 -0
- data/src/core/lib/security/authorization/matchers.cc +241 -0
- data/src/core/lib/security/authorization/matchers.h +218 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +445 -0
- data/src/core/lib/security/authorization/rbac_policy.h +178 -0
- data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +66 -0
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
- data/src/core/lib/security/context/security_context.cc +9 -4
- data/src/core/lib/security/context/security_context.h +33 -4
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +18 -10
- data/src/core/lib/security/credentials/alts/alts_credentials.h +18 -4
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
- data/src/core/lib/security/credentials/call_creds_util.cc +97 -0
- data/src/core/lib/security/credentials/call_creds_util.h +43 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +103 -0
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +80 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +32 -91
- data/src/core/lib/security/credentials/composite/composite_credentials.h +42 -16
- data/src/core/lib/security/credentials/credentials.cc +6 -11
- data/src/core/lib/security/credentials/credentials.h +106 -99
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +249 -107
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +19 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +13 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +137 -103
- data/src/core/lib/security/credentials/external/external_account_credentials.h +16 -9
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +29 -27
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +76 -45
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +11 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +43 -43
- data/src/core/lib/security/credentials/fake/fake_credentials.h +35 -26
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +6 -8
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +118 -80
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +20 -7
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +32 -30
- data/src/core/lib/security/credentials/iam/iam_credentials.h +25 -9
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +35 -26
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +61 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +21 -12
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +46 -55
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +30 -12
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +96 -61
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +6 -4
- data/src/core/lib/security/credentials/local/local_credentials.cc +19 -13
- data/src/core/lib/security/credentials/local/local_credentials.h +19 -3
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +214 -222
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +81 -34
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +104 -156
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +80 -27
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +31 -35
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +29 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +21 -29
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +13 -14
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +75 -58
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +73 -14
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +241 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +168 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +37 -92
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +73 -149
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +59 -42
- data/src/core/lib/security/credentials/tls/tls_credentials.h +13 -4
- data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -1
- data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +81 -89
- data/src/core/lib/security/credentials/xds/xds_credentials.h +53 -8
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +46 -45
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +9 -6
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +58 -70
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +3 -5
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +23 -24
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +34 -27
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
- data/src/core/lib/security/security_connector/load_system_roots_supported.cc +175 -0
- data/src/core/lib/security/security_connector/load_system_roots_supported.h +46 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +52 -40
- data/src/core/lib/security/security_connector/local/local_security_connector.h +7 -3
- data/src/core/lib/security/security_connector/security_connector.cc +22 -32
- data/src/core/lib/security/security_connector/security_connector.h +49 -31
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +39 -34
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +54 -40
- data/src/core/lib/security/security_connector/ssl_utils.h +23 -24
- data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +391 -230
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +97 -54
- data/src/core/lib/security/transport/auth_filters.h +45 -5
- data/src/core/lib/security/transport/client_auth_filter.cc +122 -368
- data/src/core/lib/security/transport/secure_endpoint.cc +282 -158
- data/src/core/lib/security/transport/secure_endpoint.h +5 -4
- data/src/core/lib/security/transport/security_handshaker.cc +123 -92
- data/src/core/lib/security/transport/security_handshaker.h +7 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +87 -58
- data/src/core/lib/security/transport/tsi_error.cc +6 -3
- data/src/core/lib/security/util/json_util.cc +7 -7
- data/src/core/lib/security/util/json_util.h +0 -2
- data/src/core/lib/service_config/service_config.h +89 -0
- data/src/core/lib/service_config/service_config_call_data.h +76 -0
- data/src/core/lib/service_config/service_config_impl.cc +191 -0
- data/src/core/lib/service_config/service_config_impl.h +125 -0
- data/src/core/lib/service_config/service_config_parser.cc +81 -0
- data/src/core/lib/service_config/service_config_parser.h +105 -0
- data/src/core/lib/slice/b64.cc +2 -2
- data/src/core/lib/slice/b64.h +2 -0
- data/src/core/lib/slice/percent_encoding.cc +35 -97
- data/src/core/lib/slice/percent_encoding.h +4 -16
- data/src/core/lib/slice/slice.cc +94 -184
- data/src/core/lib/slice/slice.h +402 -0
- data/src/core/lib/slice/slice_buffer.cc +92 -33
- data/src/core/lib/slice/slice_buffer.h +137 -0
- data/src/core/lib/slice/slice_internal.h +22 -48
- data/src/core/lib/slice/slice_refcount.h +32 -93
- data/src/core/lib/slice/slice_string_helpers.cc +0 -16
- data/src/core/lib/slice/slice_string_helpers.h +1 -8
- data/src/core/lib/surface/builtins.cc +11 -6
- data/src/core/lib/surface/byte_buffer.cc +9 -4
- data/src/core/lib/surface/byte_buffer_reader.cc +7 -7
- data/src/core/lib/surface/call.cc +2324 -1337
- data/src/core/lib/surface/call.h +69 -21
- data/src/core/lib/surface/call_details.cc +6 -6
- data/src/core/lib/surface/call_log_batch.cc +7 -1
- data/src/core/lib/surface/call_test_only.h +4 -1
- 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 +230 -328
- data/src/core/lib/surface/channel.h +110 -74
- data/src/core/lib/surface/channel_init.cc +2 -3
- data/src/core/lib/surface/channel_init.h +4 -6
- data/src/core/lib/surface/channel_ping.cc +9 -3
- data/src/core/lib/surface/channel_stack_type.cc +4 -2
- data/src/core/lib/surface/channel_stack_type.h +2 -2
- data/src/core/lib/surface/completion_queue.cc +76 -94
- data/src/core/lib/surface/completion_queue.h +8 -6
- data/src/core/lib/surface/completion_queue_factory.cc +6 -0
- data/src/core/lib/surface/completion_queue_factory.h +1 -3
- data/src/core/lib/surface/event_string.cc +1 -7
- data/src/core/lib/surface/event_string.h +1 -1
- data/src/core/lib/surface/init.cc +87 -78
- data/src/core/lib/surface/init.h +0 -10
- data/src/core/lib/surface/init_internally.cc +24 -0
- data/src/core/lib/surface/init_internally.h +36 -0
- data/src/core/lib/surface/lame_client.cc +69 -107
- data/src/core/lib/surface/lame_client.h +41 -3
- data/src/core/lib/surface/metadata_array.cc +2 -0
- data/src/core/lib/surface/server.cc +153 -206
- data/src/core/lib/surface/server.h +64 -36
- data/src/core/lib/surface/validate_metadata.cc +17 -31
- data/src/core/lib/surface/validate_metadata.h +3 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +11 -12
- data/src/core/lib/transport/bdp_estimator.h +4 -5
- data/src/core/lib/transport/connectivity_state.cc +7 -6
- data/src/core/lib/transport/connectivity_state.h +3 -4
- data/src/core/lib/transport/error_utils.cc +45 -65
- data/src/core/lib/transport/error_utils.h +10 -5
- data/src/core/lib/transport/handshaker.cc +225 -0
- data/src/core/lib/transport/handshaker.h +167 -0
- data/src/core/lib/transport/handshaker_factory.h +74 -0
- data/src/core/lib/transport/handshaker_registry.cc +61 -0
- data/src/core/lib/transport/handshaker_registry.h +69 -0
- data/src/core/lib/transport/http_connect_handshaker.cc +400 -0
- data/src/core/lib/transport/http_connect_handshaker.h +42 -0
- data/src/core/lib/transport/metadata_batch.cc +266 -69
- data/src/core/lib/transport/metadata_batch.h +1108 -837
- data/src/core/lib/transport/parsed_metadata.cc +35 -0
- data/src/core/lib/transport/parsed_metadata.h +239 -93
- data/src/core/lib/transport/pid_controller.cc +4 -4
- data/src/core/lib/transport/status_conversion.cc +3 -3
- data/src/core/lib/transport/status_conversion.h +3 -3
- data/src/core/lib/transport/tcp_connect_handshaker.cc +246 -0
- data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
- data/src/core/lib/transport/timeout_encoding.cc +203 -70
- data/src/core/lib/transport/timeout_encoding.h +44 -10
- data/src/core/lib/transport/transport.cc +82 -58
- data/src/core/lib/transport/transport.h +154 -35
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +24 -0
- data/src/core/lib/transport/transport_op_string.cc +24 -66
- data/src/core/lib/uri/uri_parser.cc +248 -66
- data/src/core/lib/uri/uri_parser.h +39 -25
- data/src/core/plugin_registry/grpc_plugin_registry.cc +56 -140
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +61 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +76 -52
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +9 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +43 -28
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +4 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -2
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
- 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 +14 -6
- data/src/core/tsi/fake_transport_security.cc +69 -34
- data/src/core/tsi/fake_transport_security.h +6 -0
- data/src/core/tsi/local_transport_security.cc +24 -28
- data/src/core/tsi/local_transport_security.h +1 -4
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +145 -0
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +3 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +13 -6
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +8 -2
- data/src/core/tsi/ssl_transport_security.cc +249 -68
- data/src/core/tsi/ssl_transport_security.h +47 -8
- data/src/core/tsi/transport_security.cc +18 -6
- data/src/core/tsi/transport_security.h +2 -1
- data/src/core/tsi/transport_security_grpc.cc +3 -2
- data/src/core/tsi/transport_security_grpc.h +5 -2
- data/src/core/tsi/transport_security_interface.h +19 -5
- data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -0
- data/src/ruby/ext/grpc/extconf.rb +61 -21
- data/src/ruby/ext/grpc/rb_channel.c +5 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +26 -36
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +40 -55
- data/src/ruby/ext/grpc/rb_loader.c +6 -2
- data/src/ruby/ext/grpc/rb_server.c +7 -4
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
- data/src/ruby/lib/grpc/grpc.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +1 -0
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
- data/src/ruby/pb/test/client.rb +769 -0
- data/src/ruby/pb/test/server.rb +252 -0
- data/src/ruby/pb/test/xds_client.rb +415 -0
- data/src/ruby/spec/channel_spec.rb +5 -43
- data/src/ruby/spec/generic/active_call_spec.rb +12 -3
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
- data/src/ruby/spec/user_agent_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +102 -92
- data/third_party/abseil-cpp/absl/base/attributes.h +112 -52
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +245 -74
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +50 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +11 -1
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +68 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -4
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +22 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +15 -6
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- 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/abseil-cpp/absl/container/fixed_array.h +2 -5
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +510 -0
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +118 -99
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +77 -113
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +62 -85
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +417 -431
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +18 -8
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +724 -262
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -11
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +7 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +13 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +236 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +33 -10
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +35 -4
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +7 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +60 -7
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +6 -2
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
- data/third_party/abseil-cpp/absl/hash/hash.h +104 -8
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +297 -51
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +123 -0
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +50 -0
- data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
- data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
- data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +7 -12
- data/third_party/abseil-cpp/absl/numeric/int128.h +148 -75
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
- data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +93 -0
- data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.h +130 -0
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +245 -0
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
- data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
- data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
- data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +95 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +269 -0
- data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
- data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +161 -0
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
- data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
- data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
- data/third_party/abseil-cpp/absl/random/internal/randen.h +96 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +225 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +264 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +165 -0
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
- data/third_party/abseil-cpp/absl/random/internal/traits.h +149 -0
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +96 -0
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +256 -0
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +261 -0
- data/third_party/abseil-cpp/absl/random/random.h +189 -0
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +111 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +272 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +22 -5
- data/third_party/abseil-cpp/absl/status/status.cc +183 -19
- data/third_party/abseil-cpp/absl/status/status.h +41 -27
- data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +40 -24
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
- data/third_party/abseil-cpp/absl/strings/cord.cc +469 -1094
- data/third_party/abseil-cpp/absl/strings/cord.h +392 -144
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +23 -29
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +208 -96
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1228 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +924 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +187 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +267 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +69 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +212 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +62 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +60 -19
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +48 -172
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +418 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +88 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +123 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +9 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +39 -8
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +10 -11
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +41 -20
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +28 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.h +60 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
- data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
- data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +18 -34
- data/third_party/abseil-cpp/absl/strings/string_view.h +123 -41
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
- data/third_party/abseil-cpp/absl/strings/substitute.h +109 -76
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -26
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +20 -12
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
- data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
- data/third_party/abseil-cpp/absl/time/time.h +82 -47
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +5 -4
- data/third_party/boringssl-with-bazel/err_data.c +681 -677
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +28 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
- data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +971 -253
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +0 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -13
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +29 -11
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +12 -43
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
- data/third_party/cares/cares/include/ares.h +742 -0
- data/third_party/cares/cares/include/ares_dns.h +112 -0
- data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
- data/third_party/cares/cares/include/ares_version.h +24 -0
- data/third_party/cares/cares/src/lib/ares__close_sockets.c +61 -0
- data/third_party/cares/cares/src/lib/ares__get_hostent.c +260 -0
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
- data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
- data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_android.c +444 -0
- data/third_party/cares/cares/src/lib/ares_android.h +27 -0
- data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_create_query.c +197 -0
- data/third_party/cares/cares/src/lib/ares_data.c +240 -0
- data/third_party/cares/cares/src/lib/ares_data.h +74 -0
- data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_expand_name.c +300 -0
- data/third_party/cares/cares/src/lib/ares_expand_string.c +67 -0
- data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_free_hostent.c +43 -0
- data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
- data/third_party/cares/cares/src/lib/ares_getenv.c +28 -0
- data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
- data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +287 -0
- data/third_party/cares/cares/src/lib/ares_gethostbyname.c +534 -0
- data/third_party/cares/cares/src/lib/ares_getnameinfo.c +447 -0
- data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
- data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
- data/third_party/cares/cares/src/lib/ares_init.c +2654 -0
- data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
- data/third_party/cares/cares/src/lib/ares_ipv6.h +85 -0
- data/third_party/cares/cares/src/lib/ares_library_init.c +200 -0
- data/third_party/cares/cares/src/lib/ares_library_init.h +43 -0
- data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
- data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
- data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
- data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
- data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
- data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
- data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
- data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +164 -0
- data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +183 -0
- data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +177 -0
- data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +228 -0
- data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
- data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +168 -0
- data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +214 -0
- data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
- data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
- data/third_party/cares/cares/src/lib/ares_private.h +423 -0
- data/third_party/cares/cares/src/lib/ares_process.c +1548 -0
- data/third_party/cares/cares/src/lib/ares_query.c +180 -0
- data/third_party/cares/cares/src/lib/ares_search.c +321 -0
- data/third_party/cares/cares/src/lib/ares_send.c +131 -0
- data/third_party/cares/cares/src/lib/ares_setup.h +220 -0
- data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
- data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
- data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
- data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
- data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_strsplit.c +178 -0
- data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
- data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
- data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
- data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
- data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
- data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
- data/third_party/cares/cares/src/lib/config-dos.h +115 -0
- data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
- data/third_party/cares/cares/src/lib/inet_net_pton.c +444 -0
- data/third_party/cares/cares/src/lib/inet_ntop.c +201 -0
- data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
- data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
- data/third_party/upb/third_party/utf8_range/naive.c +92 -0
- data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
- data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
- data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
- data/third_party/upb/upb/arena.c +277 -0
- data/third_party/upb/upb/arena.h +225 -0
- data/third_party/upb/upb/array.c +114 -0
- data/third_party/upb/upb/array.h +83 -0
- data/third_party/upb/upb/collections.h +36 -0
- data/third_party/upb/upb/decode.c +832 -382
- data/third_party/upb/upb/decode.h +44 -17
- data/third_party/upb/upb/decode_fast.c +304 -302
- data/third_party/upb/upb/decode_fast.h +18 -18
- data/third_party/upb/upb/def.c +2083 -982
- data/third_party/upb/upb/def.h +339 -260
- data/third_party/upb/upb/def.hpp +144 -171
- data/third_party/upb/upb/encode.c +287 -185
- data/third_party/upb/upb/encode.h +24 -16
- data/third_party/upb/upb/extension_registry.c +93 -0
- data/third_party/upb/upb/extension_registry.h +84 -0
- data/third_party/upb/upb/internal/decode.h +211 -0
- data/third_party/upb/upb/internal/table.h +385 -0
- data/third_party/upb/upb/internal/upb.h +68 -0
- data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
- data/third_party/upb/upb/json_decode.c +1512 -0
- data/third_party/upb/upb/json_decode.h +47 -0
- data/third_party/upb/upb/json_encode.c +780 -0
- data/third_party/upb/upb/json_encode.h +65 -0
- data/third_party/upb/upb/map.c +108 -0
- data/third_party/upb/upb/map.h +117 -0
- data/third_party/upb/upb/message_value.h +66 -0
- data/third_party/upb/upb/mini_table.c +1147 -0
- data/third_party/upb/upb/mini_table.h +189 -0
- data/third_party/upb/upb/mini_table.hpp +112 -0
- data/third_party/upb/upb/msg.c +132 -161
- data/third_party/upb/upb/msg.h +18 -55
- data/third_party/upb/upb/msg_internal.h +404 -254
- data/third_party/upb/upb/port_def.inc +10 -1
- data/third_party/upb/upb/port_undef.inc +2 -0
- data/third_party/upb/upb/reflection.c +203 -280
- data/third_party/upb/upb/reflection.h +40 -126
- data/third_party/upb/upb/reflection.hpp +6 -6
- data/third_party/upb/upb/status.c +86 -0
- data/third_party/upb/upb/status.h +66 -0
- data/third_party/upb/upb/table.c +233 -149
- data/third_party/upb/upb/table_internal.h +9 -324
- data/third_party/upb/upb/text_encode.c +116 -92
- data/third_party/upb/upb/text_encode.h +10 -10
- data/third_party/upb/upb/upb.c +34 -273
- data/third_party/upb/upb/upb.h +79 -262
- data/third_party/upb/upb/upb.hpp +31 -28
- data/third_party/xxhash/xxhash.h +607 -352
- data/third_party/zlib/compress.c +3 -3
- data/third_party/zlib/crc32.c +975 -292
- data/third_party/zlib/crc32.h +9441 -436
- data/third_party/zlib/deflate.c +183 -129
- data/third_party/zlib/deflate.h +12 -15
- data/third_party/zlib/gzguts.h +3 -2
- data/third_party/zlib/gzlib.c +6 -4
- data/third_party/zlib/gzread.c +8 -12
- data/third_party/zlib/gzwrite.c +26 -14
- data/third_party/zlib/infback.c +12 -8
- data/third_party/zlib/inffast.c +14 -14
- data/third_party/zlib/inflate.c +44 -10
- data/third_party/zlib/inflate.h +3 -2
- data/third_party/zlib/inftrees.c +3 -3
- data/third_party/zlib/inftrees.h +1 -1
- data/third_party/zlib/trees.c +85 -107
- data/third_party/zlib/uncompr.c +2 -2
- data/third_party/zlib/zconf.h +16 -3
- data/third_party/zlib/zlib.h +129 -106
- data/third_party/zlib/zutil.c +11 -9
- data/third_party/zlib/zutil.h +13 -9
- metadata +713 -295
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +0 -392
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -42
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -44
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -83
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +0 -60
- data/src/core/ext/filters/client_channel/lb_policy.cc +0 -131
- data/src/core/ext/filters/client_channel/lb_policy.h +0 -425
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -48
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -185
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -65
- data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -89
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -50
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +0 -28
- data/src/core/ext/filters/client_channel/resolver.cc +0 -87
- data/src/core/ext/filters/client_channel/resolver.h +0 -136
- data/src/core/ext/filters/client_channel/resolver_factory.h +0 -75
- data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -195
- data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -189
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +0 -99
- data/src/core/ext/filters/client_channel/server_address.cc +0 -170
- data/src/core/ext/filters/client_channel/server_address.h +0 -144
- data/src/core/ext/filters/client_channel/subchannel_interface.h +0 -130
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -264
- data/src/core/ext/filters/client_idle/idle_filter_state.cc +0 -96
- data/src/core/ext/filters/client_idle/idle_filter_state.h +0 -66
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -181
- data/src/core/ext/filters/fault_injection/service_config_parser.h +0 -85
- data/src/core/ext/filters/max_age/max_age_filter.cc +0 -560
- data/src/core/ext/filters/max_age/max_age_filter.h +0 -26
- data/src/core/ext/service_config/service_config.cc +0 -227
- data/src/core/ext/service_config/service_config.h +0 -127
- data/src/core/ext/service_config/service_config_call_data.h +0 -72
- data/src/core/ext/service_config/service_config_parser.cc +0 -89
- data/src/core/ext/service_config/service_config_parser.h +0 -97
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -119
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -95
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -189
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -53
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -83
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -125
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
- data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
- data/src/core/ext/transport/chttp2/transport/hpack_utils.h +0 -30
- data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +0 -27
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -62
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -27
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -62
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -27
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -62
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -27
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -62
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -27
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -62
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +0 -72
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +0 -73
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +0 -72
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +0 -80
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +0 -74
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +0 -35
- data/src/core/ext/xds/certificate_provider_factory.h +0 -61
- data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
- data/src/core/ext/xds/certificate_provider_registry.h +0 -57
- data/src/core/lib/avl/avl.cc +0 -306
- data/src/core/lib/channel/handshaker.cc +0 -222
- data/src/core/lib/channel/handshaker.h +0 -161
- data/src/core/lib/channel/handshaker_factory.h +0 -50
- data/src/core/lib/channel/handshaker_registry.cc +0 -50
- data/src/core/lib/channel/handshaker_registry.h +0 -71
- data/src/core/lib/compression/algorithm_metadata.h +0 -62
- data/src/core/lib/compression/compression_args.cc +0 -138
- data/src/core/lib/compression/compression_args.h +0 -56
- data/src/core/lib/compression/stream_compression.cc +0 -81
- data/src/core/lib/compression/stream_compression.h +0 -117
- data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
- data/src/core/lib/compression/stream_compression_gzip.h +0 -28
- data/src/core/lib/compression/stream_compression_identity.cc +0 -91
- data/src/core/lib/compression/stream_compression_identity.h +0 -29
- data/src/core/lib/event_engine/endpoint_config.cc +0 -45
- data/src/core/lib/event_engine/endpoint_config_internal.h +0 -42
- data/src/core/lib/event_engine/event_engine.cc +0 -50
- data/src/core/lib/event_engine/sockaddr.cc +0 -40
- data/src/core/lib/event_engine/sockaddr.h +0 -44
- data/src/core/lib/gpr/env.h +0 -40
- data/src/core/lib/gpr/env_linux.cc +0 -75
- data/src/core/lib/gpr/env_posix.cc +0 -46
- data/src/core/lib/gpr/env_windows.cc +0 -74
- 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/string_windows.h +0 -32
- data/src/core/lib/gpr/tls.h +0 -151
- data/src/core/lib/gprpp/arena.cc +0 -104
- data/src/core/lib/gprpp/arena.h +0 -131
- data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +0 -32
- data/src/core/lib/iomgr/error_internal.h +0 -66
- data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1654
- data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
- data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
- data/src/core/lib/iomgr/event_engine/closure.h +0 -42
- data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -173
- data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
- data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -104
- data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
- data/src/core/lib/iomgr/event_engine/pollset.cc +0 -88
- data/src/core/lib/iomgr/event_engine/pollset.h +0 -25
- data/src/core/lib/iomgr/event_engine/promise.h +0 -51
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -41
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -35
- data/src/core/lib/iomgr/event_engine/resolver.cc +0 -114
- data/src/core/lib/iomgr/event_engine/tcp.cc +0 -293
- data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
- data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
- data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
- data/src/core/lib/iomgr/executor/threadpool.h +0 -150
- data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
- data/src/core/lib/iomgr/iomgr_custom.h +0 -49
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
- data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
- data/src/core/lib/iomgr/pollset_custom.cc +0 -105
- data/src/core/lib/iomgr/pollset_custom.h +0 -37
- data/src/core/lib/iomgr/pollset_set_custom.cc +0 -47
- data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
- data/src/core/lib/iomgr/resolve_address_custom.cc +0 -169
- data/src/core/lib/iomgr/resolve_address_custom.h +0 -44
- data/src/core/lib/iomgr/resource_quota.cc +0 -1106
- data/src/core/lib/iomgr/resource_quota.h +0 -226
- data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
- data/src/core/lib/iomgr/tcp_client_custom.cc +0 -152
- data/src/core/lib/iomgr/tcp_custom.cc +0 -377
- data/src/core/lib/iomgr/tcp_custom.h +0 -86
- data/src/core/lib/iomgr/tcp_server_custom.cc +0 -467
- data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
- data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
- data/src/core/lib/iomgr/timer_custom.cc +0 -96
- data/src/core/lib/iomgr/timer_custom.h +0 -43
- data/src/core/lib/iomgr/work_serializer.cc +0 -155
- data/src/core/lib/iomgr/work_serializer.h +0 -81
- data/src/core/lib/profiling/basic_timers.cc +0 -295
- data/src/core/lib/profiling/stap_timers.cc +0 -50
- data/src/core/lib/profiling/timers.h +0 -94
- data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +0 -171
- data/src/core/lib/security/authorization/sdk_server_authz_filter.h +0 -67
- data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +0 -171
- data/src/core/lib/security/security_connector/load_system_roots_linux.h +0 -46
- data/src/core/lib/slice/slice_api.cc +0 -39
- data/src/core/lib/slice/slice_intern.cc +0 -367
- data/src/core/lib/slice/slice_refcount.cc +0 -17
- data/src/core/lib/slice/slice_refcount_base.h +0 -173
- data/src/core/lib/slice/slice_split.cc +0 -100
- data/src/core/lib/slice/slice_split.h +0 -40
- data/src/core/lib/slice/slice_utils.h +0 -200
- data/src/core/lib/slice/static_slice.cc +0 -529
- data/src/core/lib/slice/static_slice.h +0 -331
- data/src/core/lib/surface/init_secure.cc +0 -103
- data/src/core/lib/transport/byte_stream.cc +0 -158
- data/src/core/lib/transport/byte_stream.h +0 -166
- data/src/core/lib/transport/metadata.cc +0 -714
- data/src/core/lib/transport/metadata.h +0 -449
- data/src/core/lib/transport/static_metadata.cc +0 -1117
- data/src/core/lib/transport/static_metadata.h +0 -340
- data/src/core/lib/transport/status_metadata.cc +0 -63
- data/src/core/lib/transport/status_metadata.h +0 -48
- data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +0 -93
- data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +0 -130
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +0 -111
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +0 -48
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
- data/third_party/cares/cares/ares.h +0 -670
- data/third_party/cares/cares/ares__close_sockets.c +0 -61
- data/third_party/cares/cares/ares__get_hostent.c +0 -261
- data/third_party/cares/cares/ares_create_query.c +0 -206
- data/third_party/cares/cares/ares_data.c +0 -222
- data/third_party/cares/cares/ares_data.h +0 -72
- data/third_party/cares/cares/ares_dns.h +0 -103
- data/third_party/cares/cares/ares_expand_name.c +0 -209
- data/third_party/cares/cares/ares_expand_string.c +0 -70
- data/third_party/cares/cares/ares_free_hostent.c +0 -41
- data/third_party/cares/cares/ares_getenv.c +0 -30
- data/third_party/cares/cares/ares_gethostbyaddr.c +0 -294
- data/third_party/cares/cares/ares_gethostbyname.c +0 -529
- data/third_party/cares/cares/ares_getnameinfo.c +0 -453
- data/third_party/cares/cares/ares_getopt.c +0 -122
- data/third_party/cares/cares/ares_getopt.h +0 -53
- data/third_party/cares/cares/ares_init.c +0 -2615
- data/third_party/cares/cares/ares_ipv6.h +0 -78
- data/third_party/cares/cares/ares_library_init.c +0 -195
- data/third_party/cares/cares/ares_library_init.h +0 -43
- data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
- data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
- data/third_party/cares/cares/ares_parse_mx_reply.c +0 -170
- data/third_party/cares/cares/ares_parse_naptr_reply.c +0 -194
- data/third_party/cares/cares/ares_parse_ns_reply.c +0 -183
- data/third_party/cares/cares/ares_parse_ptr_reply.c +0 -221
- data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
- data/third_party/cares/cares/ares_parse_srv_reply.c +0 -179
- data/third_party/cares/cares/ares_parse_txt_reply.c +0 -220
- data/third_party/cares/cares/ares_private.h +0 -382
- data/third_party/cares/cares/ares_process.c +0 -1473
- data/third_party/cares/cares/ares_query.c +0 -186
- data/third_party/cares/cares/ares_search.c +0 -323
- data/third_party/cares/cares/ares_send.c +0 -137
- data/third_party/cares/cares/ares_setup.h +0 -217
- data/third_party/cares/cares/ares_strsplit.c +0 -174
- data/third_party/cares/cares/ares_version.h +0 -24
- data/third_party/cares/cares/inet_net_pton.c +0 -450
- data/third_party/cares/cares/inet_ntop.c +0 -207
- data/third_party/upb/upb/decode_internal.h +0 -193
- data/third_party/upb/upb/upb_internal.h +0 -58
@@ -20,39 +20,73 @@
|
|
20
20
|
|
21
21
|
#include "src/core/lib/surface/call.h"
|
22
22
|
|
23
|
-
#include <
|
23
|
+
#include <inttypes.h>
|
24
24
|
#include <limits.h>
|
25
|
-
#include <stdio.h>
|
26
25
|
#include <stdlib.h>
|
27
|
-
#include <string.h>
|
28
26
|
|
27
|
+
#include <algorithm>
|
28
|
+
#include <atomic>
|
29
|
+
#include <memory>
|
30
|
+
#include <new>
|
29
31
|
#include <string>
|
32
|
+
#include <utility>
|
33
|
+
#include <vector>
|
30
34
|
|
35
|
+
#include "absl/base/thread_annotations.h"
|
36
|
+
#include "absl/cleanup/cleanup.h"
|
37
|
+
#include "absl/meta/type_traits.h"
|
38
|
+
#include "absl/status/status.h"
|
31
39
|
#include "absl/strings/str_cat.h"
|
32
40
|
#include "absl/strings/str_format.h"
|
41
|
+
#include "absl/strings/str_join.h"
|
42
|
+
#include "absl/strings/string_view.h"
|
43
|
+
#include "absl/types/variant.h"
|
33
44
|
|
45
|
+
#include <grpc/byte_buffer.h>
|
34
46
|
#include <grpc/compression.h>
|
47
|
+
#include <grpc/event_engine/event_engine.h>
|
35
48
|
#include <grpc/grpc.h>
|
49
|
+
#include <grpc/impl/codegen/gpr_types.h>
|
50
|
+
#include <grpc/impl/codegen/propagation_bits.h>
|
36
51
|
#include <grpc/slice.h>
|
52
|
+
#include <grpc/slice_buffer.h>
|
53
|
+
#include <grpc/status.h>
|
37
54
|
#include <grpc/support/alloc.h>
|
55
|
+
#include <grpc/support/atm.h>
|
38
56
|
#include <grpc/support/log.h>
|
39
57
|
#include <grpc/support/string_util.h>
|
40
58
|
|
59
|
+
#include "src/core/lib/channel/call_finalization.h"
|
41
60
|
#include "src/core/lib/channel/channel_stack.h"
|
42
|
-
#include "src/core/lib/
|
61
|
+
#include "src/core/lib/channel/channelz.h"
|
62
|
+
#include "src/core/lib/channel/context.h"
|
63
|
+
#include "src/core/lib/channel/status_util.h"
|
64
|
+
#include "src/core/lib/compression/compression_internal.h"
|
43
65
|
#include "src/core/lib/debug/stats.h"
|
66
|
+
#include "src/core/lib/debug/stats_data.h"
|
67
|
+
#include "src/core/lib/experiments/experiments.h"
|
44
68
|
#include "src/core/lib/gpr/alloc.h"
|
45
|
-
#include "src/core/lib/gpr/string.h"
|
46
69
|
#include "src/core/lib/gpr/time_precise.h"
|
47
70
|
#include "src/core/lib/gpr/useful.h"
|
48
|
-
#include "src/core/lib/gprpp/
|
49
|
-
#include "src/core/lib/gprpp/
|
71
|
+
#include "src/core/lib/gprpp/bitset.h"
|
72
|
+
#include "src/core/lib/gprpp/cpp_impl_of.h"
|
73
|
+
#include "src/core/lib/gprpp/debug_location.h"
|
50
74
|
#include "src/core/lib/gprpp/ref_counted.h"
|
51
|
-
#include "src/core/lib/
|
52
|
-
#include "src/core/lib/
|
53
|
-
#include "src/core/lib/
|
54
|
-
#include "src/core/lib/
|
55
|
-
#include "src/core/lib/
|
75
|
+
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
76
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
77
|
+
#include "src/core/lib/gprpp/sync.h"
|
78
|
+
#include "src/core/lib/iomgr/call_combiner.h"
|
79
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
80
|
+
#include "src/core/lib/iomgr/polling_entity.h"
|
81
|
+
#include "src/core/lib/promise/activity.h"
|
82
|
+
#include "src/core/lib/promise/arena_promise.h"
|
83
|
+
#include "src/core/lib/promise/context.h"
|
84
|
+
#include "src/core/lib/promise/latch.h"
|
85
|
+
#include "src/core/lib/promise/pipe.h"
|
86
|
+
#include "src/core/lib/promise/poll.h"
|
87
|
+
#include "src/core/lib/resource_quota/arena.h"
|
88
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
89
|
+
#include "src/core/lib/slice/slice_internal.h"
|
56
90
|
#include "src/core/lib/surface/api_trace.h"
|
57
91
|
#include "src/core/lib/surface/call_test_only.h"
|
58
92
|
#include "src/core/lib/surface/channel.h"
|
@@ -60,188 +94,496 @@
|
|
60
94
|
#include "src/core/lib/surface/server.h"
|
61
95
|
#include "src/core/lib/surface/validate_metadata.h"
|
62
96
|
#include "src/core/lib/transport/error_utils.h"
|
63
|
-
#include "src/core/lib/transport/
|
64
|
-
#include "src/core/lib/transport/static_metadata.h"
|
65
|
-
#include "src/core/lib/transport/status_metadata.h"
|
97
|
+
#include "src/core/lib/transport/metadata_batch.h"
|
66
98
|
#include "src/core/lib/transport/transport.h"
|
67
99
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
100
|
+
grpc_core::TraceFlag grpc_call_error_trace(false, "call_error");
|
101
|
+
grpc_core::TraceFlag grpc_compression_trace(false, "compression");
|
102
|
+
grpc_core::TraceFlag grpc_call_trace(false, "call");
|
103
|
+
grpc_core::TraceFlag grpc_call_refcount_trace(false, "call_refcount");
|
104
|
+
|
105
|
+
namespace grpc_core {
|
106
|
+
|
107
|
+
///////////////////////////////////////////////////////////////////////////////
|
108
|
+
// Call
|
109
|
+
|
110
|
+
class Call : public CppImplOf<Call, grpc_call> {
|
111
|
+
public:
|
112
|
+
Arena* arena() { return arena_; }
|
113
|
+
bool is_client() const { return is_client_; }
|
114
|
+
|
115
|
+
virtual void ContextSet(grpc_context_index elem, void* value,
|
116
|
+
void (*destroy)(void* value)) = 0;
|
117
|
+
virtual void* ContextGet(grpc_context_index elem) const = 0;
|
118
|
+
virtual bool Completed() = 0;
|
119
|
+
void CancelWithStatus(grpc_status_code status, const char* description);
|
120
|
+
virtual void CancelWithError(grpc_error_handle error) = 0;
|
121
|
+
virtual void SetCompletionQueue(grpc_completion_queue* cq) = 0;
|
122
|
+
char* GetPeer();
|
123
|
+
virtual grpc_call_error StartBatch(const grpc_op* ops, size_t nops,
|
124
|
+
void* notify_tag,
|
125
|
+
bool is_notify_tag_closure) = 0;
|
126
|
+
virtual bool failed_before_recv_message() const = 0;
|
127
|
+
virtual bool is_trailers_only() const = 0;
|
128
|
+
virtual absl::string_view GetServerAuthority() const = 0;
|
129
|
+
virtual void ExternalRef() = 0;
|
130
|
+
virtual void ExternalUnref() = 0;
|
131
|
+
virtual void InternalRef(const char* reason) = 0;
|
132
|
+
virtual void InternalUnref(const char* reason) = 0;
|
133
|
+
|
134
|
+
virtual grpc_compression_algorithm test_only_compression_algorithm() = 0;
|
135
|
+
virtual uint32_t test_only_message_flags() = 0;
|
136
|
+
virtual uint32_t test_only_encodings_accepted_by_peer() = 0;
|
137
|
+
virtual grpc_compression_algorithm compression_for_level(
|
138
|
+
grpc_compression_level level) = 0;
|
139
|
+
|
140
|
+
// This should return nullptr for the promise stack (and alternative means
|
141
|
+
// for that functionality be invented)
|
142
|
+
virtual grpc_call_stack* call_stack() = 0;
|
143
|
+
|
144
|
+
gpr_atm* peer_string_atm_ptr() { return &peer_string_; }
|
145
|
+
|
146
|
+
protected:
|
147
|
+
// The maximum number of concurrent batches possible.
|
148
|
+
// Based upon the maximum number of individually queueable ops in the batch
|
149
|
+
// api:
|
150
|
+
// - initial metadata send
|
151
|
+
// - message send
|
152
|
+
// - status/close send (depending on client/server)
|
153
|
+
// - initial metadata recv
|
154
|
+
// - message recv
|
155
|
+
// - status/close recv (depending on client/server)
|
156
|
+
static constexpr size_t kMaxConcurrentBatches = 6;
|
157
|
+
|
158
|
+
struct ParentCall {
|
159
|
+
Mutex child_list_mu;
|
160
|
+
Call* first_child ABSL_GUARDED_BY(child_list_mu) = nullptr;
|
161
|
+
};
|
162
|
+
|
163
|
+
struct ChildCall {
|
164
|
+
explicit ChildCall(Call* parent) : parent(parent) {}
|
165
|
+
Call* parent;
|
166
|
+
/** siblings: children of the same parent form a list, and this list is
|
167
|
+
protected under
|
168
|
+
parent->mu */
|
169
|
+
Call* sibling_next = nullptr;
|
170
|
+
Call* sibling_prev = nullptr;
|
171
|
+
};
|
172
|
+
|
173
|
+
Call(Arena* arena, bool is_client, Timestamp send_deadline,
|
174
|
+
RefCountedPtr<Channel> channel)
|
175
|
+
: channel_(std::move(channel)),
|
176
|
+
arena_(arena),
|
177
|
+
send_deadline_(send_deadline),
|
178
|
+
is_client_(is_client) {
|
179
|
+
GPR_DEBUG_ASSERT(arena_ != nullptr);
|
180
|
+
GPR_DEBUG_ASSERT(channel_ != nullptr);
|
181
|
+
}
|
182
|
+
virtual ~Call() = default;
|
183
|
+
|
184
|
+
void DeleteThis();
|
185
|
+
|
186
|
+
ParentCall* GetOrCreateParentCall();
|
187
|
+
ParentCall* parent_call();
|
188
|
+
Channel* channel() {
|
189
|
+
GPR_DEBUG_ASSERT(channel_ != nullptr);
|
190
|
+
return channel_.get();
|
191
|
+
}
|
192
|
+
|
193
|
+
absl::Status InitParent(Call* parent, uint32_t propagation_mask);
|
194
|
+
void PublishToParent(Call* parent);
|
195
|
+
void MaybeUnpublishFromParent();
|
196
|
+
void PropagateCancellationToChildren();
|
197
|
+
|
198
|
+
Timestamp send_deadline() const { return send_deadline_; }
|
199
|
+
void set_send_deadline(Timestamp send_deadline) {
|
200
|
+
send_deadline_ = send_deadline;
|
201
|
+
}
|
202
|
+
|
203
|
+
void ClearPeerString() { gpr_atm_rel_store(&peer_string_, 0); }
|
204
|
+
|
205
|
+
private:
|
206
|
+
RefCountedPtr<Channel> channel_;
|
207
|
+
Arena* const arena_;
|
208
|
+
std::atomic<ParentCall*> parent_call_{nullptr};
|
209
|
+
ChildCall* child_ = nullptr;
|
210
|
+
Timestamp send_deadline_;
|
211
|
+
const bool is_client_;
|
212
|
+
// flag indicating that cancellation is inherited
|
213
|
+
bool cancellation_is_inherited_ = false;
|
214
|
+
// A char* indicating the peer name.
|
215
|
+
gpr_atm peer_string_ = 0;
|
216
|
+
};
|
217
|
+
|
218
|
+
Call::ParentCall* Call::GetOrCreateParentCall() {
|
219
|
+
ParentCall* p = parent_call_.load(std::memory_order_acquire);
|
220
|
+
if (p == nullptr) {
|
221
|
+
p = arena_->New<ParentCall>();
|
222
|
+
ParentCall* expected = nullptr;
|
223
|
+
if (!parent_call_.compare_exchange_strong(expected, p,
|
224
|
+
std::memory_order_release,
|
225
|
+
std::memory_order_relaxed)) {
|
226
|
+
p->~ParentCall();
|
227
|
+
p = expected;
|
228
|
+
}
|
229
|
+
}
|
230
|
+
return p;
|
231
|
+
}
|
232
|
+
|
233
|
+
Call::ParentCall* Call::parent_call() {
|
234
|
+
return parent_call_.load(std::memory_order_acquire);
|
235
|
+
}
|
236
|
+
|
237
|
+
absl::Status Call::InitParent(Call* parent, uint32_t propagation_mask) {
|
238
|
+
child_ = arena()->New<ChildCall>(parent);
|
239
|
+
|
240
|
+
parent->InternalRef("child");
|
241
|
+
GPR_ASSERT(is_client_);
|
242
|
+
GPR_ASSERT(!parent->is_client_);
|
243
|
+
|
244
|
+
if (propagation_mask & GRPC_PROPAGATE_DEADLINE) {
|
245
|
+
send_deadline_ = std::min(send_deadline_, parent->send_deadline_);
|
114
246
|
}
|
115
|
-
|
116
|
-
|
247
|
+
/* for now GRPC_PROPAGATE_TRACING_CONTEXT *MUST* be passed with
|
248
|
+
* GRPC_PROPAGATE_STATS_CONTEXT */
|
249
|
+
/* TODO(ctiller): This should change to use the appropriate census start_op
|
250
|
+
* call. */
|
251
|
+
if (propagation_mask & GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT) {
|
252
|
+
if (0 == (propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT)) {
|
253
|
+
return absl::UnknownError(
|
254
|
+
"Census tracing propagation requested without Census context "
|
255
|
+
"propagation");
|
256
|
+
}
|
257
|
+
ContextSet(GRPC_CONTEXT_TRACING, parent->ContextGet(GRPC_CONTEXT_TRACING),
|
258
|
+
nullptr);
|
259
|
+
} else if (propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT) {
|
260
|
+
return absl::UnknownError(
|
261
|
+
"Census context propagation requested without Census tracing "
|
262
|
+
"propagation");
|
263
|
+
}
|
264
|
+
if (propagation_mask & GRPC_PROPAGATE_CANCELLATION) {
|
265
|
+
cancellation_is_inherited_ = true;
|
266
|
+
}
|
267
|
+
return absl::OkStatus();
|
268
|
+
}
|
269
|
+
|
270
|
+
void Call::PublishToParent(Call* parent) {
|
271
|
+
ChildCall* cc = child_;
|
272
|
+
ParentCall* pc = parent->GetOrCreateParentCall();
|
273
|
+
MutexLock lock(&pc->child_list_mu);
|
274
|
+
if (pc->first_child == nullptr) {
|
275
|
+
pc->first_child = this;
|
276
|
+
cc->sibling_next = cc->sibling_prev = this;
|
277
|
+
} else {
|
278
|
+
cc->sibling_next = pc->first_child;
|
279
|
+
cc->sibling_prev = pc->first_child->child_->sibling_prev;
|
280
|
+
cc->sibling_next->child_->sibling_prev =
|
281
|
+
cc->sibling_prev->child_->sibling_next = this;
|
117
282
|
}
|
118
|
-
|
283
|
+
if (parent->Completed()) {
|
284
|
+
CancelWithError(absl::CancelledError());
|
285
|
+
}
|
286
|
+
}
|
119
287
|
|
120
|
-
|
121
|
-
|
122
|
-
|
288
|
+
void Call::MaybeUnpublishFromParent() {
|
289
|
+
ChildCall* cc = child_;
|
290
|
+
if (cc == nullptr) return;
|
123
291
|
|
124
|
-
|
125
|
-
|
126
|
-
|
292
|
+
ParentCall* pc = cc->parent->parent_call();
|
293
|
+
{
|
294
|
+
MutexLock lock(&pc->child_list_mu);
|
295
|
+
if (this == pc->first_child) {
|
296
|
+
pc->first_child = cc->sibling_next;
|
297
|
+
if (this == pc->first_child) {
|
298
|
+
pc->first_child = nullptr;
|
299
|
+
}
|
300
|
+
}
|
301
|
+
cc->sibling_prev->child_->sibling_next = cc->sibling_next;
|
302
|
+
cc->sibling_next->child_->sibling_prev = cc->sibling_prev;
|
303
|
+
}
|
304
|
+
cc->parent->InternalUnref("child");
|
305
|
+
}
|
127
306
|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
307
|
+
void Call::CancelWithStatus(grpc_status_code status, const char* description) {
|
308
|
+
// copying 'description' is needed to ensure the grpc_call_cancel_with_status
|
309
|
+
// guarantee that can be short-lived.
|
310
|
+
CancelWithError(grpc_error_set_int(
|
311
|
+
grpc_error_set_str(GRPC_ERROR_CREATE(description),
|
312
|
+
StatusStrProperty::kGrpcMessage, description),
|
313
|
+
StatusIntProperty::kRpcStatus, status));
|
314
|
+
}
|
315
|
+
|
316
|
+
void Call::PropagateCancellationToChildren() {
|
317
|
+
ParentCall* pc = parent_call();
|
318
|
+
if (pc != nullptr) {
|
319
|
+
Call* child;
|
320
|
+
MutexLock lock(&pc->child_list_mu);
|
321
|
+
child = pc->first_child;
|
322
|
+
if (child != nullptr) {
|
323
|
+
do {
|
324
|
+
Call* next_child_call = child->child_->sibling_next;
|
325
|
+
if (child->cancellation_is_inherited_) {
|
326
|
+
child->InternalRef("propagate_cancel");
|
327
|
+
child->CancelWithError(absl::CancelledError());
|
328
|
+
child->InternalUnref("propagate_cancel");
|
329
|
+
}
|
330
|
+
child = next_child_call;
|
331
|
+
} while (child != pc->first_child);
|
332
|
+
}
|
333
|
+
}
|
334
|
+
}
|
335
|
+
|
336
|
+
char* Call::GetPeer() {
|
337
|
+
char* peer_string = reinterpret_cast<char*>(gpr_atm_acq_load(&peer_string_));
|
338
|
+
if (peer_string != nullptr) return gpr_strdup(peer_string);
|
339
|
+
peer_string = grpc_channel_get_target(channel_->c_ptr());
|
340
|
+
if (peer_string != nullptr) return peer_string;
|
341
|
+
return gpr_strdup("unknown");
|
342
|
+
}
|
137
343
|
|
138
|
-
|
139
|
-
|
344
|
+
void Call::DeleteThis() {
|
345
|
+
RefCountedPtr<Channel> channel = std::move(channel_);
|
346
|
+
Arena* arena = arena_;
|
347
|
+
this->~Call();
|
348
|
+
channel->UpdateCallSizeEstimate(arena->Destroy());
|
349
|
+
}
|
140
350
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
cq(args.cq),
|
145
|
-
channel(args.channel),
|
146
|
-
is_client(args.server_transport_data == nullptr),
|
147
|
-
stream_op_payload(context) {}
|
351
|
+
///////////////////////////////////////////////////////////////////////////////
|
352
|
+
// FilterStackCall
|
353
|
+
// To be removed once promise conversion is complete
|
148
354
|
|
149
|
-
|
355
|
+
class FilterStackCall final : public Call {
|
356
|
+
public:
|
357
|
+
~FilterStackCall() override {
|
150
358
|
for (int i = 0; i < GRPC_CONTEXT_COUNT; ++i) {
|
151
|
-
if (
|
152
|
-
|
359
|
+
if (context_[i].destroy) {
|
360
|
+
context_[i].destroy(context_[i].value);
|
153
361
|
}
|
154
362
|
}
|
155
|
-
gpr_free(static_cast<void*>(const_cast<char*>(
|
363
|
+
gpr_free(static_cast<void*>(const_cast<char*>(final_info_.error_string)));
|
364
|
+
}
|
365
|
+
|
366
|
+
bool Completed() override {
|
367
|
+
return gpr_atm_acq_load(&received_final_op_atm_) != 0;
|
368
|
+
}
|
369
|
+
|
370
|
+
// TODO(ctiller): return absl::StatusOr<SomeSmartPointer<Call>>?
|
371
|
+
static grpc_error_handle Create(grpc_call_create_args* args,
|
372
|
+
grpc_call** out_call);
|
373
|
+
|
374
|
+
static Call* FromTopElem(grpc_call_element* elem) {
|
375
|
+
return FromCallStack(grpc_call_stack_from_top_element(elem));
|
376
|
+
}
|
377
|
+
|
378
|
+
grpc_call_stack* call_stack() override {
|
379
|
+
return reinterpret_cast<grpc_call_stack*>(
|
380
|
+
reinterpret_cast<char*>(this) +
|
381
|
+
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(*this)));
|
382
|
+
}
|
383
|
+
|
384
|
+
grpc_call_element* call_elem(size_t idx) {
|
385
|
+
return grpc_call_stack_element(call_stack(), idx);
|
386
|
+
}
|
387
|
+
|
388
|
+
CallCombiner* call_combiner() { return &call_combiner_; }
|
389
|
+
|
390
|
+
void CancelWithError(grpc_error_handle error) override;
|
391
|
+
void SetCompletionQueue(grpc_completion_queue* cq) override;
|
392
|
+
grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
|
393
|
+
bool is_notify_tag_closure) override;
|
394
|
+
void ExternalRef() override { ext_ref_.Ref(); }
|
395
|
+
void ExternalUnref() override;
|
396
|
+
void InternalRef(const char* reason) override {
|
397
|
+
GRPC_CALL_STACK_REF(call_stack(), reason);
|
398
|
+
}
|
399
|
+
void InternalUnref(const char* reason) override {
|
400
|
+
GRPC_CALL_STACK_UNREF(call_stack(), reason);
|
401
|
+
}
|
402
|
+
|
403
|
+
void ContextSet(grpc_context_index elem, void* value,
|
404
|
+
void (*destroy)(void* value)) override;
|
405
|
+
void* ContextGet(grpc_context_index elem) const override {
|
406
|
+
return context_[elem].value;
|
156
407
|
}
|
157
408
|
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
409
|
+
grpc_compression_algorithm compression_for_level(
|
410
|
+
grpc_compression_level level) override {
|
411
|
+
return encodings_accepted_by_peer_.CompressionAlgorithmForLevel(level);
|
412
|
+
}
|
413
|
+
|
414
|
+
bool is_trailers_only() const override {
|
415
|
+
bool result = is_trailers_only_;
|
416
|
+
GPR_DEBUG_ASSERT(!result || recv_initial_metadata_.TransportSize() == 0);
|
417
|
+
return result;
|
418
|
+
}
|
419
|
+
|
420
|
+
bool failed_before_recv_message() const override {
|
421
|
+
return call_failed_before_recv_message_;
|
422
|
+
}
|
423
|
+
|
424
|
+
absl::string_view GetServerAuthority() const override {
|
425
|
+
const Slice* authority_metadata =
|
426
|
+
recv_initial_metadata_.get_pointer(HttpAuthorityMetadata());
|
427
|
+
if (authority_metadata == nullptr) return "";
|
428
|
+
return authority_metadata->as_string_view();
|
429
|
+
}
|
430
|
+
|
431
|
+
grpc_compression_algorithm test_only_compression_algorithm() override {
|
432
|
+
return incoming_compression_algorithm_;
|
433
|
+
}
|
434
|
+
|
435
|
+
uint32_t test_only_message_flags() override {
|
436
|
+
return test_only_last_message_flags_;
|
437
|
+
}
|
438
|
+
|
439
|
+
uint32_t test_only_encodings_accepted_by_peer() override {
|
440
|
+
return encodings_accepted_by_peer_.ToLegacyBitmask();
|
441
|
+
}
|
442
|
+
|
443
|
+
static size_t InitialSizeEstimate() {
|
444
|
+
return sizeof(FilterStackCall) +
|
445
|
+
sizeof(BatchControl) * kMaxConcurrentBatches;
|
446
|
+
}
|
447
|
+
|
448
|
+
private:
|
449
|
+
static constexpr gpr_atm kRecvNone = 0;
|
450
|
+
static constexpr gpr_atm kRecvInitialMetadataFirst = 1;
|
451
|
+
|
452
|
+
struct BatchControl {
|
453
|
+
FilterStackCall* call_ = nullptr;
|
454
|
+
grpc_transport_stream_op_batch op_;
|
455
|
+
/* Share memory for cq_completion and notify_tag as they are never needed
|
456
|
+
simultaneously. Each byte used in this data structure count as six bytes
|
457
|
+
per call, so any savings we can make are worthwhile,
|
458
|
+
|
459
|
+
We use notify_tag to determine whether or not to send notification to the
|
460
|
+
completion queue. Once we've made that determination, we can reuse the
|
461
|
+
memory for cq_completion. */
|
462
|
+
union {
|
463
|
+
grpc_cq_completion cq_completion;
|
464
|
+
struct {
|
465
|
+
/* Any given op indicates completion by either (a) calling a closure or
|
466
|
+
(b) sending a notification on the call's completion queue. If
|
467
|
+
\a is_closure is true, \a tag indicates a closure to be invoked;
|
468
|
+
otherwise, \a tag indicates the tag to be used in the notification to
|
469
|
+
be sent to the completion queue. */
|
470
|
+
void* tag;
|
471
|
+
bool is_closure;
|
472
|
+
} notify_tag;
|
473
|
+
} completion_data_;
|
474
|
+
grpc_closure start_batch_;
|
475
|
+
grpc_closure finish_batch_;
|
476
|
+
std::atomic<intptr_t> steps_to_complete_{0};
|
477
|
+
AtomicError batch_error_;
|
478
|
+
void set_num_steps_to_complete(uintptr_t steps) {
|
479
|
+
steps_to_complete_.store(steps, std::memory_order_release);
|
480
|
+
}
|
481
|
+
bool completed_batch_step() {
|
482
|
+
return steps_to_complete_.fetch_sub(1, std::memory_order_acq_rel) == 1;
|
483
|
+
}
|
484
|
+
|
485
|
+
void PostCompletion();
|
486
|
+
void FinishStep();
|
487
|
+
void ProcessDataAfterMetadata();
|
488
|
+
void ReceivingStreamReady(grpc_error_handle error);
|
489
|
+
void ValidateFilteredMetadata();
|
490
|
+
void ReceivingInitialMetadataReady(grpc_error_handle error);
|
491
|
+
void ReceivingTrailingMetadataReady(grpc_error_handle error);
|
492
|
+
void FinishBatch(grpc_error_handle error);
|
493
|
+
};
|
494
|
+
|
495
|
+
FilterStackCall(Arena* arena, const grpc_call_create_args& args)
|
496
|
+
: Call(arena, args.server_transport_data == nullptr, args.send_deadline,
|
497
|
+
args.channel->Ref()),
|
498
|
+
cq_(args.cq),
|
499
|
+
stream_op_payload_(context_) {}
|
500
|
+
|
501
|
+
static void ReleaseCall(void* call, grpc_error_handle);
|
502
|
+
static void DestroyCall(void* call, grpc_error_handle);
|
503
|
+
|
504
|
+
static FilterStackCall* FromCallStack(grpc_call_stack* call_stack) {
|
505
|
+
return reinterpret_cast<FilterStackCall*>(
|
506
|
+
reinterpret_cast<char*>(call_stack) -
|
507
|
+
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(FilterStackCall)));
|
508
|
+
}
|
509
|
+
|
510
|
+
void ExecuteBatch(grpc_transport_stream_op_batch* batch,
|
511
|
+
grpc_closure* start_batch_closure);
|
512
|
+
void SetFinalStatus(grpc_error_handle error);
|
513
|
+
BatchControl* ReuseOrAllocateBatchControl(const grpc_op* ops);
|
514
|
+
void HandleCompressionAlgorithmDisabled(
|
515
|
+
grpc_compression_algorithm compression_algorithm) GPR_ATTRIBUTE_NOINLINE;
|
516
|
+
void HandleCompressionAlgorithmNotAccepted(
|
517
|
+
grpc_compression_algorithm compression_algorithm) GPR_ATTRIBUTE_NOINLINE;
|
518
|
+
bool PrepareApplicationMetadata(size_t count, grpc_metadata* metadata,
|
519
|
+
bool is_trailing);
|
520
|
+
void PublishAppMetadata(grpc_metadata_batch* b, bool is_trailing);
|
521
|
+
void RecvInitialFilter(grpc_metadata_batch* b);
|
522
|
+
void RecvTrailingFilter(grpc_metadata_batch* b,
|
523
|
+
grpc_error_handle batch_error);
|
524
|
+
|
525
|
+
RefCount ext_ref_;
|
526
|
+
CallCombiner call_combiner_;
|
527
|
+
grpc_completion_queue* cq_;
|
528
|
+
grpc_polling_entity pollent_;
|
529
|
+
gpr_cycle_counter start_time_ = gpr_get_cycle_counter();
|
167
530
|
|
168
|
-
/* client or server call */
|
169
|
-
bool is_client;
|
170
531
|
/** has grpc_call_unref been called */
|
171
|
-
bool
|
172
|
-
/** flag indicating that cancellation is inherited */
|
173
|
-
bool cancellation_is_inherited = false;
|
532
|
+
bool destroy_called_ = false;
|
174
533
|
// Trailers-only response status
|
175
|
-
bool
|
534
|
+
bool is_trailers_only_ = false;
|
176
535
|
/** which ops are in-flight */
|
177
|
-
bool
|
178
|
-
bool
|
179
|
-
bool
|
180
|
-
bool
|
181
|
-
bool
|
182
|
-
bool
|
183
|
-
gpr_atm
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
grpc_transport_stream_op_batch_payload stream_op_payload;
|
536
|
+
bool sent_initial_metadata_ = false;
|
537
|
+
bool sending_message_ = false;
|
538
|
+
bool sent_final_op_ = false;
|
539
|
+
bool received_initial_metadata_ = false;
|
540
|
+
bool receiving_message_ = false;
|
541
|
+
bool requested_final_op_ = false;
|
542
|
+
gpr_atm received_final_op_atm_ = 0;
|
543
|
+
|
544
|
+
BatchControl* active_batches_[kMaxConcurrentBatches] = {};
|
545
|
+
grpc_transport_stream_op_batch_payload stream_op_payload_;
|
188
546
|
|
189
547
|
/* first idx: is_receiving, second idx: is_trailing */
|
190
|
-
grpc_metadata_batch
|
191
|
-
grpc_metadata_batch
|
192
|
-
grpc_metadata_batch
|
193
|
-
grpc_metadata_batch
|
548
|
+
grpc_metadata_batch send_initial_metadata_{arena()};
|
549
|
+
grpc_metadata_batch send_trailing_metadata_{arena()};
|
550
|
+
grpc_metadata_batch recv_initial_metadata_{arena()};
|
551
|
+
grpc_metadata_batch recv_trailing_metadata_{arena()};
|
194
552
|
|
195
553
|
/* Buffered read metadata waiting to be returned to the application.
|
196
554
|
Element 0 is initial metadata, element 1 is trailing metadata. */
|
197
|
-
grpc_metadata_array*
|
198
|
-
|
199
|
-
grpc_metadata compression_md;
|
200
|
-
|
201
|
-
// A char* indicating the peer name.
|
202
|
-
gpr_atm peer_string = 0;
|
555
|
+
grpc_metadata_array* buffered_metadata_[2] = {};
|
203
556
|
|
204
557
|
/* Call data useful used for reporting. Only valid after the call has
|
205
558
|
* completed */
|
206
|
-
grpc_call_final_info
|
559
|
+
grpc_call_final_info final_info_;
|
207
560
|
|
208
561
|
/* Compression algorithm for *incoming* data */
|
209
|
-
|
210
|
-
|
211
|
-
/* Stream compression algorithm for *incoming* data */
|
212
|
-
grpc_stream_compression_algorithm incoming_stream_compression_algorithm =
|
213
|
-
GRPC_STREAM_COMPRESS_NONE;
|
562
|
+
grpc_compression_algorithm incoming_compression_algorithm_ =
|
563
|
+
GRPC_COMPRESS_NONE;
|
214
564
|
/* Supported encodings (compression algorithms), a bitset.
|
215
565
|
* Always support no compression. */
|
216
|
-
|
217
|
-
/* Supported stream encodings (stream compression algorithms), a bitset */
|
218
|
-
uint32_t stream_encodings_accepted_by_peer = 0;
|
566
|
+
CompressionAlgorithmSet encodings_accepted_by_peer_{GRPC_COMPRESS_NONE};
|
219
567
|
|
220
568
|
/* Contexts for various subsystems (security, tracing, ...). */
|
221
|
-
grpc_call_context_element
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
grpc_slice receiving_slice = grpc_empty_slice();
|
235
|
-
grpc_closure receiving_slice_ready;
|
236
|
-
grpc_closure receiving_stream_ready;
|
237
|
-
grpc_closure receiving_initial_metadata_ready;
|
238
|
-
grpc_closure receiving_trailing_metadata_ready;
|
239
|
-
uint32_t test_only_last_message_flags = 0;
|
569
|
+
grpc_call_context_element context_[GRPC_CONTEXT_COUNT] = {};
|
570
|
+
|
571
|
+
SliceBuffer send_slice_buffer_;
|
572
|
+
absl::optional<SliceBuffer> receiving_slice_buffer_;
|
573
|
+
uint32_t receiving_stream_flags_;
|
574
|
+
|
575
|
+
bool call_failed_before_recv_message_ = false;
|
576
|
+
grpc_byte_buffer** receiving_buffer_ = nullptr;
|
577
|
+
grpc_slice receiving_slice_ = grpc_empty_slice();
|
578
|
+
grpc_closure receiving_stream_ready_;
|
579
|
+
grpc_closure receiving_initial_metadata_ready_;
|
580
|
+
grpc_closure receiving_trailing_metadata_ready_;
|
581
|
+
uint32_t test_only_last_message_flags_ = 0;
|
240
582
|
// Status about operation of call
|
241
|
-
bool
|
242
|
-
gpr_atm
|
583
|
+
bool sent_server_trailing_metadata_ = false;
|
584
|
+
gpr_atm cancelled_with_error_ = 0;
|
243
585
|
|
244
|
-
grpc_closure
|
586
|
+
grpc_closure release_call_;
|
245
587
|
|
246
588
|
union {
|
247
589
|
struct {
|
@@ -252,10 +594,10 @@ struct grpc_call {
|
|
252
594
|
struct {
|
253
595
|
int* cancelled;
|
254
596
|
// backpointer to owning server if this is a server side call.
|
255
|
-
|
597
|
+
Server* core_server;
|
256
598
|
} server;
|
257
|
-
}
|
258
|
-
AtomicError
|
599
|
+
} final_op_;
|
600
|
+
AtomicError status_error_;
|
259
601
|
|
260
602
|
/* recv_state can contain one of the following values:
|
261
603
|
RECV_NONE : : no initial metadata and messages received
|
@@ -273,835 +615,435 @@ struct grpc_call {
|
|
273
615
|
|
274
616
|
For 1, 4: See receiving_initial_metadata_ready() function
|
275
617
|
For 2, 3: See receiving_stream_ready() function */
|
276
|
-
gpr_atm
|
618
|
+
gpr_atm recv_state_ = 0;
|
277
619
|
};
|
278
620
|
|
279
|
-
|
280
|
-
|
621
|
+
grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
|
622
|
+
grpc_call** out_call) {
|
623
|
+
Channel* channel = args->channel.get();
|
281
624
|
|
282
|
-
|
283
|
-
(grpc_call_stack*)((char*)(call) + \
|
284
|
-
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(grpc_call)))
|
285
|
-
#define CALL_FROM_CALL_STACK(call_stack) \
|
286
|
-
(grpc_call*)(((char*)(call_stack)) - \
|
287
|
-
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(grpc_call)))
|
288
|
-
|
289
|
-
#define CALL_ELEM_FROM_CALL(call, idx) \
|
290
|
-
grpc_call_stack_element(CALL_STACK_FROM_CALL(call), idx)
|
291
|
-
#define CALL_FROM_TOP_ELEM(top_elem) \
|
292
|
-
CALL_FROM_CALL_STACK(grpc_call_stack_from_top_element(top_elem))
|
293
|
-
|
294
|
-
static void execute_batch(grpc_call* call,
|
295
|
-
grpc_transport_stream_op_batch* batch,
|
296
|
-
grpc_closure* start_batch_closure);
|
297
|
-
|
298
|
-
static void cancel_with_status(grpc_call* c, grpc_status_code status,
|
299
|
-
const char* description);
|
300
|
-
static void cancel_with_error(grpc_call* c, grpc_error_handle error);
|
301
|
-
static void destroy_call(void* call_stack, grpc_error_handle error);
|
302
|
-
static void receiving_slice_ready(void* bctlp, grpc_error_handle error);
|
303
|
-
static void set_final_status(grpc_call* call, grpc_error_handle error);
|
304
|
-
static void process_data_after_md(batch_control* bctl);
|
305
|
-
static void post_batch_completion(batch_control* bctl);
|
306
|
-
|
307
|
-
static void add_init_error(grpc_error_handle* composite,
|
625
|
+
auto add_init_error = [](grpc_error_handle* composite,
|
308
626
|
grpc_error_handle new_err) {
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
}
|
313
|
-
*composite = grpc_error_add_child(*composite, new_err);
|
314
|
-
}
|
315
|
-
|
316
|
-
void* grpc_call_arena_alloc(grpc_call* call, size_t size) {
|
317
|
-
return call->arena->Alloc(size);
|
318
|
-
}
|
319
|
-
|
320
|
-
static parent_call* get_or_create_parent_call(grpc_call* call) {
|
321
|
-
parent_call* p =
|
322
|
-
reinterpret_cast<parent_call*>(gpr_atm_acq_load(&call->parent_call_atm));
|
323
|
-
if (p == nullptr) {
|
324
|
-
p = call->arena->New<parent_call>();
|
325
|
-
if (!gpr_atm_rel_cas(&call->parent_call_atm,
|
326
|
-
reinterpret_cast<gpr_atm>(nullptr),
|
327
|
-
reinterpret_cast<gpr_atm>(p))) {
|
328
|
-
p->~parent_call();
|
329
|
-
p = reinterpret_cast<parent_call*>(
|
330
|
-
gpr_atm_acq_load(&call->parent_call_atm));
|
627
|
+
if (new_err.ok()) return;
|
628
|
+
if (composite->ok()) {
|
629
|
+
*composite = GRPC_ERROR_CREATE("Call creation failed");
|
331
630
|
}
|
332
|
-
|
333
|
-
|
334
|
-
}
|
335
|
-
|
336
|
-
static parent_call* get_parent_call(grpc_call* call) {
|
337
|
-
return reinterpret_cast<parent_call*>(
|
338
|
-
gpr_atm_acq_load(&call->parent_call_atm));
|
339
|
-
}
|
340
|
-
|
341
|
-
size_t grpc_call_get_initial_size_estimate() {
|
342
|
-
return sizeof(grpc_call) + sizeof(batch_control) * MAX_CONCURRENT_BATCHES +
|
343
|
-
sizeof(grpc_linked_mdelem) * ESTIMATED_MDELEM_COUNT;
|
344
|
-
}
|
631
|
+
*composite = grpc_error_add_child(*composite, new_err);
|
632
|
+
};
|
345
633
|
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
grpc_core::Arena* arena;
|
353
|
-
grpc_call* call;
|
354
|
-
grpc_error_handle error = GRPC_ERROR_NONE;
|
355
|
-
grpc_channel_stack* channel_stack =
|
356
|
-
grpc_channel_get_channel_stack(args->channel);
|
357
|
-
size_t initial_size = grpc_channel_get_call_size_estimate(args->channel);
|
358
|
-
GRPC_STATS_INC_CALL_INITIAL_SIZE(initial_size);
|
359
|
-
size_t call_and_stack_size =
|
360
|
-
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(grpc_call)) +
|
361
|
-
channel_stack->call_stack_size;
|
634
|
+
Arena* arena;
|
635
|
+
FilterStackCall* call;
|
636
|
+
grpc_error_handle error;
|
637
|
+
grpc_channel_stack* channel_stack = channel->channel_stack();
|
638
|
+
size_t initial_size = channel->CallSizeEstimate();
|
639
|
+
global_stats().IncrementCallInitialSize(initial_size);
|
362
640
|
size_t call_alloc_size =
|
363
|
-
|
641
|
+
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(FilterStackCall)) +
|
642
|
+
channel_stack->call_stack_size;
|
364
643
|
|
365
|
-
std::pair<
|
366
|
-
|
644
|
+
std::pair<Arena*, void*> arena_with_call = Arena::CreateWithAlloc(
|
645
|
+
initial_size, call_alloc_size, channel->allocator());
|
367
646
|
arena = arena_with_call.first;
|
368
|
-
call = new (arena_with_call.second)
|
369
|
-
|
647
|
+
call = new (arena_with_call.second) FilterStackCall(arena, *args);
|
648
|
+
GPR_DEBUG_ASSERT(FromC(call->c_ptr()) == call);
|
649
|
+
GPR_DEBUG_ASSERT(FromCallStack(call->call_stack()) == call);
|
650
|
+
*out_call = call->c_ptr();
|
370
651
|
grpc_slice path = grpc_empty_slice();
|
371
|
-
if (call->is_client) {
|
372
|
-
call->
|
373
|
-
call->
|
374
|
-
call->
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
path = grpc_slice_ref_internal(
|
383
|
-
GRPC_MDVALUE(args->add_initial_metadata[i]));
|
384
|
-
}
|
652
|
+
if (call->is_client()) {
|
653
|
+
call->final_op_.client.status_details = nullptr;
|
654
|
+
call->final_op_.client.status = nullptr;
|
655
|
+
call->final_op_.client.error_string = nullptr;
|
656
|
+
global_stats().IncrementClientCallsCreated();
|
657
|
+
path = CSliceRef(args->path->c_slice());
|
658
|
+
call->send_initial_metadata_.Set(HttpPathMetadata(),
|
659
|
+
std::move(*args->path));
|
660
|
+
if (args->authority.has_value()) {
|
661
|
+
call->send_initial_metadata_.Set(HttpAuthorityMetadata(),
|
662
|
+
std::move(*args->authority));
|
385
663
|
}
|
386
|
-
call->send_extra_metadata_count =
|
387
|
-
static_cast<int>(args->add_initial_metadata_count);
|
388
664
|
} else {
|
389
|
-
|
390
|
-
call->
|
391
|
-
call->
|
392
|
-
GPR_ASSERT(args->add_initial_metadata_count == 0);
|
393
|
-
call->send_extra_metadata_count = 0;
|
665
|
+
global_stats().IncrementServerCallsCreated();
|
666
|
+
call->final_op_.server.cancelled = nullptr;
|
667
|
+
call->final_op_.server.core_server = args->server;
|
394
668
|
}
|
395
669
|
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
call->child = new (reinterpret_cast<char*>(arena_with_call.second) +
|
401
|
-
call_and_stack_size) child_call(args->parent);
|
402
|
-
|
403
|
-
GRPC_CALL_INTERNAL_REF(args->parent, "child");
|
404
|
-
GPR_ASSERT(call->is_client);
|
405
|
-
GPR_ASSERT(!args->parent->is_client);
|
406
|
-
|
407
|
-
if (args->propagation_mask & GRPC_PROPAGATE_DEADLINE) {
|
408
|
-
send_deadline = std::min(send_deadline, args->parent->send_deadline);
|
409
|
-
}
|
410
|
-
/* for now GRPC_PROPAGATE_TRACING_CONTEXT *MUST* be passed with
|
411
|
-
* GRPC_PROPAGATE_STATS_CONTEXT */
|
412
|
-
/* TODO(ctiller): This should change to use the appropriate census start_op
|
413
|
-
* call. */
|
414
|
-
if (args->propagation_mask & GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT) {
|
415
|
-
if (0 == (args->propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT)) {
|
416
|
-
add_init_error(&error, GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
417
|
-
"Census tracing propagation requested "
|
418
|
-
"without Census context propagation"));
|
419
|
-
}
|
420
|
-
grpc_call_context_set(call, GRPC_CONTEXT_TRACING,
|
421
|
-
args->parent->context[GRPC_CONTEXT_TRACING].value,
|
422
|
-
nullptr);
|
423
|
-
} else if (args->propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT) {
|
424
|
-
add_init_error(&error, GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
425
|
-
"Census context propagation requested "
|
426
|
-
"without Census tracing propagation"));
|
427
|
-
}
|
428
|
-
if (args->propagation_mask & GRPC_PROPAGATE_CANCELLATION) {
|
429
|
-
call->cancellation_is_inherited = true;
|
430
|
-
if (gpr_atm_acq_load(&args->parent->received_final_op_atm)) {
|
431
|
-
immediately_cancel = true;
|
432
|
-
}
|
433
|
-
}
|
670
|
+
Call* parent = Call::FromC(args->parent);
|
671
|
+
if (parent != nullptr) {
|
672
|
+
add_init_error(&error, absl_status_to_grpc_error(call->InitParent(
|
673
|
+
parent, args->propagation_mask)));
|
434
674
|
}
|
435
|
-
call->send_deadline = send_deadline;
|
436
675
|
/* initial refcount dropped by grpc_call_unref */
|
437
|
-
grpc_call_element_args call_args = {
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
call->arena,
|
444
|
-
&call->call_combiner};
|
445
|
-
add_init_error(&error, grpc_call_stack_init(channel_stack, 1, destroy_call,
|
676
|
+
grpc_call_element_args call_args = {
|
677
|
+
call->call_stack(), args->server_transport_data,
|
678
|
+
call->context_, path,
|
679
|
+
call->start_time_, call->send_deadline(),
|
680
|
+
call->arena(), &call->call_combiner_};
|
681
|
+
add_init_error(&error, grpc_call_stack_init(channel_stack, 1, DestroyCall,
|
446
682
|
call, &call_args));
|
447
683
|
// Publish this call to parent only after the call stack has been initialized.
|
448
|
-
if (
|
449
|
-
|
450
|
-
parent_call* pc = get_or_create_parent_call(args->parent);
|
451
|
-
gpr_mu_lock(&pc->child_list_mu);
|
452
|
-
if (pc->first_child == nullptr) {
|
453
|
-
pc->first_child = call;
|
454
|
-
cc->sibling_next = cc->sibling_prev = call;
|
455
|
-
} else {
|
456
|
-
cc->sibling_next = pc->first_child;
|
457
|
-
cc->sibling_prev = pc->first_child->child->sibling_prev;
|
458
|
-
cc->sibling_next->child->sibling_prev =
|
459
|
-
cc->sibling_prev->child->sibling_next = call;
|
460
|
-
}
|
461
|
-
gpr_mu_unlock(&pc->child_list_mu);
|
684
|
+
if (parent != nullptr) {
|
685
|
+
call->PublishToParent(parent);
|
462
686
|
}
|
463
687
|
|
464
|
-
if (error
|
465
|
-
|
466
|
-
}
|
467
|
-
if (immediately_cancel) {
|
468
|
-
cancel_with_error(call, GRPC_ERROR_CANCELLED);
|
688
|
+
if (!error.ok()) {
|
689
|
+
call->CancelWithError(error);
|
469
690
|
}
|
470
691
|
if (args->cq != nullptr) {
|
471
692
|
GPR_ASSERT(args->pollset_set_alternative == nullptr &&
|
472
693
|
"Only one of 'cq' and 'pollset_set_alternative' should be "
|
473
694
|
"non-nullptr.");
|
474
695
|
GRPC_CQ_INTERNAL_REF(args->cq, "bind");
|
475
|
-
call->
|
696
|
+
call->pollent_ =
|
476
697
|
grpc_polling_entity_create_from_pollset(grpc_cq_pollset(args->cq));
|
477
698
|
}
|
478
699
|
if (args->pollset_set_alternative != nullptr) {
|
479
|
-
call->
|
700
|
+
call->pollent_ = grpc_polling_entity_create_from_pollset_set(
|
480
701
|
args->pollset_set_alternative);
|
481
702
|
}
|
482
|
-
if (!grpc_polling_entity_is_empty(&call->
|
483
|
-
grpc_call_stack_set_pollset_or_pollset_set(
|
484
|
-
&call->
|
703
|
+
if (!grpc_polling_entity_is_empty(&call->pollent_)) {
|
704
|
+
grpc_call_stack_set_pollset_or_pollset_set(call->call_stack(),
|
705
|
+
&call->pollent_);
|
485
706
|
}
|
486
707
|
|
487
|
-
if (call->is_client) {
|
488
|
-
|
489
|
-
grpc_channel_get_channelz_node(call->channel);
|
708
|
+
if (call->is_client()) {
|
709
|
+
channelz::ChannelNode* channelz_channel = channel->channelz_node();
|
490
710
|
if (channelz_channel != nullptr) {
|
491
711
|
channelz_channel->RecordCallStarted();
|
492
712
|
}
|
493
|
-
} else if (call->
|
494
|
-
|
495
|
-
call->
|
713
|
+
} else if (call->final_op_.server.core_server != nullptr) {
|
714
|
+
channelz::ServerNode* channelz_node =
|
715
|
+
call->final_op_.server.core_server->channelz_node();
|
496
716
|
if (channelz_node != nullptr) {
|
497
717
|
channelz_node->RecordCallStarted();
|
498
718
|
}
|
499
719
|
}
|
500
720
|
|
501
|
-
|
721
|
+
CSliceUnref(path);
|
502
722
|
|
503
723
|
return error;
|
504
724
|
}
|
505
725
|
|
506
|
-
void
|
507
|
-
grpc_completion_queue* cq) {
|
726
|
+
void FilterStackCall::SetCompletionQueue(grpc_completion_queue* cq) {
|
508
727
|
GPR_ASSERT(cq);
|
509
728
|
|
510
|
-
if (grpc_polling_entity_pollset_set(&
|
729
|
+
if (grpc_polling_entity_pollset_set(&pollent_) != nullptr) {
|
511
730
|
gpr_log(GPR_ERROR, "A pollset_set is already registered for this call.");
|
512
731
|
abort();
|
513
732
|
}
|
514
|
-
|
733
|
+
cq_ = cq;
|
515
734
|
GRPC_CQ_INTERNAL_REF(cq, "bind");
|
516
|
-
|
517
|
-
grpc_call_stack_set_pollset_or_pollset_set(
|
518
|
-
&call->pollent);
|
519
|
-
}
|
520
|
-
|
521
|
-
#ifndef NDEBUG
|
522
|
-
#define REF_REASON reason
|
523
|
-
#define REF_ARG , const char* reason
|
524
|
-
#else
|
525
|
-
#define REF_REASON ""
|
526
|
-
#define REF_ARG
|
527
|
-
#endif
|
528
|
-
void grpc_call_internal_ref(grpc_call* c REF_ARG) {
|
529
|
-
GRPC_CALL_STACK_REF(CALL_STACK_FROM_CALL(c), REF_REASON);
|
530
|
-
}
|
531
|
-
void grpc_call_internal_unref(grpc_call* c REF_ARG) {
|
532
|
-
GRPC_CALL_STACK_UNREF(CALL_STACK_FROM_CALL(c), REF_REASON);
|
735
|
+
pollent_ = grpc_polling_entity_create_from_pollset(grpc_cq_pollset(cq));
|
736
|
+
grpc_call_stack_set_pollset_or_pollset_set(call_stack(), &pollent_);
|
533
737
|
}
|
534
738
|
|
535
|
-
|
536
|
-
|
537
|
-
grpc_channel* channel = c->channel;
|
538
|
-
grpc_core::Arena* arena = c->arena;
|
539
|
-
c->~grpc_call();
|
540
|
-
grpc_channel_update_call_size_estimate(channel, arena->Destroy());
|
541
|
-
GRPC_CHANNEL_INTERNAL_UNREF(channel, "call");
|
739
|
+
void FilterStackCall::ReleaseCall(void* call, grpc_error_handle /*error*/) {
|
740
|
+
static_cast<FilterStackCall*>(call)->DeleteThis();
|
542
741
|
}
|
543
742
|
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
c->
|
548
|
-
c->
|
549
|
-
c->
|
550
|
-
parent_call* pc = get_parent_call(c);
|
743
|
+
void FilterStackCall::DestroyCall(void* call, grpc_error_handle /*error*/) {
|
744
|
+
auto* c = static_cast<FilterStackCall*>(call);
|
745
|
+
c->recv_initial_metadata_.Clear();
|
746
|
+
c->recv_trailing_metadata_.Clear();
|
747
|
+
c->receiving_slice_buffer_.reset();
|
748
|
+
ParentCall* pc = c->parent_call();
|
551
749
|
if (pc != nullptr) {
|
552
|
-
pc->~
|
750
|
+
pc->~ParentCall();
|
553
751
|
}
|
554
|
-
|
555
|
-
|
556
|
-
}
|
557
|
-
if (c->cq) {
|
558
|
-
GRPC_CQ_INTERNAL_UNREF(c->cq, "bind");
|
752
|
+
if (c->cq_) {
|
753
|
+
GRPC_CQ_INTERNAL_UNREF(c->cq_, "bind");
|
559
754
|
}
|
560
755
|
|
561
|
-
grpc_error_handle status_error = c->
|
562
|
-
grpc_error_get_status(status_error, c->send_deadline,
|
563
|
-
&c->
|
564
|
-
&(c->
|
565
|
-
c->
|
566
|
-
c->
|
567
|
-
gpr_cycle_counter_sub(gpr_get_cycle_counter(), c->
|
568
|
-
grpc_call_stack_destroy(
|
569
|
-
GRPC_CLOSURE_INIT(&c->
|
756
|
+
grpc_error_handle status_error = c->status_error_.get();
|
757
|
+
grpc_error_get_status(status_error, c->send_deadline(),
|
758
|
+
&c->final_info_.final_status, nullptr, nullptr,
|
759
|
+
&(c->final_info_.error_string));
|
760
|
+
c->status_error_.set(absl::OkStatus());
|
761
|
+
c->final_info_.stats.latency =
|
762
|
+
gpr_cycle_counter_sub(gpr_get_cycle_counter(), c->start_time_);
|
763
|
+
grpc_call_stack_destroy(c->call_stack(), &c->final_info_,
|
764
|
+
GRPC_CLOSURE_INIT(&c->release_call_, ReleaseCall, c,
|
570
765
|
grpc_schedule_on_exec_ctx));
|
571
766
|
}
|
572
767
|
|
573
|
-
void
|
574
|
-
|
575
|
-
void grpc_call_unref(grpc_call* c) {
|
576
|
-
if (GPR_LIKELY(!c->ext_ref.Unref())) return;
|
577
|
-
|
578
|
-
GPR_TIMER_SCOPE("grpc_call_unref", 0);
|
768
|
+
void FilterStackCall::ExternalUnref() {
|
769
|
+
if (GPR_LIKELY(!ext_ref_.Unref())) return;
|
579
770
|
|
580
|
-
|
581
|
-
|
582
|
-
grpc_core::ExecCtx exec_ctx;
|
771
|
+
ApplicationCallbackExecCtx callback_exec_ctx;
|
772
|
+
ExecCtx exec_ctx;
|
583
773
|
|
584
|
-
GRPC_API_TRACE("grpc_call_unref(c=%p)", 1, (
|
774
|
+
GRPC_API_TRACE("grpc_call_unref(c=%p)", 1, (this));
|
585
775
|
|
586
|
-
|
587
|
-
parent_call* pc = get_parent_call(cc->parent);
|
588
|
-
gpr_mu_lock(&pc->child_list_mu);
|
589
|
-
if (c == pc->first_child) {
|
590
|
-
pc->first_child = cc->sibling_next;
|
591
|
-
if (c == pc->first_child) {
|
592
|
-
pc->first_child = nullptr;
|
593
|
-
}
|
594
|
-
}
|
595
|
-
cc->sibling_prev->child->sibling_next = cc->sibling_next;
|
596
|
-
cc->sibling_next->child->sibling_prev = cc->sibling_prev;
|
597
|
-
gpr_mu_unlock(&pc->child_list_mu);
|
598
|
-
GRPC_CALL_INTERNAL_UNREF(cc->parent, "child");
|
599
|
-
}
|
776
|
+
MaybeUnpublishFromParent();
|
600
777
|
|
601
|
-
GPR_ASSERT(!
|
602
|
-
|
603
|
-
bool cancel = gpr_atm_acq_load(&
|
604
|
-
gpr_atm_acq_load(&c->received_final_op_atm) == 0;
|
778
|
+
GPR_ASSERT(!destroy_called_);
|
779
|
+
destroy_called_ = true;
|
780
|
+
bool cancel = gpr_atm_acq_load(&received_final_op_atm_) == 0;
|
605
781
|
if (cancel) {
|
606
|
-
|
782
|
+
CancelWithError(absl::CancelledError());
|
607
783
|
} else {
|
608
784
|
// Unset the call combiner cancellation closure. This has the
|
609
785
|
// effect of scheduling the previously set cancellation closure, if
|
610
786
|
// any, so that it can release any internal references it may be
|
611
787
|
// holding to the call stack.
|
612
|
-
|
788
|
+
call_combiner_.SetNotifyOnCancel(nullptr);
|
613
789
|
}
|
614
|
-
|
615
|
-
}
|
616
|
-
|
617
|
-
grpc_call_error grpc_call_cancel(grpc_call* call, void* reserved) {
|
618
|
-
GRPC_API_TRACE("grpc_call_cancel(call=%p, reserved=%p)", 2, (call, reserved));
|
619
|
-
GPR_ASSERT(!reserved);
|
620
|
-
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
621
|
-
grpc_core::ExecCtx exec_ctx;
|
622
|
-
cancel_with_error(call, GRPC_ERROR_CANCELLED);
|
623
|
-
return GRPC_CALL_OK;
|
624
|
-
}
|
625
|
-
|
626
|
-
// This is called via the call combiner to start sending a batch down
|
627
|
-
// the filter stack.
|
628
|
-
static void execute_batch_in_call_combiner(void* arg,
|
629
|
-
grpc_error_handle /*ignored*/) {
|
630
|
-
GPR_TIMER_SCOPE("execute_batch_in_call_combiner", 0);
|
631
|
-
grpc_transport_stream_op_batch* batch =
|
632
|
-
static_cast<grpc_transport_stream_op_batch*>(arg);
|
633
|
-
grpc_call* call = static_cast<grpc_call*>(batch->handler_private.extra_arg);
|
634
|
-
grpc_call_element* elem = CALL_ELEM_FROM_CALL(call, 0);
|
635
|
-
GRPC_CALL_LOG_OP(GPR_INFO, elem, batch);
|
636
|
-
elem->filter->start_transport_stream_op_batch(elem, batch);
|
790
|
+
InternalUnref("destroy");
|
637
791
|
}
|
638
792
|
|
639
793
|
// start_batch_closure points to a caller-allocated closure to be used
|
640
794
|
// for entering the call combiner.
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
795
|
+
void FilterStackCall::ExecuteBatch(grpc_transport_stream_op_batch* batch,
|
796
|
+
grpc_closure* start_batch_closure) {
|
797
|
+
// This is called via the call combiner to start sending a batch down
|
798
|
+
// the filter stack.
|
799
|
+
auto execute_batch_in_call_combiner = [](void* arg, grpc_error_handle) {
|
800
|
+
grpc_transport_stream_op_batch* batch =
|
801
|
+
static_cast<grpc_transport_stream_op_batch*>(arg);
|
802
|
+
auto* call =
|
803
|
+
static_cast<FilterStackCall*>(batch->handler_private.extra_arg);
|
804
|
+
grpc_call_element* elem = call->call_elem(0);
|
805
|
+
GRPC_CALL_LOG_OP(GPR_INFO, elem, batch);
|
806
|
+
elem->filter->start_transport_stream_op_batch(elem, batch);
|
807
|
+
};
|
808
|
+
batch->handler_private.extra_arg = this;
|
645
809
|
GRPC_CLOSURE_INIT(start_batch_closure, execute_batch_in_call_combiner, batch,
|
646
810
|
grpc_schedule_on_exec_ctx);
|
647
|
-
GRPC_CALL_COMBINER_START(
|
648
|
-
|
649
|
-
}
|
650
|
-
|
651
|
-
char* grpc_call_get_peer(grpc_call* call) {
|
652
|
-
char* peer_string =
|
653
|
-
reinterpret_cast<char*>(gpr_atm_acq_load(&call->peer_string));
|
654
|
-
if (peer_string != nullptr) return gpr_strdup(peer_string);
|
655
|
-
peer_string = grpc_channel_get_target(call->channel);
|
656
|
-
if (peer_string != nullptr) return peer_string;
|
657
|
-
return gpr_strdup("unknown");
|
658
|
-
}
|
659
|
-
|
660
|
-
grpc_call* grpc_call_from_top_element(grpc_call_element* surface_element) {
|
661
|
-
return CALL_FROM_TOP_ELEM(surface_element);
|
662
|
-
}
|
663
|
-
|
664
|
-
/*******************************************************************************
|
665
|
-
* CANCELLATION
|
666
|
-
*/
|
667
|
-
|
668
|
-
grpc_call_error grpc_call_cancel_with_status(grpc_call* c,
|
669
|
-
grpc_status_code status,
|
670
|
-
const char* description,
|
671
|
-
void* reserved) {
|
672
|
-
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
673
|
-
grpc_core::ExecCtx exec_ctx;
|
674
|
-
GRPC_API_TRACE(
|
675
|
-
"grpc_call_cancel_with_status("
|
676
|
-
"c=%p, status=%d, description=%s, reserved=%p)",
|
677
|
-
4, (c, (int)status, description, reserved));
|
678
|
-
GPR_ASSERT(reserved == nullptr);
|
679
|
-
cancel_with_status(c, status, description);
|
680
|
-
return GRPC_CALL_OK;
|
811
|
+
GRPC_CALL_COMBINER_START(call_combiner(), start_batch_closure,
|
812
|
+
absl::OkStatus(), "executing batch");
|
681
813
|
}
|
682
814
|
|
683
|
-
|
684
|
-
|
815
|
+
namespace {
|
816
|
+
struct CancelState {
|
817
|
+
FilterStackCall* call;
|
685
818
|
grpc_closure start_batch;
|
686
819
|
grpc_closure finish_batch;
|
687
820
|
};
|
821
|
+
} // namespace
|
822
|
+
|
688
823
|
// The on_complete callback used when sending a cancel_stream batch down
|
689
824
|
// the filter stack. Yields the call combiner when the batch is done.
|
690
825
|
static void done_termination(void* arg, grpc_error_handle /*error*/) {
|
691
|
-
|
692
|
-
GRPC_CALL_COMBINER_STOP(
|
826
|
+
CancelState* state = static_cast<CancelState*>(arg);
|
827
|
+
GRPC_CALL_COMBINER_STOP(state->call->call_combiner(),
|
693
828
|
"on_complete for cancel_stream op");
|
694
|
-
|
695
|
-
|
829
|
+
state->call->InternalUnref("termination");
|
830
|
+
delete state;
|
696
831
|
}
|
697
832
|
|
698
|
-
|
699
|
-
if (!gpr_atm_rel_cas(&
|
700
|
-
GRPC_ERROR_UNREF(error);
|
833
|
+
void FilterStackCall::CancelWithError(grpc_error_handle error) {
|
834
|
+
if (!gpr_atm_rel_cas(&cancelled_with_error_, 0, 1)) {
|
701
835
|
return;
|
702
836
|
}
|
703
|
-
|
837
|
+
ClearPeerString();
|
838
|
+
InternalRef("termination");
|
704
839
|
// Inform the call combiner of the cancellation, so that it can cancel
|
705
840
|
// any in-flight asynchronous actions that may be holding the call
|
706
841
|
// combiner. This ensures that the cancel_stream batch can be sent
|
707
842
|
// down the filter stack in a timely manner.
|
708
|
-
|
709
|
-
|
710
|
-
state->call =
|
843
|
+
call_combiner_.Cancel(error);
|
844
|
+
CancelState* state = new CancelState;
|
845
|
+
state->call = this;
|
711
846
|
GRPC_CLOSURE_INIT(&state->finish_batch, done_termination, state,
|
712
847
|
grpc_schedule_on_exec_ctx);
|
713
848
|
grpc_transport_stream_op_batch* op =
|
714
849
|
grpc_make_transport_stream_op(&state->finish_batch);
|
715
850
|
op->cancel_stream = true;
|
716
851
|
op->payload->cancel_stream.cancel_error = error;
|
717
|
-
|
718
|
-
}
|
719
|
-
|
720
|
-
void grpc_call_cancel_internal(grpc_call* call) {
|
721
|
-
cancel_with_error(call, GRPC_ERROR_CANCELLED);
|
722
|
-
}
|
723
|
-
|
724
|
-
static grpc_error_handle error_from_status(grpc_status_code status,
|
725
|
-
const char* description) {
|
726
|
-
// copying 'description' is needed to ensure the grpc_call_cancel_with_status
|
727
|
-
// guarantee that can be short-lived.
|
728
|
-
return grpc_error_set_int(
|
729
|
-
grpc_error_set_str(GRPC_ERROR_CREATE_FROM_COPIED_STRING(description),
|
730
|
-
GRPC_ERROR_STR_GRPC_MESSAGE, description),
|
731
|
-
GRPC_ERROR_INT_GRPC_STATUS, status);
|
732
|
-
}
|
733
|
-
|
734
|
-
static void cancel_with_status(grpc_call* c, grpc_status_code status,
|
735
|
-
const char* description) {
|
736
|
-
cancel_with_error(c, error_from_status(status, description));
|
852
|
+
ExecuteBatch(op, &state->start_batch);
|
737
853
|
}
|
738
854
|
|
739
|
-
|
855
|
+
void FilterStackCall::SetFinalStatus(grpc_error_handle error) {
|
740
856
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_call_error_trace)) {
|
741
|
-
gpr_log(GPR_DEBUG, "set_final_status %s",
|
742
|
-
gpr_log(GPR_DEBUG, "%s",
|
857
|
+
gpr_log(GPR_DEBUG, "set_final_status %s", is_client() ? "CLI" : "SVR");
|
858
|
+
gpr_log(GPR_DEBUG, "%s", StatusToString(error).c_str());
|
743
859
|
}
|
744
|
-
if (
|
860
|
+
if (is_client()) {
|
745
861
|
std::string status_details;
|
746
|
-
grpc_error_get_status(error,
|
747
|
-
|
748
|
-
|
749
|
-
*
|
862
|
+
grpc_error_get_status(error, send_deadline(), final_op_.client.status,
|
863
|
+
&status_details, nullptr,
|
864
|
+
final_op_.client.error_string);
|
865
|
+
*final_op_.client.status_details =
|
750
866
|
grpc_slice_from_cpp_string(std::move(status_details));
|
751
|
-
|
752
|
-
|
753
|
-
grpc_core::channelz::ChannelNode* channelz_channel =
|
754
|
-
grpc_channel_get_channelz_node(call->channel);
|
867
|
+
status_error_.set(error);
|
868
|
+
channelz::ChannelNode* channelz_channel = channel()->channelz_node();
|
755
869
|
if (channelz_channel != nullptr) {
|
756
|
-
if (*
|
870
|
+
if (*final_op_.client.status != GRPC_STATUS_OK) {
|
757
871
|
channelz_channel->RecordCallFailed();
|
758
872
|
} else {
|
759
873
|
channelz_channel->RecordCallSucceeded();
|
760
874
|
}
|
761
875
|
}
|
762
876
|
} else {
|
763
|
-
*
|
764
|
-
error
|
765
|
-
|
766
|
-
|
877
|
+
*final_op_.server.cancelled =
|
878
|
+
!error.ok() || !sent_server_trailing_metadata_;
|
879
|
+
channelz::ServerNode* channelz_node =
|
880
|
+
final_op_.server.core_server->channelz_node();
|
767
881
|
if (channelz_node != nullptr) {
|
768
|
-
if (*
|
882
|
+
if (*final_op_.server.cancelled || !status_error_.ok()) {
|
769
883
|
channelz_node->RecordCallFailed();
|
770
884
|
} else {
|
771
885
|
channelz_node->RecordCallSucceeded();
|
772
886
|
}
|
773
887
|
}
|
774
|
-
GRPC_ERROR_UNREF(error);
|
775
888
|
}
|
776
889
|
}
|
777
890
|
|
778
|
-
|
779
|
-
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
|
784
|
-
|
785
|
-
|
786
|
-
|
787
|
-
|
788
|
-
|
789
|
-
|
790
|
-
|
791
|
-
|
792
|
-
|
891
|
+
bool FilterStackCall::PrepareApplicationMetadata(size_t count,
|
892
|
+
grpc_metadata* metadata,
|
893
|
+
bool is_trailing) {
|
894
|
+
grpc_metadata_batch* batch =
|
895
|
+
is_trailing ? &send_trailing_metadata_ : &send_initial_metadata_;
|
896
|
+
for (size_t i = 0; i < count; i++) {
|
897
|
+
grpc_metadata* md = &metadata[i];
|
898
|
+
if (!GRPC_LOG_IF_ERROR("validate_metadata",
|
899
|
+
grpc_validate_header_key_is_legal(md->key))) {
|
900
|
+
return false;
|
901
|
+
} else if (!grpc_is_binary_header_internal(md->key) &&
|
902
|
+
!GRPC_LOG_IF_ERROR(
|
903
|
+
"validate_metadata",
|
904
|
+
grpc_validate_header_nonbin_value_is_legal(md->value))) {
|
905
|
+
return false;
|
906
|
+
} else if (GRPC_SLICE_LENGTH(md->value) >= UINT32_MAX) {
|
907
|
+
// HTTP2 hpack encoding has a maximum limit.
|
908
|
+
return false;
|
909
|
+
} else if (grpc_slice_str_cmp(md->key, "content-length") == 0) {
|
910
|
+
// Filter "content-length metadata"
|
911
|
+
continue;
|
912
|
+
}
|
913
|
+
batch->Append(StringViewFromSlice(md->key), Slice(CSliceRef(md->value)),
|
914
|
+
[md](absl::string_view error, const Slice& value) {
|
915
|
+
gpr_log(GPR_DEBUG, "Append error: %s",
|
916
|
+
absl::StrCat("key=", StringViewFromSlice(md->key),
|
917
|
+
" error=", error,
|
918
|
+
" value=", value.as_string_view())
|
919
|
+
.c_str());
|
920
|
+
});
|
921
|
+
}
|
793
922
|
|
794
|
-
|
795
|
-
grpc_call* call) {
|
796
|
-
grpc_compression_algorithm algorithm = GRPC_COMPRESS_NONE;
|
797
|
-
grpc_compression_algorithm_from_message_stream_compression_algorithm(
|
798
|
-
&algorithm, call->incoming_message_compression_algorithm,
|
799
|
-
call->incoming_stream_compression_algorithm);
|
800
|
-
return algorithm;
|
923
|
+
return true;
|
801
924
|
}
|
802
925
|
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
}
|
926
|
+
namespace {
|
927
|
+
class PublishToAppEncoder {
|
928
|
+
public:
|
929
|
+
explicit PublishToAppEncoder(grpc_metadata_array* dest) : dest_(dest) {}
|
808
930
|
|
809
|
-
|
810
|
-
|
811
|
-
|
812
|
-
return flags;
|
813
|
-
}
|
931
|
+
void Encode(const Slice& key, const Slice& value) {
|
932
|
+
Append(key.c_slice(), value.c_slice());
|
933
|
+
}
|
814
934
|
|
815
|
-
|
935
|
+
// Catch anything that is not explicitly handled, and do not publish it to the
|
936
|
+
// application. If new metadata is added to a batch that needs to be
|
937
|
+
// published, it should be called out here.
|
938
|
+
template <typename Which>
|
939
|
+
void Encode(Which, const typename Which::ValueType&) {}
|
816
940
|
|
817
|
-
|
818
|
-
|
819
|
-
uint32_t* encodings_accepted_by_peer,
|
820
|
-
bool stream_encoding) {
|
821
|
-
size_t i;
|
822
|
-
uint32_t algorithm;
|
823
|
-
grpc_slice_buffer accept_encoding_parts;
|
824
|
-
grpc_slice accept_encoding_slice;
|
825
|
-
void* accepted_user_data;
|
826
|
-
|
827
|
-
accepted_user_data =
|
828
|
-
grpc_mdelem_get_user_data(mdel, destroy_encodings_accepted_by_peer);
|
829
|
-
if (accepted_user_data != nullptr) {
|
830
|
-
*encodings_accepted_by_peer = static_cast<uint32_t>(
|
831
|
-
reinterpret_cast<uintptr_t>(accepted_user_data) - 1);
|
832
|
-
return;
|
941
|
+
void Encode(UserAgentMetadata, const Slice& slice) {
|
942
|
+
Append(UserAgentMetadata::key(), slice);
|
833
943
|
}
|
834
944
|
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
grpc_slice_buffer_init(&accept_encoding_parts);
|
839
|
-
grpc_slice_split_without_space(accept_encoding_slice, ",",
|
840
|
-
&accept_encoding_parts);
|
945
|
+
void Encode(HostMetadata, const Slice& slice) {
|
946
|
+
Append(HostMetadata::key(), slice);
|
947
|
+
}
|
841
948
|
|
842
|
-
|
843
|
-
|
844
|
-
int r;
|
845
|
-
grpc_slice accept_encoding_entry_slice = accept_encoding_parts.slices[i];
|
846
|
-
if (!stream_encoding) {
|
847
|
-
r = grpc_message_compression_algorithm_parse(
|
848
|
-
accept_encoding_entry_slice,
|
849
|
-
reinterpret_cast<grpc_message_compression_algorithm*>(&algorithm));
|
850
|
-
} else {
|
851
|
-
r = grpc_stream_compression_algorithm_parse(
|
852
|
-
accept_encoding_entry_slice,
|
853
|
-
reinterpret_cast<grpc_stream_compression_algorithm*>(&algorithm));
|
854
|
-
}
|
855
|
-
if (r) {
|
856
|
-
grpc_core::SetBit(encodings_accepted_by_peer, algorithm);
|
857
|
-
} else {
|
858
|
-
char* accept_encoding_entry_str =
|
859
|
-
grpc_slice_to_c_string(accept_encoding_entry_slice);
|
860
|
-
gpr_log(GPR_DEBUG,
|
861
|
-
"Unknown entry in accept encoding metadata: '%s'. Ignoring.",
|
862
|
-
accept_encoding_entry_str);
|
863
|
-
gpr_free(accept_encoding_entry_str);
|
864
|
-
}
|
949
|
+
void Encode(GrpcPreviousRpcAttemptsMetadata, uint32_t count) {
|
950
|
+
Append(GrpcPreviousRpcAttemptsMetadata::key(), count);
|
865
951
|
}
|
866
952
|
|
867
|
-
|
953
|
+
void Encode(GrpcRetryPushbackMsMetadata, Duration count) {
|
954
|
+
Append(GrpcRetryPushbackMsMetadata::key(), count.millis());
|
955
|
+
}
|
868
956
|
|
869
|
-
|
870
|
-
|
871
|
-
|
872
|
-
static_cast<uintptr_t>(*encodings_accepted_by_peer) + 1));
|
873
|
-
}
|
957
|
+
void Encode(LbTokenMetadata, const Slice& slice) {
|
958
|
+
Append(LbTokenMetadata::key(), slice);
|
959
|
+
}
|
874
960
|
|
875
|
-
|
876
|
-
|
877
|
-
|
878
|
-
|
879
|
-
}
|
880
|
-
|
881
|
-
grpc_stream_compression_algorithm
|
882
|
-
grpc_call_test_only_get_incoming_stream_encodings(grpc_call* call) {
|
883
|
-
return call->incoming_stream_compression_algorithm;
|
884
|
-
}
|
885
|
-
|
886
|
-
static grpc_linked_mdelem* linked_from_md(grpc_metadata* md) {
|
887
|
-
return reinterpret_cast<grpc_linked_mdelem*>(&md->internal_data);
|
888
|
-
}
|
889
|
-
|
890
|
-
static grpc_metadata* get_md_elem(grpc_metadata* metadata,
|
891
|
-
grpc_metadata* additional_metadata, int i,
|
892
|
-
int count) {
|
893
|
-
grpc_metadata* res =
|
894
|
-
i < count ? &metadata[i] : &additional_metadata[i - count];
|
895
|
-
GPR_ASSERT(res);
|
896
|
-
return res;
|
897
|
-
}
|
898
|
-
|
899
|
-
static int prepare_application_metadata(grpc_call* call, int count,
|
900
|
-
grpc_metadata* metadata,
|
901
|
-
int is_trailing,
|
902
|
-
int prepend_extra_metadata,
|
903
|
-
grpc_metadata* additional_metadata,
|
904
|
-
int additional_metadata_count) {
|
905
|
-
int total_count = count + additional_metadata_count;
|
906
|
-
int i;
|
907
|
-
grpc_metadata_batch* batch = is_trailing ? &call->send_trailing_metadata
|
908
|
-
: &call->send_initial_metadata;
|
909
|
-
for (i = 0; i < total_count; i++) {
|
910
|
-
grpc_metadata* md = get_md_elem(metadata, additional_metadata, i, count);
|
911
|
-
grpc_linked_mdelem* l = linked_from_md(md);
|
912
|
-
GPR_ASSERT(sizeof(grpc_linked_mdelem) == sizeof(md->internal_data));
|
913
|
-
if (!GRPC_LOG_IF_ERROR("validate_metadata",
|
914
|
-
grpc_validate_header_key_is_legal(md->key))) {
|
915
|
-
break;
|
916
|
-
} else if (!grpc_is_binary_header_internal(md->key) &&
|
917
|
-
!GRPC_LOG_IF_ERROR(
|
918
|
-
"validate_metadata",
|
919
|
-
grpc_validate_header_nonbin_value_is_legal(md->value))) {
|
920
|
-
break;
|
921
|
-
} else if (GRPC_SLICE_LENGTH(md->value) >= UINT32_MAX) {
|
922
|
-
// HTTP2 hpack encoding has a maximum limit.
|
923
|
-
break;
|
924
|
-
}
|
925
|
-
l->md = grpc_mdelem_from_grpc_metadata(const_cast<grpc_metadata*>(md));
|
961
|
+
private:
|
962
|
+
void Append(absl::string_view key, int64_t value) {
|
963
|
+
Append(StaticSlice::FromStaticString(key).c_slice(),
|
964
|
+
Slice::FromInt64(value).c_slice());
|
926
965
|
}
|
927
|
-
|
928
|
-
|
929
|
-
|
930
|
-
grpc_linked_mdelem* l = linked_from_md(md);
|
931
|
-
GRPC_MDELEM_UNREF(l->md);
|
932
|
-
}
|
933
|
-
return 0;
|
966
|
+
|
967
|
+
void Append(absl::string_view key, const Slice& value) {
|
968
|
+
Append(StaticSlice::FromStaticString(key).c_slice(), value.c_slice());
|
934
969
|
}
|
935
|
-
|
936
|
-
|
937
|
-
|
938
|
-
|
939
|
-
|
940
|
-
GRPC_LOG_IF_ERROR("prepare_application_metadata",
|
941
|
-
batch->LinkTail(&call->send_extra_metadata[i]));
|
942
|
-
}
|
943
|
-
}
|
970
|
+
|
971
|
+
void Append(grpc_slice key, grpc_slice value) {
|
972
|
+
auto* mdusr = &dest_->metadata[dest_->count++];
|
973
|
+
mdusr->key = key;
|
974
|
+
mdusr->value = value;
|
944
975
|
}
|
945
|
-
|
946
|
-
|
947
|
-
|
948
|
-
|
949
|
-
|
950
|
-
|
951
|
-
|
952
|
-
|
953
|
-
|
954
|
-
|
955
|
-
|
956
|
-
return 1;
|
957
|
-
}
|
958
|
-
|
959
|
-
static grpc_message_compression_algorithm decode_message_compression(
|
960
|
-
grpc_mdelem md) {
|
961
|
-
grpc_message_compression_algorithm algorithm =
|
962
|
-
grpc_message_compression_algorithm_from_slice(GRPC_MDVALUE(md));
|
963
|
-
if (algorithm == GRPC_MESSAGE_COMPRESS_ALGORITHMS_COUNT) {
|
964
|
-
char* md_c_str = grpc_slice_to_c_string(GRPC_MDVALUE(md));
|
965
|
-
gpr_log(GPR_ERROR,
|
966
|
-
"Invalid incoming message compression algorithm: '%s'. "
|
967
|
-
"Interpreting incoming data as uncompressed.",
|
968
|
-
md_c_str);
|
969
|
-
gpr_free(md_c_str);
|
970
|
-
return GRPC_MESSAGE_COMPRESS_NONE;
|
971
|
-
}
|
972
|
-
return algorithm;
|
973
|
-
}
|
974
|
-
|
975
|
-
static grpc_stream_compression_algorithm decode_stream_compression(
|
976
|
-
grpc_mdelem md) {
|
977
|
-
grpc_stream_compression_algorithm algorithm =
|
978
|
-
grpc_stream_compression_algorithm_from_slice(GRPC_MDVALUE(md));
|
979
|
-
if (algorithm == GRPC_STREAM_COMPRESS_ALGORITHMS_COUNT) {
|
980
|
-
char* md_c_str = grpc_slice_to_c_string(GRPC_MDVALUE(md));
|
981
|
-
gpr_log(GPR_ERROR,
|
982
|
-
"Invalid incoming stream compression algorithm: '%s'. Interpreting "
|
983
|
-
"incoming data as uncompressed.",
|
984
|
-
md_c_str);
|
985
|
-
gpr_free(md_c_str);
|
986
|
-
return GRPC_STREAM_COMPRESS_NONE;
|
987
|
-
}
|
988
|
-
return algorithm;
|
989
|
-
}
|
990
|
-
|
991
|
-
static void publish_app_metadata(grpc_call* call, grpc_metadata_batch* b,
|
992
|
-
int is_trailing) {
|
993
|
-
if (b->non_deadline_count() == 0) return;
|
994
|
-
if (!call->is_client && is_trailing) return;
|
995
|
-
if (is_trailing && call->buffered_metadata[1] == nullptr) return;
|
996
|
-
GPR_TIMER_SCOPE("publish_app_metadata", 0);
|
976
|
+
|
977
|
+
grpc_metadata_array* const dest_;
|
978
|
+
};
|
979
|
+
} // namespace
|
980
|
+
|
981
|
+
void FilterStackCall::PublishAppMetadata(grpc_metadata_batch* b,
|
982
|
+
bool is_trailing) {
|
983
|
+
if (b->count() == 0) return;
|
984
|
+
if (!is_client() && is_trailing) return;
|
985
|
+
if (is_trailing && buffered_metadata_[1] == nullptr) return;
|
997
986
|
grpc_metadata_array* dest;
|
998
|
-
|
999
|
-
dest
|
1000
|
-
|
1001
|
-
|
1002
|
-
dest->capacity * 3 / 2);
|
987
|
+
dest = buffered_metadata_[is_trailing];
|
988
|
+
if (dest->count + b->count() > dest->capacity) {
|
989
|
+
dest->capacity =
|
990
|
+
std::max(dest->capacity + b->count(), dest->capacity * 3 / 2);
|
1003
991
|
dest->metadata = static_cast<grpc_metadata*>(
|
1004
992
|
gpr_realloc(dest->metadata, sizeof(grpc_metadata) * dest->capacity));
|
1005
993
|
}
|
1006
|
-
|
1007
|
-
|
1008
|
-
/* we pass back borrowed slices that are valid whilst the call is valid */
|
1009
|
-
mdusr->key = GRPC_MDKEY(md);
|
1010
|
-
mdusr->value = GRPC_MDVALUE(md);
|
1011
|
-
});
|
994
|
+
PublishToAppEncoder encoder(dest);
|
995
|
+
b->Encode(&encoder);
|
1012
996
|
}
|
1013
997
|
|
1014
|
-
|
1015
|
-
|
1016
|
-
|
1017
|
-
|
1018
|
-
|
1019
|
-
|
1020
|
-
|
1021
|
-
}
|
1022
|
-
if (b->legacy_index()->named.grpc_encoding != nullptr) {
|
1023
|
-
GPR_TIMER_SCOPE("incoming_message_compression_algorithm", 0);
|
1024
|
-
set_incoming_message_compression_algorithm(
|
1025
|
-
call,
|
1026
|
-
decode_message_compression(b->legacy_index()->named.grpc_encoding->md));
|
1027
|
-
b->Remove(GRPC_BATCH_GRPC_ENCODING);
|
1028
|
-
}
|
1029
|
-
uint32_t message_encodings_accepted_by_peer = 1u;
|
1030
|
-
uint32_t stream_encodings_accepted_by_peer = 1u;
|
1031
|
-
if (b->legacy_index()->named.grpc_accept_encoding != nullptr) {
|
1032
|
-
GPR_TIMER_SCOPE("encodings_accepted_by_peer", 0);
|
1033
|
-
set_encodings_accepted_by_peer(
|
1034
|
-
call, b->legacy_index()->named.grpc_accept_encoding->md,
|
1035
|
-
&message_encodings_accepted_by_peer, false);
|
1036
|
-
b->Remove(GRPC_BATCH_GRPC_ACCEPT_ENCODING);
|
1037
|
-
}
|
1038
|
-
if (b->legacy_index()->named.accept_encoding != nullptr) {
|
1039
|
-
GPR_TIMER_SCOPE("stream_encodings_accepted_by_peer", 0);
|
1040
|
-
set_encodings_accepted_by_peer(call,
|
1041
|
-
b->legacy_index()->named.accept_encoding->md,
|
1042
|
-
&stream_encodings_accepted_by_peer, true);
|
1043
|
-
b->Remove(GRPC_BATCH_ACCEPT_ENCODING);
|
1044
|
-
}
|
1045
|
-
call->encodings_accepted_by_peer =
|
1046
|
-
grpc_compression_bitset_from_message_stream_compression_bitset(
|
1047
|
-
message_encodings_accepted_by_peer,
|
1048
|
-
stream_encodings_accepted_by_peer);
|
1049
|
-
publish_app_metadata(call, b, false);
|
1050
|
-
}
|
1051
|
-
|
1052
|
-
static void recv_trailing_filter(void* args, grpc_metadata_batch* b,
|
1053
|
-
grpc_error_handle batch_error) {
|
1054
|
-
grpc_call* call = static_cast<grpc_call*>(args);
|
1055
|
-
if (batch_error != GRPC_ERROR_NONE) {
|
1056
|
-
set_final_status(call, batch_error);
|
1057
|
-
} else if (b->legacy_index()->named.grpc_status != nullptr) {
|
1058
|
-
grpc_status_code status_code = grpc_get_status_code_from_metadata(
|
1059
|
-
b->legacy_index()->named.grpc_status->md);
|
1060
|
-
grpc_error_handle error = GRPC_ERROR_NONE;
|
1061
|
-
if (status_code != GRPC_STATUS_OK) {
|
1062
|
-
char* peer = grpc_call_get_peer(call);
|
1063
|
-
error = grpc_error_set_int(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
1064
|
-
"Error received from peer ", peer)),
|
1065
|
-
GRPC_ERROR_INT_GRPC_STATUS,
|
1066
|
-
static_cast<intptr_t>(status_code));
|
1067
|
-
gpr_free(peer);
|
1068
|
-
}
|
1069
|
-
if (b->legacy_index()->named.grpc_message != nullptr) {
|
1070
|
-
error = grpc_error_set_str(
|
1071
|
-
error, GRPC_ERROR_STR_GRPC_MESSAGE,
|
1072
|
-
grpc_core::StringViewFromSlice(
|
1073
|
-
GRPC_MDVALUE(b->legacy_index()->named.grpc_message->md)));
|
1074
|
-
b->Remove(GRPC_BATCH_GRPC_MESSAGE);
|
1075
|
-
} else if (error != GRPC_ERROR_NONE) {
|
1076
|
-
error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, "");
|
1077
|
-
}
|
1078
|
-
set_final_status(call, GRPC_ERROR_REF(error));
|
1079
|
-
b->Remove(GRPC_BATCH_GRPC_STATUS);
|
1080
|
-
GRPC_ERROR_UNREF(error);
|
1081
|
-
} else if (!call->is_client) {
|
1082
|
-
set_final_status(call, GRPC_ERROR_NONE);
|
1083
|
-
} else {
|
1084
|
-
gpr_log(GPR_DEBUG,
|
1085
|
-
"Received trailing metadata with no error and no status");
|
1086
|
-
set_final_status(
|
1087
|
-
call, grpc_error_set_int(
|
1088
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("No status received"),
|
1089
|
-
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNKNOWN));
|
1090
|
-
}
|
1091
|
-
publish_app_metadata(call, b, true);
|
998
|
+
void FilterStackCall::RecvInitialFilter(grpc_metadata_batch* b) {
|
999
|
+
incoming_compression_algorithm_ =
|
1000
|
+
b->Take(GrpcEncodingMetadata()).value_or(GRPC_COMPRESS_NONE);
|
1001
|
+
encodings_accepted_by_peer_ =
|
1002
|
+
b->Take(GrpcAcceptEncodingMetadata())
|
1003
|
+
.value_or(CompressionAlgorithmSet{GRPC_COMPRESS_NONE});
|
1004
|
+
PublishAppMetadata(b, false);
|
1092
1005
|
}
|
1093
1006
|
|
1094
|
-
|
1095
|
-
|
1096
|
-
|
1097
|
-
|
1007
|
+
void FilterStackCall::RecvTrailingFilter(grpc_metadata_batch* b,
|
1008
|
+
grpc_error_handle batch_error) {
|
1009
|
+
if (!batch_error.ok()) {
|
1010
|
+
SetFinalStatus(batch_error);
|
1011
|
+
} else {
|
1012
|
+
absl::optional<grpc_status_code> grpc_status =
|
1013
|
+
b->Take(GrpcStatusMetadata());
|
1014
|
+
if (grpc_status.has_value()) {
|
1015
|
+
grpc_status_code status_code = *grpc_status;
|
1016
|
+
grpc_error_handle error;
|
1017
|
+
if (status_code != GRPC_STATUS_OK) {
|
1018
|
+
char* peer = GetPeer();
|
1019
|
+
error = grpc_error_set_int(
|
1020
|
+
GRPC_ERROR_CREATE(absl::StrCat("Error received from peer ", peer)),
|
1021
|
+
StatusIntProperty::kRpcStatus, static_cast<intptr_t>(status_code));
|
1022
|
+
gpr_free(peer);
|
1023
|
+
}
|
1024
|
+
auto grpc_message = b->Take(GrpcMessageMetadata());
|
1025
|
+
if (grpc_message.has_value()) {
|
1026
|
+
error = grpc_error_set_str(error, StatusStrProperty::kGrpcMessage,
|
1027
|
+
grpc_message->as_string_view());
|
1028
|
+
} else if (!error.ok()) {
|
1029
|
+
error = grpc_error_set_str(error, StatusStrProperty::kGrpcMessage, "");
|
1030
|
+
}
|
1031
|
+
SetFinalStatus(error);
|
1032
|
+
} else if (!is_client()) {
|
1033
|
+
SetFinalStatus(absl::OkStatus());
|
1034
|
+
} else {
|
1035
|
+
gpr_log(GPR_DEBUG,
|
1036
|
+
"Received trailing metadata with no error and no status");
|
1037
|
+
SetFinalStatus(grpc_error_set_int(GRPC_ERROR_CREATE("No status received"),
|
1038
|
+
StatusIntProperty::kRpcStatus,
|
1039
|
+
GRPC_STATUS_UNKNOWN));
|
1040
|
+
}
|
1041
|
+
}
|
1042
|
+
PublishAppMetadata(b, true);
|
1098
1043
|
}
|
1099
1044
|
|
1100
|
-
|
1101
|
-
|
1102
|
-
*/
|
1103
|
-
|
1104
|
-
static bool are_write_flags_valid(uint32_t flags) {
|
1045
|
+
namespace {
|
1046
|
+
bool AreWriteFlagsValid(uint32_t flags) {
|
1105
1047
|
/* check that only bits in GRPC_WRITE_(INTERNAL?)_USED_MASK are set */
|
1106
1048
|
const uint32_t allowed_write_positions =
|
1107
1049
|
(GRPC_WRITE_USED_MASK | GRPC_WRITE_INTERNAL_USED_MASK);
|
@@ -1109,16 +1051,13 @@ static bool are_write_flags_valid(uint32_t flags) {
|
|
1109
1051
|
return !(flags & invalid_positions);
|
1110
1052
|
}
|
1111
1053
|
|
1112
|
-
|
1054
|
+
bool AreInitialMetadataFlagsValid(uint32_t flags) {
|
1113
1055
|
/* check that only bits in GRPC_WRITE_(INTERNAL?)_USED_MASK are set */
|
1114
1056
|
uint32_t invalid_positions = ~GRPC_INITIAL_METADATA_USED_MASK;
|
1115
|
-
if (!is_client) {
|
1116
|
-
invalid_positions |= GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST;
|
1117
|
-
}
|
1118
1057
|
return !(flags & invalid_positions);
|
1119
1058
|
}
|
1120
1059
|
|
1121
|
-
|
1060
|
+
size_t BatchSlotForOp(grpc_op_type type) {
|
1122
1061
|
switch (type) {
|
1123
1062
|
case GRPC_OP_SEND_INITIAL_METADATA:
|
1124
1063
|
return 0;
|
@@ -1137,353 +1076,203 @@ static size_t batch_slot_for_op(grpc_op_type type) {
|
|
1137
1076
|
}
|
1138
1077
|
GPR_UNREACHABLE_CODE(return 123456789);
|
1139
1078
|
}
|
1079
|
+
} // namespace
|
1140
1080
|
|
1141
|
-
|
1142
|
-
|
1143
|
-
size_t slot_idx =
|
1144
|
-
|
1145
|
-
|
1081
|
+
FilterStackCall::BatchControl* FilterStackCall::ReuseOrAllocateBatchControl(
|
1082
|
+
const grpc_op* ops) {
|
1083
|
+
size_t slot_idx = BatchSlotForOp(ops[0].op);
|
1084
|
+
BatchControl** pslot = &active_batches_[slot_idx];
|
1085
|
+
BatchControl* bctl;
|
1146
1086
|
if (*pslot != nullptr) {
|
1147
1087
|
bctl = *pslot;
|
1148
|
-
if (bctl->
|
1088
|
+
if (bctl->call_ != nullptr) {
|
1149
1089
|
return nullptr;
|
1150
1090
|
}
|
1151
|
-
bctl->~
|
1152
|
-
bctl->
|
1153
|
-
new (&bctl->
|
1091
|
+
bctl->~BatchControl();
|
1092
|
+
bctl->op_ = {};
|
1093
|
+
new (&bctl->batch_error_) AtomicError();
|
1154
1094
|
} else {
|
1155
|
-
bctl =
|
1095
|
+
bctl = arena()->New<BatchControl>();
|
1156
1096
|
*pslot = bctl;
|
1157
1097
|
}
|
1158
|
-
bctl->
|
1159
|
-
bctl->
|
1098
|
+
bctl->call_ = this;
|
1099
|
+
bctl->op_.payload = &stream_op_payload_;
|
1160
1100
|
return bctl;
|
1161
1101
|
}
|
1162
1102
|
|
1163
|
-
|
1164
|
-
|
1165
|
-
|
1166
|
-
grpc_call* call = bctl->call;
|
1167
|
-
bctl->call = nullptr;
|
1168
|
-
GRPC_CALL_INTERNAL_UNREF(call, "completion");
|
1169
|
-
}
|
1170
|
-
|
1171
|
-
static void reset_batch_errors(batch_control* bctl) {
|
1172
|
-
bctl->batch_error.set(GRPC_ERROR_NONE);
|
1173
|
-
}
|
1174
|
-
|
1175
|
-
static void post_batch_completion(batch_control* bctl) {
|
1176
|
-
grpc_call* next_child_call;
|
1177
|
-
grpc_call* call = bctl->call;
|
1178
|
-
grpc_error_handle error = GRPC_ERROR_REF(bctl->batch_error.get());
|
1103
|
+
void FilterStackCall::BatchControl::PostCompletion() {
|
1104
|
+
FilterStackCall* call = call_;
|
1105
|
+
grpc_error_handle error = batch_error_.get();
|
1179
1106
|
|
1180
|
-
if (
|
1181
|
-
call->
|
1107
|
+
if (op_.send_initial_metadata) {
|
1108
|
+
call->send_initial_metadata_.Clear();
|
1182
1109
|
}
|
1183
|
-
if (
|
1184
|
-
if (
|
1185
|
-
error == GRPC_ERROR_NONE) {
|
1110
|
+
if (op_.send_message) {
|
1111
|
+
if (op_.payload->send_message.stream_write_closed && error.ok()) {
|
1186
1112
|
error = grpc_error_add_child(
|
1187
|
-
error,
|
1113
|
+
error, GRPC_ERROR_CREATE(
|
1188
1114
|
"Attempt to send message after stream was closed."));
|
1189
1115
|
}
|
1190
|
-
call->
|
1116
|
+
call->sending_message_ = false;
|
1117
|
+
call->send_slice_buffer_.Clear();
|
1191
1118
|
}
|
1192
|
-
if (
|
1193
|
-
call->
|
1119
|
+
if (op_.send_trailing_metadata) {
|
1120
|
+
call->send_trailing_metadata_.Clear();
|
1194
1121
|
}
|
1195
|
-
if (
|
1122
|
+
if (op_.recv_trailing_metadata) {
|
1196
1123
|
/* propagate cancellation to any interested children */
|
1197
|
-
gpr_atm_rel_store(&call->
|
1198
|
-
|
1199
|
-
|
1200
|
-
grpc_call* child;
|
1201
|
-
gpr_mu_lock(&pc->child_list_mu);
|
1202
|
-
child = pc->first_child;
|
1203
|
-
if (child != nullptr) {
|
1204
|
-
do {
|
1205
|
-
next_child_call = child->child->sibling_next;
|
1206
|
-
if (child->cancellation_is_inherited) {
|
1207
|
-
GRPC_CALL_INTERNAL_REF(child, "propagate_cancel");
|
1208
|
-
cancel_with_error(child, GRPC_ERROR_CANCELLED);
|
1209
|
-
GRPC_CALL_INTERNAL_UNREF(child, "propagate_cancel");
|
1210
|
-
}
|
1211
|
-
child = next_child_call;
|
1212
|
-
} while (child != pc->first_child);
|
1213
|
-
}
|
1214
|
-
gpr_mu_unlock(&pc->child_list_mu);
|
1215
|
-
}
|
1216
|
-
GRPC_ERROR_UNREF(error);
|
1217
|
-
error = GRPC_ERROR_NONE;
|
1124
|
+
gpr_atm_rel_store(&call->received_final_op_atm_, 1);
|
1125
|
+
call->PropagateCancellationToChildren();
|
1126
|
+
error = absl::OkStatus();
|
1218
1127
|
}
|
1219
|
-
if (error
|
1220
|
-
|
1221
|
-
|
1222
|
-
*call->receiving_buffer = nullptr;
|
1128
|
+
if (!error.ok() && op_.recv_message && *call->receiving_buffer_ != nullptr) {
|
1129
|
+
grpc_byte_buffer_destroy(*call->receiving_buffer_);
|
1130
|
+
*call->receiving_buffer_ = nullptr;
|
1223
1131
|
}
|
1224
|
-
|
1132
|
+
batch_error_.set(absl::OkStatus());
|
1225
1133
|
|
1226
|
-
if (
|
1134
|
+
if (completion_data_.notify_tag.is_closure) {
|
1227
1135
|
/* unrefs error */
|
1228
|
-
|
1229
|
-
|
1230
|
-
|
1231
|
-
|
1232
|
-
|
1233
|
-
GRPC_CALL_INTERNAL_UNREF(call, "completion");
|
1136
|
+
call_ = nullptr;
|
1137
|
+
Closure::Run(DEBUG_LOCATION,
|
1138
|
+
static_cast<grpc_closure*>(completion_data_.notify_tag.tag),
|
1139
|
+
error);
|
1140
|
+
call->InternalUnref("completion");
|
1234
1141
|
} else {
|
1235
1142
|
/* unrefs error */
|
1236
|
-
grpc_cq_end_op(
|
1237
|
-
|
1238
|
-
|
1239
|
-
|
1240
|
-
|
1241
|
-
|
1242
|
-
|
1243
|
-
|
1244
|
-
|
1143
|
+
grpc_cq_end_op(
|
1144
|
+
call->cq_, completion_data_.notify_tag.tag, error,
|
1145
|
+
[](void* user_data, grpc_cq_completion* /*storage*/) {
|
1146
|
+
BatchControl* bctl = static_cast<BatchControl*>(user_data);
|
1147
|
+
Call* call = bctl->call_;
|
1148
|
+
bctl->call_ = nullptr;
|
1149
|
+
call->InternalUnref("completion");
|
1150
|
+
},
|
1151
|
+
this, &completion_data_.cq_completion);
|
1245
1152
|
}
|
1246
1153
|
}
|
1247
1154
|
|
1248
|
-
|
1249
|
-
|
1250
|
-
|
1251
|
-
for (;;) {
|
1252
|
-
size_t remaining = call->receiving_stream->length() -
|
1253
|
-
(*call->receiving_buffer)->data.raw.slice_buffer.length;
|
1254
|
-
if (remaining == 0) {
|
1255
|
-
call->receiving_message = false;
|
1256
|
-
call->receiving_stream.reset();
|
1257
|
-
finish_batch_step(bctl);
|
1258
|
-
return;
|
1259
|
-
}
|
1260
|
-
if (call->receiving_stream->Next(remaining, &call->receiving_slice_ready)) {
|
1261
|
-
error = call->receiving_stream->Pull(&call->receiving_slice);
|
1262
|
-
if (error == GRPC_ERROR_NONE) {
|
1263
|
-
grpc_slice_buffer_add(&(*call->receiving_buffer)->data.raw.slice_buffer,
|
1264
|
-
call->receiving_slice);
|
1265
|
-
} else {
|
1266
|
-
call->receiving_stream.reset();
|
1267
|
-
grpc_byte_buffer_destroy(*call->receiving_buffer);
|
1268
|
-
*call->receiving_buffer = nullptr;
|
1269
|
-
call->receiving_message = false;
|
1270
|
-
finish_batch_step(bctl);
|
1271
|
-
GRPC_ERROR_UNREF(error);
|
1272
|
-
return;
|
1273
|
-
}
|
1274
|
-
} else {
|
1275
|
-
return;
|
1276
|
-
}
|
1277
|
-
}
|
1278
|
-
}
|
1279
|
-
|
1280
|
-
static void receiving_slice_ready(void* bctlp, grpc_error_handle error) {
|
1281
|
-
batch_control* bctl = static_cast<batch_control*>(bctlp);
|
1282
|
-
grpc_call* call = bctl->call;
|
1283
|
-
bool release_error = false;
|
1284
|
-
|
1285
|
-
if (error == GRPC_ERROR_NONE) {
|
1286
|
-
grpc_slice slice;
|
1287
|
-
error = call->receiving_stream->Pull(&slice);
|
1288
|
-
if (error == GRPC_ERROR_NONE) {
|
1289
|
-
grpc_slice_buffer_add(&(*call->receiving_buffer)->data.raw.slice_buffer,
|
1290
|
-
slice);
|
1291
|
-
continue_receiving_slices(bctl);
|
1292
|
-
} else {
|
1293
|
-
/* Error returned by ByteStream::Pull() needs to be released manually */
|
1294
|
-
release_error = true;
|
1295
|
-
}
|
1296
|
-
}
|
1297
|
-
|
1298
|
-
if (error != GRPC_ERROR_NONE) {
|
1299
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_operation_failures)) {
|
1300
|
-
GRPC_LOG_IF_ERROR("receiving_slice_ready", GRPC_ERROR_REF(error));
|
1301
|
-
}
|
1302
|
-
call->receiving_stream.reset();
|
1303
|
-
grpc_byte_buffer_destroy(*call->receiving_buffer);
|
1304
|
-
*call->receiving_buffer = nullptr;
|
1305
|
-
call->receiving_message = false;
|
1306
|
-
finish_batch_step(bctl);
|
1307
|
-
if (release_error) {
|
1308
|
-
GRPC_ERROR_UNREF(error);
|
1309
|
-
}
|
1155
|
+
void FilterStackCall::BatchControl::FinishStep() {
|
1156
|
+
if (GPR_UNLIKELY(completed_batch_step())) {
|
1157
|
+
PostCompletion();
|
1310
1158
|
}
|
1311
1159
|
}
|
1312
1160
|
|
1313
|
-
|
1314
|
-
|
1315
|
-
if (call->
|
1316
|
-
*call->
|
1317
|
-
call->
|
1318
|
-
|
1161
|
+
void FilterStackCall::BatchControl::ProcessDataAfterMetadata() {
|
1162
|
+
FilterStackCall* call = call_;
|
1163
|
+
if (!call->receiving_slice_buffer_.has_value()) {
|
1164
|
+
*call->receiving_buffer_ = nullptr;
|
1165
|
+
call->receiving_message_ = false;
|
1166
|
+
FinishStep();
|
1319
1167
|
} else {
|
1320
|
-
call->
|
1321
|
-
if ((call->
|
1322
|
-
(call->
|
1323
|
-
|
1324
|
-
|
1325
|
-
GPR_ASSERT(
|
1326
|
-
grpc_compression_algorithm_from_message_stream_compression_algorithm(
|
1327
|
-
&algo, call->incoming_message_compression_algorithm,
|
1328
|
-
(grpc_stream_compression_algorithm)0));
|
1329
|
-
*call->receiving_buffer =
|
1330
|
-
grpc_raw_compressed_byte_buffer_create(nullptr, 0, algo);
|
1168
|
+
call->test_only_last_message_flags_ = call->receiving_stream_flags_;
|
1169
|
+
if ((call->receiving_stream_flags_ & GRPC_WRITE_INTERNAL_COMPRESS) &&
|
1170
|
+
(call->incoming_compression_algorithm_ != GRPC_COMPRESS_NONE)) {
|
1171
|
+
*call->receiving_buffer_ = grpc_raw_compressed_byte_buffer_create(
|
1172
|
+
nullptr, 0, call->incoming_compression_algorithm_);
|
1331
1173
|
} else {
|
1332
|
-
*call->
|
1174
|
+
*call->receiving_buffer_ = grpc_raw_byte_buffer_create(nullptr, 0);
|
1333
1175
|
}
|
1334
|
-
|
1335
|
-
|
1336
|
-
|
1337
|
-
|
1338
|
-
|
1339
|
-
|
1340
|
-
|
1341
|
-
|
1342
|
-
|
1343
|
-
|
1344
|
-
|
1345
|
-
|
1346
|
-
|
1176
|
+
grpc_slice_buffer_move_into(
|
1177
|
+
call->receiving_slice_buffer_->c_slice_buffer(),
|
1178
|
+
&(*call->receiving_buffer_)->data.raw.slice_buffer);
|
1179
|
+
call->receiving_message_ = false;
|
1180
|
+
call->receiving_slice_buffer_.reset();
|
1181
|
+
FinishStep();
|
1182
|
+
}
|
1183
|
+
}
|
1184
|
+
|
1185
|
+
void FilterStackCall::BatchControl::ReceivingStreamReady(
|
1186
|
+
grpc_error_handle error) {
|
1187
|
+
FilterStackCall* call = call_;
|
1188
|
+
if (!error.ok()) {
|
1189
|
+
call->receiving_slice_buffer_.reset();
|
1190
|
+
if (batch_error_.ok()) {
|
1191
|
+
batch_error_.set(error);
|
1347
1192
|
}
|
1348
|
-
|
1193
|
+
call->CancelWithError(error);
|
1349
1194
|
}
|
1350
|
-
/* If recv_state is
|
1195
|
+
/* If recv_state is kRecvNone, we will save the batch_control
|
1351
1196
|
* object with rel_cas, and will not use it after the cas. Its corresponding
|
1352
1197
|
* acq_load is in receiving_initial_metadata_ready() */
|
1353
|
-
if (error
|
1354
|
-
!gpr_atm_rel_cas(&call->
|
1355
|
-
reinterpret_cast<gpr_atm>(
|
1356
|
-
|
1357
|
-
}
|
1358
|
-
}
|
1359
|
-
|
1360
|
-
// The recv_message_ready callback used when sending a batch containing
|
1361
|
-
// a recv_message op down the filter stack. Yields the call combiner
|
1362
|
-
// before processing the received message.
|
1363
|
-
static void receiving_stream_ready_in_call_combiner(void* bctlp,
|
1364
|
-
grpc_error_handle error) {
|
1365
|
-
batch_control* bctl = static_cast<batch_control*>(bctlp);
|
1366
|
-
grpc_call* call = bctl->call;
|
1367
|
-
GRPC_CALL_COMBINER_STOP(&call->call_combiner, "recv_message_ready");
|
1368
|
-
receiving_stream_ready(bctlp, error);
|
1369
|
-
}
|
1370
|
-
|
1371
|
-
static void GPR_ATTRIBUTE_NOINLINE
|
1372
|
-
handle_both_stream_and_msg_compression_set(grpc_call* call) {
|
1373
|
-
std::string error_msg = absl::StrFormat(
|
1374
|
-
"Incoming stream has both stream compression (%d) and message "
|
1375
|
-
"compression (%d).",
|
1376
|
-
call->incoming_stream_compression_algorithm,
|
1377
|
-
call->incoming_message_compression_algorithm);
|
1378
|
-
gpr_log(GPR_ERROR, "%s", error_msg.c_str());
|
1379
|
-
cancel_with_status(call, GRPC_STATUS_INTERNAL, error_msg.c_str());
|
1380
|
-
}
|
1381
|
-
|
1382
|
-
static void GPR_ATTRIBUTE_NOINLINE
|
1383
|
-
handle_error_parsing_compression_algorithm(grpc_call* call) {
|
1384
|
-
std::string error_msg = absl::StrFormat(
|
1385
|
-
"Error in incoming message compression (%d) or stream "
|
1386
|
-
"compression (%d).",
|
1387
|
-
call->incoming_stream_compression_algorithm,
|
1388
|
-
call->incoming_message_compression_algorithm);
|
1389
|
-
cancel_with_status(call, GRPC_STATUS_INTERNAL, error_msg.c_str());
|
1390
|
-
}
|
1391
|
-
|
1392
|
-
static void GPR_ATTRIBUTE_NOINLINE handle_invalid_compression(
|
1393
|
-
grpc_call* call, grpc_compression_algorithm compression_algorithm) {
|
1394
|
-
std::string error_msg = absl::StrFormat(
|
1395
|
-
"Invalid compression algorithm value '%d'.", compression_algorithm);
|
1396
|
-
gpr_log(GPR_ERROR, "%s", error_msg.c_str());
|
1397
|
-
cancel_with_status(call, GRPC_STATUS_UNIMPLEMENTED, error_msg.c_str());
|
1198
|
+
if (!error.ok() || !call->receiving_slice_buffer_.has_value() ||
|
1199
|
+
!gpr_atm_rel_cas(&call->recv_state_, kRecvNone,
|
1200
|
+
reinterpret_cast<gpr_atm>(this))) {
|
1201
|
+
ProcessDataAfterMetadata();
|
1202
|
+
}
|
1398
1203
|
}
|
1399
1204
|
|
1400
|
-
|
1401
|
-
|
1205
|
+
void FilterStackCall::HandleCompressionAlgorithmDisabled(
|
1206
|
+
grpc_compression_algorithm compression_algorithm) {
|
1402
1207
|
const char* algo_name = nullptr;
|
1403
1208
|
grpc_compression_algorithm_name(compression_algorithm, &algo_name);
|
1404
1209
|
std::string error_msg =
|
1405
1210
|
absl::StrFormat("Compression algorithm '%s' is disabled.", algo_name);
|
1406
1211
|
gpr_log(GPR_ERROR, "%s", error_msg.c_str());
|
1407
|
-
|
1212
|
+
CancelWithStatus(GRPC_STATUS_UNIMPLEMENTED, error_msg.c_str());
|
1408
1213
|
}
|
1409
1214
|
|
1410
|
-
|
1411
|
-
|
1215
|
+
void FilterStackCall::HandleCompressionAlgorithmNotAccepted(
|
1216
|
+
grpc_compression_algorithm compression_algorithm) {
|
1412
1217
|
const char* algo_name = nullptr;
|
1413
1218
|
grpc_compression_algorithm_name(compression_algorithm, &algo_name);
|
1414
1219
|
gpr_log(GPR_ERROR,
|
1415
|
-
"Compression algorithm ('%s') not present in the
|
1416
|
-
"accepted encodings (
|
1417
|
-
algo_name,
|
1418
|
-
|
1419
|
-
|
1420
|
-
|
1421
|
-
|
1422
|
-
|
1423
|
-
|
1424
|
-
|
1425
|
-
|
1426
|
-
|
1427
|
-
|
1428
|
-
|
1429
|
-
|
1430
|
-
|
1431
|
-
|
1432
|
-
|
1433
|
-
|
1434
|
-
|
1435
|
-
|
1436
|
-
|
1437
|
-
|
1438
|
-
if (
|
1439
|
-
|
1440
|
-
} else if (GPR_UNLIKELY(
|
1441
|
-
grpc_compression_options_is_algorithm_enabled_internal(
|
1442
|
-
&compression_options, compression_algorithm) == 0)) {
|
1443
|
-
/* check if algorithm is supported by current channel config */
|
1444
|
-
handle_compression_algorithm_disabled(call, compression_algorithm);
|
1445
|
-
}
|
1446
|
-
/* GRPC_COMPRESS_NONE is always set. */
|
1447
|
-
GPR_DEBUG_ASSERT(call->encodings_accepted_by_peer != 0);
|
1448
|
-
if (GPR_UNLIKELY(!grpc_core::GetBit(call->encodings_accepted_by_peer,
|
1449
|
-
compression_algorithm))) {
|
1450
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
|
1451
|
-
handle_compression_algorithm_not_accepted(call, compression_algorithm);
|
1452
|
-
}
|
1220
|
+
"Compression algorithm ('%s') not present in the "
|
1221
|
+
"accepted encodings (%s)",
|
1222
|
+
algo_name,
|
1223
|
+
std::string(encodings_accepted_by_peer_.ToString()).c_str());
|
1224
|
+
}
|
1225
|
+
|
1226
|
+
void FilterStackCall::BatchControl::ValidateFilteredMetadata() {
|
1227
|
+
FilterStackCall* call = call_;
|
1228
|
+
|
1229
|
+
const grpc_compression_options compression_options =
|
1230
|
+
call->channel()->compression_options();
|
1231
|
+
const grpc_compression_algorithm compression_algorithm =
|
1232
|
+
call->incoming_compression_algorithm_;
|
1233
|
+
if (GPR_UNLIKELY(!CompressionAlgorithmSet::FromUint32(
|
1234
|
+
compression_options.enabled_algorithms_bitset)
|
1235
|
+
.IsSet(compression_algorithm))) {
|
1236
|
+
/* check if algorithm is supported by current channel config */
|
1237
|
+
call->HandleCompressionAlgorithmDisabled(compression_algorithm);
|
1238
|
+
}
|
1239
|
+
/* GRPC_COMPRESS_NONE is always set. */
|
1240
|
+
GPR_DEBUG_ASSERT(call->encodings_accepted_by_peer_.IsSet(GRPC_COMPRESS_NONE));
|
1241
|
+
if (GPR_UNLIKELY(
|
1242
|
+
!call->encodings_accepted_by_peer_.IsSet(compression_algorithm))) {
|
1243
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
|
1244
|
+
call->HandleCompressionAlgorithmNotAccepted(compression_algorithm);
|
1453
1245
|
}
|
1454
1246
|
}
|
1455
1247
|
}
|
1456
1248
|
|
1457
|
-
|
1458
|
-
|
1459
|
-
|
1460
|
-
grpc_call* call = bctl->call;
|
1249
|
+
void FilterStackCall::BatchControl::ReceivingInitialMetadataReady(
|
1250
|
+
grpc_error_handle error) {
|
1251
|
+
FilterStackCall* call = call_;
|
1461
1252
|
|
1462
|
-
GRPC_CALL_COMBINER_STOP(
|
1253
|
+
GRPC_CALL_COMBINER_STOP(call->call_combiner(), "recv_initial_metadata_ready");
|
1463
1254
|
|
1464
|
-
if (error
|
1465
|
-
grpc_metadata_batch* md = &call->
|
1466
|
-
|
1255
|
+
if (error.ok()) {
|
1256
|
+
grpc_metadata_batch* md = &call->recv_initial_metadata_;
|
1257
|
+
call->RecvInitialFilter(md);
|
1467
1258
|
|
1468
1259
|
/* TODO(ctiller): this could be moved into recv_initial_filter now */
|
1469
|
-
|
1470
|
-
validate_filtered_metadata(bctl);
|
1260
|
+
ValidateFilteredMetadata();
|
1471
1261
|
|
1472
|
-
absl::optional<
|
1473
|
-
|
1474
|
-
|
1475
|
-
call->send_deadline = *deadline;
|
1262
|
+
absl::optional<Timestamp> deadline = md->get(GrpcTimeoutMetadata());
|
1263
|
+
if (deadline.has_value() && !call->is_client()) {
|
1264
|
+
call_->set_send_deadline(*deadline);
|
1476
1265
|
}
|
1477
1266
|
} else {
|
1478
|
-
if (
|
1479
|
-
|
1267
|
+
if (batch_error_.ok()) {
|
1268
|
+
batch_error_.set(error);
|
1480
1269
|
}
|
1481
|
-
|
1270
|
+
call->CancelWithError(error);
|
1482
1271
|
}
|
1483
1272
|
|
1484
1273
|
grpc_closure* saved_rsr_closure = nullptr;
|
1485
1274
|
while (true) {
|
1486
|
-
gpr_atm rsr_bctlp = gpr_atm_acq_load(&call->
|
1275
|
+
gpr_atm rsr_bctlp = gpr_atm_acq_load(&call->recv_state_);
|
1487
1276
|
/* Should only receive initial metadata once */
|
1488
1277
|
GPR_ASSERT(rsr_bctlp != 1);
|
1489
1278
|
if (rsr_bctlp == 0) {
|
@@ -1492,96 +1281,105 @@ static void receiving_initial_metadata_ready(void* bctlp,
|
|
1492
1281
|
* no_barrier_cas is used, as this function won't access the batch_control
|
1493
1282
|
* object saved by receiving_stream_ready() if the initial metadata is
|
1494
1283
|
* received first. */
|
1495
|
-
if (gpr_atm_no_barrier_cas(&call->
|
1496
|
-
|
1284
|
+
if (gpr_atm_no_barrier_cas(&call->recv_state_, kRecvNone,
|
1285
|
+
kRecvInitialMetadataFirst)) {
|
1497
1286
|
break;
|
1498
1287
|
}
|
1499
1288
|
} else {
|
1500
1289
|
/* Already received messages */
|
1501
|
-
saved_rsr_closure =
|
1502
|
-
|
1503
|
-
|
1290
|
+
saved_rsr_closure = GRPC_CLOSURE_CREATE(
|
1291
|
+
[](void* bctl, grpc_error_handle error) {
|
1292
|
+
static_cast<BatchControl*>(bctl)->ReceivingStreamReady(error);
|
1293
|
+
},
|
1294
|
+
reinterpret_cast<BatchControl*>(rsr_bctlp),
|
1295
|
+
grpc_schedule_on_exec_ctx);
|
1504
1296
|
/* No need to modify recv_state */
|
1505
1297
|
break;
|
1506
1298
|
}
|
1507
1299
|
}
|
1508
1300
|
if (saved_rsr_closure != nullptr) {
|
1509
|
-
|
1510
|
-
GRPC_ERROR_REF(error));
|
1301
|
+
Closure::Run(DEBUG_LOCATION, saved_rsr_closure, error);
|
1511
1302
|
}
|
1512
1303
|
|
1513
|
-
|
1304
|
+
FinishStep();
|
1514
1305
|
}
|
1515
1306
|
|
1516
|
-
|
1517
|
-
|
1518
|
-
|
1519
|
-
|
1520
|
-
|
1521
|
-
|
1522
|
-
|
1523
|
-
finish_batch_step(bctl);
|
1307
|
+
void FilterStackCall::BatchControl::ReceivingTrailingMetadataReady(
|
1308
|
+
grpc_error_handle error) {
|
1309
|
+
GRPC_CALL_COMBINER_STOP(call_->call_combiner(),
|
1310
|
+
"recv_trailing_metadata_ready");
|
1311
|
+
grpc_metadata_batch* md = &call_->recv_trailing_metadata_;
|
1312
|
+
call_->RecvTrailingFilter(md, error);
|
1313
|
+
FinishStep();
|
1524
1314
|
}
|
1525
1315
|
|
1526
|
-
|
1527
|
-
|
1528
|
-
|
1529
|
-
|
1530
|
-
if (bctl->batch_error.ok()) {
|
1531
|
-
bctl->batch_error.set(error);
|
1316
|
+
void FilterStackCall::BatchControl::FinishBatch(grpc_error_handle error) {
|
1317
|
+
GRPC_CALL_COMBINER_STOP(call_->call_combiner(), "on_complete");
|
1318
|
+
if (batch_error_.ok()) {
|
1319
|
+
batch_error_.set(error);
|
1532
1320
|
}
|
1533
|
-
if (error
|
1534
|
-
|
1321
|
+
if (!error.ok()) {
|
1322
|
+
call_->CancelWithError(error);
|
1535
1323
|
}
|
1536
|
-
|
1324
|
+
FinishStep();
|
1537
1325
|
}
|
1538
1326
|
|
1539
|
-
|
1540
|
-
|
1327
|
+
namespace {
|
1328
|
+
void EndOpImmediately(grpc_completion_queue* cq, void* notify_tag,
|
1329
|
+
bool is_notify_tag_closure) {
|
1330
|
+
if (!is_notify_tag_closure) {
|
1331
|
+
GPR_ASSERT(grpc_cq_begin_op(cq, notify_tag));
|
1332
|
+
grpc_cq_end_op(
|
1333
|
+
cq, notify_tag, absl::OkStatus(),
|
1334
|
+
[](void*, grpc_cq_completion* completion) { gpr_free(completion); },
|
1335
|
+
nullptr,
|
1336
|
+
static_cast<grpc_cq_completion*>(
|
1337
|
+
gpr_malloc(sizeof(grpc_cq_completion))));
|
1338
|
+
} else {
|
1339
|
+
Closure::Run(DEBUG_LOCATION, static_cast<grpc_closure*>(notify_tag),
|
1340
|
+
absl::OkStatus());
|
1341
|
+
}
|
1541
1342
|
}
|
1343
|
+
} // namespace
|
1542
1344
|
|
1543
|
-
|
1544
|
-
|
1545
|
-
|
1546
|
-
GPR_TIMER_SCOPE("call_start_batch", 0);
|
1547
|
-
|
1345
|
+
grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
1346
|
+
void* notify_tag,
|
1347
|
+
bool is_notify_tag_closure) {
|
1548
1348
|
size_t i;
|
1549
1349
|
const grpc_op* op;
|
1550
|
-
|
1350
|
+
BatchControl* bctl;
|
1551
1351
|
bool has_send_ops = false;
|
1552
1352
|
int num_recv_ops = 0;
|
1553
1353
|
grpc_call_error error = GRPC_CALL_OK;
|
1554
1354
|
grpc_transport_stream_op_batch* stream_op;
|
1555
1355
|
grpc_transport_stream_op_batch_payload* stream_op_payload;
|
1356
|
+
uint32_t seen_ops = 0;
|
1357
|
+
|
1358
|
+
for (i = 0; i < nops; i++) {
|
1359
|
+
if (seen_ops & (1u << ops[i].op)) {
|
1360
|
+
return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
|
1361
|
+
}
|
1362
|
+
seen_ops |= (1u << ops[i].op);
|
1363
|
+
}
|
1556
1364
|
|
1557
1365
|
GRPC_CALL_LOG_BATCH(GPR_INFO, ops, nops);
|
1558
1366
|
|
1559
1367
|
if (nops == 0) {
|
1560
|
-
|
1561
|
-
GPR_ASSERT(grpc_cq_begin_op(call->cq, notify_tag));
|
1562
|
-
grpc_cq_end_op(call->cq, notify_tag, GRPC_ERROR_NONE,
|
1563
|
-
free_no_op_completion, nullptr,
|
1564
|
-
static_cast<grpc_cq_completion*>(
|
1565
|
-
gpr_malloc(sizeof(grpc_cq_completion))));
|
1566
|
-
} else {
|
1567
|
-
grpc_core::Closure::Run(DEBUG_LOCATION,
|
1568
|
-
static_cast<grpc_closure*>(notify_tag),
|
1569
|
-
GRPC_ERROR_NONE);
|
1570
|
-
}
|
1368
|
+
EndOpImmediately(cq_, notify_tag, is_notify_tag_closure);
|
1571
1369
|
error = GRPC_CALL_OK;
|
1572
1370
|
goto done;
|
1573
1371
|
}
|
1574
1372
|
|
1575
|
-
bctl =
|
1373
|
+
bctl = ReuseOrAllocateBatchControl(ops);
|
1576
1374
|
if (bctl == nullptr) {
|
1577
1375
|
return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
|
1578
1376
|
}
|
1579
|
-
bctl->
|
1580
|
-
bctl->
|
1377
|
+
bctl->completion_data_.notify_tag.tag = notify_tag;
|
1378
|
+
bctl->completion_data_.notify_tag.is_closure =
|
1581
1379
|
static_cast<uint8_t>(is_notify_tag_closure != 0);
|
1582
1380
|
|
1583
|
-
stream_op = &bctl->
|
1584
|
-
stream_op_payload = &
|
1381
|
+
stream_op = &bctl->op_;
|
1382
|
+
stream_op_payload = &stream_op_payload_;
|
1585
1383
|
|
1586
1384
|
/* rewrite batch ops into a transport op */
|
1587
1385
|
for (i = 0; i < nops; i++) {
|
@@ -1593,11 +1391,11 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
|
|
1593
1391
|
switch (op->op) {
|
1594
1392
|
case GRPC_OP_SEND_INITIAL_METADATA: {
|
1595
1393
|
/* Flag validation: currently allow no flags */
|
1596
|
-
if (!
|
1394
|
+
if (!AreInitialMetadataFlagsValid(op->flags)) {
|
1597
1395
|
error = GRPC_CALL_ERROR_INVALID_FLAGS;
|
1598
1396
|
goto done_with_error;
|
1599
1397
|
}
|
1600
|
-
if (
|
1398
|
+
if (sent_initial_metadata_) {
|
1601
1399
|
error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
|
1602
1400
|
goto done_with_error;
|
1603
1401
|
}
|
@@ -1606,10 +1404,6 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
|
|
1606
1404
|
// GRPC_COMPRESSION_REQUEST_ALGORITHM_MD_KEY, we shouldn't override that
|
1607
1405
|
// with the compression algorithm mapped from compression level.
|
1608
1406
|
/* process compression level */
|
1609
|
-
grpc_metadata& compression_md = call->compression_md;
|
1610
|
-
compression_md.key = grpc_empty_slice();
|
1611
|
-
compression_md.value = grpc_empty_slice();
|
1612
|
-
size_t additional_metadata_count = 0;
|
1613
1407
|
grpc_compression_level effective_compression_level =
|
1614
1408
|
GRPC_COMPRESS_LEVEL_NONE;
|
1615
1409
|
bool level_set = false;
|
@@ -1619,56 +1413,59 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
|
|
1619
1413
|
level_set = true;
|
1620
1414
|
} else {
|
1621
1415
|
const grpc_compression_options copts =
|
1622
|
-
|
1416
|
+
channel()->compression_options();
|
1623
1417
|
if (copts.default_level.is_set) {
|
1624
1418
|
level_set = true;
|
1625
1419
|
effective_compression_level = copts.default_level.level;
|
1626
1420
|
}
|
1627
1421
|
}
|
1628
1422
|
// Currently, only server side supports compression level setting.
|
1629
|
-
if (level_set && !
|
1423
|
+
if (level_set && !is_client()) {
|
1630
1424
|
const grpc_compression_algorithm calgo =
|
1631
|
-
|
1632
|
-
|
1425
|
+
encodings_accepted_by_peer_.CompressionAlgorithmForLevel(
|
1426
|
+
effective_compression_level);
|
1633
1427
|
// The following metadata will be checked and removed by the message
|
1634
1428
|
// compression filter. It will be used as the call's compression
|
1635
1429
|
// algorithm.
|
1636
|
-
|
1637
|
-
compression_md.value = grpc_compression_algorithm_slice(calgo);
|
1638
|
-
additional_metadata_count++;
|
1430
|
+
send_initial_metadata_.Set(GrpcInternalEncodingRequest(), calgo);
|
1639
1431
|
}
|
1640
|
-
if (op->data.send_initial_metadata.count
|
1641
|
-
INT_MAX) {
|
1432
|
+
if (op->data.send_initial_metadata.count > INT_MAX) {
|
1642
1433
|
error = GRPC_CALL_ERROR_INVALID_METADATA;
|
1643
1434
|
goto done_with_error;
|
1644
1435
|
}
|
1645
1436
|
stream_op->send_initial_metadata = true;
|
1646
|
-
|
1647
|
-
if (!
|
1648
|
-
|
1649
|
-
|
1650
|
-
&compression_md, static_cast<int>(additional_metadata_count))) {
|
1437
|
+
sent_initial_metadata_ = true;
|
1438
|
+
if (!PrepareApplicationMetadata(op->data.send_initial_metadata.count,
|
1439
|
+
op->data.send_initial_metadata.metadata,
|
1440
|
+
false)) {
|
1651
1441
|
error = GRPC_CALL_ERROR_INVALID_METADATA;
|
1652
1442
|
goto done_with_error;
|
1653
1443
|
}
|
1444
|
+
// Ignore any te metadata key value pairs specified.
|
1445
|
+
send_initial_metadata_.Remove(TeMetadata());
|
1654
1446
|
/* TODO(ctiller): just make these the same variable? */
|
1655
|
-
if (
|
1656
|
-
|
1657
|
-
|
1447
|
+
if (is_client() && send_deadline() != Timestamp::InfFuture()) {
|
1448
|
+
send_initial_metadata_.Set(GrpcTimeoutMetadata(), send_deadline());
|
1449
|
+
}
|
1450
|
+
if (is_client()) {
|
1451
|
+
send_initial_metadata_.Set(
|
1452
|
+
WaitForReady(),
|
1453
|
+
WaitForReady::ValueType{
|
1454
|
+
(op->flags & GRPC_INITIAL_METADATA_WAIT_FOR_READY) != 0,
|
1455
|
+
(op->flags &
|
1456
|
+
GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET) != 0});
|
1658
1457
|
}
|
1659
1458
|
stream_op_payload->send_initial_metadata.send_initial_metadata =
|
1660
|
-
&
|
1661
|
-
|
1662
|
-
op->flags;
|
1663
|
-
if (call->is_client) {
|
1459
|
+
&send_initial_metadata_;
|
1460
|
+
if (is_client()) {
|
1664
1461
|
stream_op_payload->send_initial_metadata.peer_string =
|
1665
|
-
|
1462
|
+
peer_string_atm_ptr();
|
1666
1463
|
}
|
1667
1464
|
has_send_ops = true;
|
1668
1465
|
break;
|
1669
1466
|
}
|
1670
1467
|
case GRPC_OP_SEND_MESSAGE: {
|
1671
|
-
if (!
|
1468
|
+
if (!AreWriteFlagsValid(op->flags)) {
|
1672
1469
|
error = GRPC_CALL_ERROR_INVALID_FLAGS;
|
1673
1470
|
goto done_with_error;
|
1674
1471
|
}
|
@@ -1676,7 +1473,7 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
|
|
1676
1473
|
error = GRPC_CALL_ERROR_INVALID_MESSAGE;
|
1677
1474
|
goto done_with_error;
|
1678
1475
|
}
|
1679
|
-
if (
|
1476
|
+
if (sending_message_) {
|
1680
1477
|
error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
|
1681
1478
|
goto done_with_error;
|
1682
1479
|
}
|
@@ -1689,11 +1486,13 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
|
|
1689
1486
|
flags |= GRPC_WRITE_INTERNAL_COMPRESS;
|
1690
1487
|
}
|
1691
1488
|
stream_op->send_message = true;
|
1692
|
-
|
1693
|
-
|
1694
|
-
|
1695
|
-
|
1696
|
-
|
1489
|
+
sending_message_ = true;
|
1490
|
+
send_slice_buffer_.Clear();
|
1491
|
+
grpc_slice_buffer_move_into(
|
1492
|
+
&op->data.send_message.send_message->data.raw.slice_buffer,
|
1493
|
+
send_slice_buffer_.c_slice_buffer());
|
1494
|
+
stream_op_payload->send_message.flags = flags;
|
1495
|
+
stream_op_payload->send_message.send_message = &send_slice_buffer_;
|
1697
1496
|
has_send_ops = true;
|
1698
1497
|
break;
|
1699
1498
|
}
|
@@ -1703,18 +1502,18 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
|
|
1703
1502
|
error = GRPC_CALL_ERROR_INVALID_FLAGS;
|
1704
1503
|
goto done_with_error;
|
1705
1504
|
}
|
1706
|
-
if (!
|
1505
|
+
if (!is_client()) {
|
1707
1506
|
error = GRPC_CALL_ERROR_NOT_ON_SERVER;
|
1708
1507
|
goto done_with_error;
|
1709
1508
|
}
|
1710
|
-
if (
|
1509
|
+
if (sent_final_op_) {
|
1711
1510
|
error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
|
1712
1511
|
goto done_with_error;
|
1713
1512
|
}
|
1714
1513
|
stream_op->send_trailing_metadata = true;
|
1715
|
-
|
1514
|
+
sent_final_op_ = true;
|
1716
1515
|
stream_op_payload->send_trailing_metadata.send_trailing_metadata =
|
1717
|
-
&
|
1516
|
+
&send_trailing_metadata_;
|
1718
1517
|
has_send_ops = true;
|
1719
1518
|
break;
|
1720
1519
|
}
|
@@ -1724,11 +1523,11 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
|
|
1724
1523
|
error = GRPC_CALL_ERROR_INVALID_FLAGS;
|
1725
1524
|
goto done_with_error;
|
1726
1525
|
}
|
1727
|
-
if (
|
1526
|
+
if (is_client()) {
|
1728
1527
|
error = GRPC_CALL_ERROR_NOT_ON_CLIENT;
|
1729
1528
|
goto done_with_error;
|
1730
1529
|
}
|
1731
|
-
if (
|
1530
|
+
if (sent_final_op_) {
|
1732
1531
|
error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
|
1733
1532
|
goto done_with_error;
|
1734
1533
|
}
|
@@ -1738,55 +1537,47 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
|
|
1738
1537
|
goto done_with_error;
|
1739
1538
|
}
|
1740
1539
|
stream_op->send_trailing_metadata = true;
|
1741
|
-
|
1742
|
-
|
1743
|
-
|
1744
|
-
|
1745
|
-
|
1540
|
+
sent_final_op_ = true;
|
1541
|
+
|
1542
|
+
if (!PrepareApplicationMetadata(
|
1543
|
+
op->data.send_status_from_server.trailing_metadata_count,
|
1544
|
+
op->data.send_status_from_server.trailing_metadata, true)) {
|
1545
|
+
error = GRPC_CALL_ERROR_INVALID_METADATA;
|
1546
|
+
goto done_with_error;
|
1547
|
+
}
|
1548
|
+
|
1746
1549
|
grpc_error_handle status_error =
|
1747
1550
|
op->data.send_status_from_server.status == GRPC_STATUS_OK
|
1748
|
-
?
|
1551
|
+
? absl::OkStatus()
|
1749
1552
|
: grpc_error_set_int(
|
1750
|
-
|
1751
|
-
|
1752
|
-
GRPC_ERROR_INT_GRPC_STATUS,
|
1553
|
+
GRPC_ERROR_CREATE("Server returned error"),
|
1554
|
+
StatusIntProperty::kRpcStatus,
|
1753
1555
|
static_cast<intptr_t>(
|
1754
1556
|
op->data.send_status_from_server.status));
|
1755
1557
|
if (op->data.send_status_from_server.status_details != nullptr) {
|
1756
|
-
|
1757
|
-
|
1758
|
-
grpc_slice_copy(
|
1759
|
-
*op->data.send_status_from_server.status_details));
|
1760
|
-
|
1761
|
-
|
1762
|
-
|
1763
|
-
|
1764
|
-
|
1765
|
-
GRPC_ERROR_STR_GRPC_MESSAGE, msg);
|
1766
|
-
gpr_free(msg);
|
1558
|
+
send_trailing_metadata_.Set(
|
1559
|
+
GrpcMessageMetadata(),
|
1560
|
+
Slice(grpc_slice_copy(
|
1561
|
+
*op->data.send_status_from_server.status_details)));
|
1562
|
+
if (!status_error.ok()) {
|
1563
|
+
status_error = grpc_error_set_str(
|
1564
|
+
status_error, StatusStrProperty::kGrpcMessage,
|
1565
|
+
StringViewFromSlice(
|
1566
|
+
*op->data.send_status_from_server.status_details));
|
1767
1567
|
}
|
1768
1568
|
}
|
1769
1569
|
|
1770
|
-
|
1771
|
-
|
1772
|
-
|
1773
|
-
|
1774
|
-
|
1775
|
-
|
1776
|
-
|
1777
|
-
op->data.send_status_from_server.trailing_metadata, 1, 1,
|
1778
|
-
nullptr, 0)) {
|
1779
|
-
for (int n = 0; n < call->send_extra_metadata_count; n++) {
|
1780
|
-
GRPC_MDELEM_UNREF(call->send_extra_metadata[n].md);
|
1781
|
-
}
|
1782
|
-
call->send_extra_metadata_count = 0;
|
1783
|
-
error = GRPC_CALL_ERROR_INVALID_METADATA;
|
1784
|
-
goto done_with_error;
|
1785
|
-
}
|
1570
|
+
status_error_.set(status_error);
|
1571
|
+
|
1572
|
+
send_trailing_metadata_.Set(GrpcStatusMetadata(),
|
1573
|
+
op->data.send_status_from_server.status);
|
1574
|
+
|
1575
|
+
// Ignore any te metadata key value pairs specified.
|
1576
|
+
send_trailing_metadata_.Remove(TeMetadata());
|
1786
1577
|
stream_op_payload->send_trailing_metadata.send_trailing_metadata =
|
1787
|
-
&
|
1578
|
+
&send_trailing_metadata_;
|
1788
1579
|
stream_op_payload->send_trailing_metadata.sent =
|
1789
|
-
&
|
1580
|
+
&sent_server_trailing_metadata_;
|
1790
1581
|
has_send_ops = true;
|
1791
1582
|
break;
|
1792
1583
|
}
|
@@ -1796,27 +1587,31 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
|
|
1796
1587
|
error = GRPC_CALL_ERROR_INVALID_FLAGS;
|
1797
1588
|
goto done_with_error;
|
1798
1589
|
}
|
1799
|
-
if (
|
1590
|
+
if (received_initial_metadata_) {
|
1800
1591
|
error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
|
1801
1592
|
goto done_with_error;
|
1802
1593
|
}
|
1803
|
-
|
1804
|
-
|
1594
|
+
received_initial_metadata_ = true;
|
1595
|
+
buffered_metadata_[0] =
|
1805
1596
|
op->data.recv_initial_metadata.recv_initial_metadata;
|
1806
|
-
GRPC_CLOSURE_INIT(
|
1807
|
-
|
1808
|
-
|
1597
|
+
GRPC_CLOSURE_INIT(
|
1598
|
+
&receiving_initial_metadata_ready_,
|
1599
|
+
[](void* bctl, grpc_error_handle error) {
|
1600
|
+
static_cast<BatchControl*>(bctl)->ReceivingInitialMetadataReady(
|
1601
|
+
error);
|
1602
|
+
},
|
1603
|
+
bctl, grpc_schedule_on_exec_ctx);
|
1809
1604
|
stream_op->recv_initial_metadata = true;
|
1810
1605
|
stream_op_payload->recv_initial_metadata.recv_initial_metadata =
|
1811
|
-
&
|
1606
|
+
&recv_initial_metadata_;
|
1812
1607
|
stream_op_payload->recv_initial_metadata.recv_initial_metadata_ready =
|
1813
|
-
&
|
1814
|
-
if (
|
1608
|
+
&receiving_initial_metadata_ready_;
|
1609
|
+
if (is_client()) {
|
1815
1610
|
stream_op_payload->recv_initial_metadata.trailing_metadata_available =
|
1816
|
-
&
|
1611
|
+
&is_trailers_only_;
|
1817
1612
|
} else {
|
1818
1613
|
stream_op_payload->recv_initial_metadata.peer_string =
|
1819
|
-
|
1614
|
+
peer_string_atm_ptr();
|
1820
1615
|
}
|
1821
1616
|
++num_recv_ops;
|
1822
1617
|
break;
|
@@ -1827,21 +1622,33 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
|
|
1827
1622
|
error = GRPC_CALL_ERROR_INVALID_FLAGS;
|
1828
1623
|
goto done_with_error;
|
1829
1624
|
}
|
1830
|
-
if (
|
1625
|
+
if (receiving_message_) {
|
1831
1626
|
error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
|
1832
1627
|
goto done_with_error;
|
1833
1628
|
}
|
1834
|
-
|
1629
|
+
receiving_message_ = true;
|
1835
1630
|
stream_op->recv_message = true;
|
1836
|
-
|
1837
|
-
|
1631
|
+
receiving_slice_buffer_.reset();
|
1632
|
+
receiving_buffer_ = op->data.recv_message.recv_message;
|
1633
|
+
stream_op_payload->recv_message.recv_message = &receiving_slice_buffer_;
|
1634
|
+
receiving_stream_flags_ = 0;
|
1635
|
+
stream_op_payload->recv_message.flags = &receiving_stream_flags_;
|
1838
1636
|
stream_op_payload->recv_message.call_failed_before_recv_message =
|
1839
|
-
&
|
1840
|
-
GRPC_CLOSURE_INIT(
|
1841
|
-
|
1842
|
-
|
1637
|
+
&call_failed_before_recv_message_;
|
1638
|
+
GRPC_CLOSURE_INIT(
|
1639
|
+
&receiving_stream_ready_,
|
1640
|
+
[](void* bctlp, grpc_error_handle error) {
|
1641
|
+
auto* bctl = static_cast<BatchControl*>(bctlp);
|
1642
|
+
auto* call = bctl->call_;
|
1643
|
+
// Yields the call combiner before processing the received
|
1644
|
+
// message.
|
1645
|
+
GRPC_CALL_COMBINER_STOP(call->call_combiner(),
|
1646
|
+
"recv_message_ready");
|
1647
|
+
bctl->ReceivingStreamReady(error);
|
1648
|
+
},
|
1649
|
+
bctl, grpc_schedule_on_exec_ctx);
|
1843
1650
|
stream_op_payload->recv_message.recv_message_ready =
|
1844
|
-
&
|
1651
|
+
&receiving_stream_ready_;
|
1845
1652
|
++num_recv_ops;
|
1846
1653
|
break;
|
1847
1654
|
}
|
@@ -1851,32 +1658,36 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
|
|
1851
1658
|
error = GRPC_CALL_ERROR_INVALID_FLAGS;
|
1852
1659
|
goto done_with_error;
|
1853
1660
|
}
|
1854
|
-
if (!
|
1661
|
+
if (!is_client()) {
|
1855
1662
|
error = GRPC_CALL_ERROR_NOT_ON_SERVER;
|
1856
1663
|
goto done_with_error;
|
1857
1664
|
}
|
1858
|
-
if (
|
1665
|
+
if (requested_final_op_) {
|
1859
1666
|
error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
|
1860
1667
|
goto done_with_error;
|
1861
1668
|
}
|
1862
|
-
|
1863
|
-
|
1669
|
+
requested_final_op_ = true;
|
1670
|
+
buffered_metadata_[1] =
|
1864
1671
|
op->data.recv_status_on_client.trailing_metadata;
|
1865
|
-
|
1866
|
-
|
1672
|
+
final_op_.client.status = op->data.recv_status_on_client.status;
|
1673
|
+
final_op_.client.status_details =
|
1867
1674
|
op->data.recv_status_on_client.status_details;
|
1868
|
-
|
1675
|
+
final_op_.client.error_string =
|
1869
1676
|
op->data.recv_status_on_client.error_string;
|
1870
1677
|
stream_op->recv_trailing_metadata = true;
|
1871
1678
|
stream_op_payload->recv_trailing_metadata.recv_trailing_metadata =
|
1872
|
-
&
|
1679
|
+
&recv_trailing_metadata_;
|
1873
1680
|
stream_op_payload->recv_trailing_metadata.collect_stats =
|
1874
|
-
&
|
1875
|
-
GRPC_CLOSURE_INIT(
|
1876
|
-
|
1877
|
-
|
1681
|
+
&final_info_.stats.transport_stream_stats;
|
1682
|
+
GRPC_CLOSURE_INIT(
|
1683
|
+
&receiving_trailing_metadata_ready_,
|
1684
|
+
[](void* bctl, grpc_error_handle error) {
|
1685
|
+
static_cast<BatchControl*>(bctl)->ReceivingTrailingMetadataReady(
|
1686
|
+
error);
|
1687
|
+
},
|
1688
|
+
bctl, grpc_schedule_on_exec_ctx);
|
1878
1689
|
stream_op_payload->recv_trailing_metadata.recv_trailing_metadata_ready =
|
1879
|
-
&
|
1690
|
+
&receiving_trailing_metadata_ready_;
|
1880
1691
|
++num_recv_ops;
|
1881
1692
|
break;
|
1882
1693
|
}
|
@@ -1886,47 +1697,53 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
|
|
1886
1697
|
error = GRPC_CALL_ERROR_INVALID_FLAGS;
|
1887
1698
|
goto done_with_error;
|
1888
1699
|
}
|
1889
|
-
if (
|
1700
|
+
if (is_client()) {
|
1890
1701
|
error = GRPC_CALL_ERROR_NOT_ON_CLIENT;
|
1891
1702
|
goto done_with_error;
|
1892
1703
|
}
|
1893
|
-
if (
|
1704
|
+
if (requested_final_op_) {
|
1894
1705
|
error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
|
1895
1706
|
goto done_with_error;
|
1896
1707
|
}
|
1897
|
-
|
1898
|
-
|
1899
|
-
op->data.recv_close_on_server.cancelled;
|
1708
|
+
requested_final_op_ = true;
|
1709
|
+
final_op_.server.cancelled = op->data.recv_close_on_server.cancelled;
|
1900
1710
|
stream_op->recv_trailing_metadata = true;
|
1901
1711
|
stream_op_payload->recv_trailing_metadata.recv_trailing_metadata =
|
1902
|
-
&
|
1712
|
+
&recv_trailing_metadata_;
|
1903
1713
|
stream_op_payload->recv_trailing_metadata.collect_stats =
|
1904
|
-
&
|
1905
|
-
GRPC_CLOSURE_INIT(
|
1906
|
-
|
1907
|
-
|
1714
|
+
&final_info_.stats.transport_stream_stats;
|
1715
|
+
GRPC_CLOSURE_INIT(
|
1716
|
+
&receiving_trailing_metadata_ready_,
|
1717
|
+
[](void* bctl, grpc_error_handle error) {
|
1718
|
+
static_cast<BatchControl*>(bctl)->ReceivingTrailingMetadataReady(
|
1719
|
+
error);
|
1720
|
+
},
|
1721
|
+
bctl, grpc_schedule_on_exec_ctx);
|
1908
1722
|
stream_op_payload->recv_trailing_metadata.recv_trailing_metadata_ready =
|
1909
|
-
&
|
1723
|
+
&receiving_trailing_metadata_ready_;
|
1910
1724
|
++num_recv_ops;
|
1911
1725
|
break;
|
1912
1726
|
}
|
1913
1727
|
}
|
1914
1728
|
}
|
1915
1729
|
|
1916
|
-
|
1730
|
+
InternalRef("completion");
|
1917
1731
|
if (!is_notify_tag_closure) {
|
1918
|
-
GPR_ASSERT(grpc_cq_begin_op(
|
1732
|
+
GPR_ASSERT(grpc_cq_begin_op(cq_, notify_tag));
|
1919
1733
|
}
|
1920
1734
|
bctl->set_num_steps_to_complete((has_send_ops ? 1 : 0) + num_recv_ops);
|
1921
1735
|
|
1922
1736
|
if (has_send_ops) {
|
1923
|
-
GRPC_CLOSURE_INIT(
|
1924
|
-
|
1925
|
-
|
1737
|
+
GRPC_CLOSURE_INIT(
|
1738
|
+
&bctl->finish_batch_,
|
1739
|
+
[](void* bctl, grpc_error_handle error) {
|
1740
|
+
static_cast<BatchControl*>(bctl)->FinishBatch(error);
|
1741
|
+
},
|
1742
|
+
bctl, grpc_schedule_on_exec_ctx);
|
1743
|
+
stream_op->on_complete = &bctl->finish_batch_;
|
1926
1744
|
}
|
1927
1745
|
|
1928
|
-
|
1929
|
-
execute_batch(call, stream_op, &bctl->start_batch);
|
1746
|
+
ExecuteBatch(stream_op, &bctl->start_batch_);
|
1930
1747
|
|
1931
1748
|
done:
|
1932
1749
|
return error;
|
@@ -1934,87 +1751,1257 @@ done:
|
|
1934
1751
|
done_with_error:
|
1935
1752
|
/* reverse any mutations that occurred */
|
1936
1753
|
if (stream_op->send_initial_metadata) {
|
1937
|
-
|
1938
|
-
|
1754
|
+
sent_initial_metadata_ = false;
|
1755
|
+
send_initial_metadata_.Clear();
|
1939
1756
|
}
|
1940
1757
|
if (stream_op->send_message) {
|
1941
|
-
|
1942
|
-
call->sending_stream->Orphan();
|
1943
|
-
stream_op_payload->send_message.send_message.reset();
|
1758
|
+
sending_message_ = false;
|
1944
1759
|
}
|
1945
1760
|
if (stream_op->send_trailing_metadata) {
|
1946
|
-
|
1947
|
-
|
1761
|
+
sent_final_op_ = false;
|
1762
|
+
send_trailing_metadata_.Clear();
|
1948
1763
|
}
|
1949
1764
|
if (stream_op->recv_initial_metadata) {
|
1950
|
-
|
1765
|
+
received_initial_metadata_ = false;
|
1951
1766
|
}
|
1952
1767
|
if (stream_op->recv_message) {
|
1953
|
-
|
1768
|
+
receiving_message_ = false;
|
1954
1769
|
}
|
1955
1770
|
if (stream_op->recv_trailing_metadata) {
|
1956
|
-
|
1771
|
+
requested_final_op_ = false;
|
1957
1772
|
}
|
1958
1773
|
goto done;
|
1959
1774
|
}
|
1960
1775
|
|
1776
|
+
void FilterStackCall::ContextSet(grpc_context_index elem, void* value,
|
1777
|
+
void (*destroy)(void*)) {
|
1778
|
+
if (context_[elem].destroy) {
|
1779
|
+
context_[elem].destroy(context_[elem].value);
|
1780
|
+
}
|
1781
|
+
context_[elem].value = value;
|
1782
|
+
context_[elem].destroy = destroy;
|
1783
|
+
}
|
1784
|
+
|
1785
|
+
///////////////////////////////////////////////////////////////////////////////
|
1786
|
+
// Metadata validation helpers
|
1787
|
+
|
1788
|
+
namespace {
|
1789
|
+
bool ValidateMetadata(size_t count, grpc_metadata* metadata) {
|
1790
|
+
for (size_t i = 0; i < count; i++) {
|
1791
|
+
grpc_metadata* md = &metadata[i];
|
1792
|
+
if (!GRPC_LOG_IF_ERROR("validate_metadata",
|
1793
|
+
grpc_validate_header_key_is_legal(md->key))) {
|
1794
|
+
return false;
|
1795
|
+
} else if (!grpc_is_binary_header_internal(md->key) &&
|
1796
|
+
!GRPC_LOG_IF_ERROR(
|
1797
|
+
"validate_metadata",
|
1798
|
+
grpc_validate_header_nonbin_value_is_legal(md->value))) {
|
1799
|
+
return false;
|
1800
|
+
} else if (GRPC_SLICE_LENGTH(md->value) >= UINT32_MAX) {
|
1801
|
+
// HTTP2 hpack encoding has a maximum limit.
|
1802
|
+
return false;
|
1803
|
+
}
|
1804
|
+
}
|
1805
|
+
return true;
|
1806
|
+
}
|
1807
|
+
} // namespace
|
1808
|
+
|
1809
|
+
///////////////////////////////////////////////////////////////////////////////
|
1810
|
+
// PromiseBasedCall
|
1811
|
+
// Will be folded into Call once the promise conversion is done
|
1812
|
+
|
1813
|
+
class PromiseBasedCall : public Call, public Activity, public Wakeable {
|
1814
|
+
public:
|
1815
|
+
PromiseBasedCall(Arena* arena, const grpc_call_create_args& args);
|
1816
|
+
|
1817
|
+
void ContextSet(grpc_context_index elem, void* value,
|
1818
|
+
void (*destroy)(void* value)) override;
|
1819
|
+
void* ContextGet(grpc_context_index elem) const override;
|
1820
|
+
void SetCompletionQueue(grpc_completion_queue* cq) override;
|
1821
|
+
|
1822
|
+
// Implementation of call refcounting: move this to DualRefCounted once we
|
1823
|
+
// don't need to maintain FilterStackCall compatibility
|
1824
|
+
void ExternalRef() final {
|
1825
|
+
refs_.fetch_add(MakeRefPair(1, 0), std::memory_order_relaxed);
|
1826
|
+
}
|
1827
|
+
void ExternalUnref() final {
|
1828
|
+
const uint64_t prev_ref_pair =
|
1829
|
+
refs_.fetch_add(MakeRefPair(-1, 1), std::memory_order_acq_rel);
|
1830
|
+
const uint32_t strong_refs = GetStrongRefs(prev_ref_pair);
|
1831
|
+
if (GPR_UNLIKELY(strong_refs == 1)) {
|
1832
|
+
Orphan();
|
1833
|
+
}
|
1834
|
+
// Now drop the weak ref.
|
1835
|
+
InternalUnref("external_ref");
|
1836
|
+
}
|
1837
|
+
void InternalRef(const char*) final {
|
1838
|
+
refs_.fetch_add(MakeRefPair(0, 1), std::memory_order_relaxed);
|
1839
|
+
}
|
1840
|
+
void InternalUnref(const char*) final {
|
1841
|
+
const uint64_t prev_ref_pair =
|
1842
|
+
refs_.fetch_sub(MakeRefPair(0, 1), std::memory_order_acq_rel);
|
1843
|
+
if (GPR_UNLIKELY(prev_ref_pair == MakeRefPair(0, 1))) {
|
1844
|
+
DeleteThis();
|
1845
|
+
}
|
1846
|
+
}
|
1847
|
+
|
1848
|
+
// Activity methods
|
1849
|
+
void ForceImmediateRepoll() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) override;
|
1850
|
+
Waker MakeOwningWaker() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) override {
|
1851
|
+
InternalRef("wakeup");
|
1852
|
+
// If ASAN is defined, we leverage it to detect dropped Waker objects.
|
1853
|
+
// Usually Waker must be destroyed or woken up, but (especially with arenas)
|
1854
|
+
// it's not uncommon to create a Waker and then do neither. In that case it's
|
1855
|
+
// incredibly fraught to diagnose where the dropped reference to this object was
|
1856
|
+
// created. Instead, leverage ASAN and create a new object per expected wakeup.
|
1857
|
+
// Now when we drop such an object ASAN will fail and we'll get a callstack to
|
1858
|
+
// the creation of the waker in question.
|
1859
|
+
#if defined(__has_feature)
|
1860
|
+
#if __has_feature(address_sanitizer)
|
1861
|
+
#define GRPC_CALL_USES_ASAN_WAKER
|
1862
|
+
class AsanWaker final : public Wakeable {
|
1863
|
+
public:
|
1864
|
+
explicit AsanWaker(PromiseBasedCall* call) : call_(call) {}
|
1865
|
+
|
1866
|
+
void Wakeup() override {
|
1867
|
+
call_->Wakeup();
|
1868
|
+
delete this;
|
1869
|
+
}
|
1870
|
+
|
1871
|
+
void Drop() override {
|
1872
|
+
call_->Drop();
|
1873
|
+
delete this;
|
1874
|
+
}
|
1875
|
+
|
1876
|
+
std::string ActivityDebugTag() const override {
|
1877
|
+
return call_->DebugTag();
|
1878
|
+
}
|
1879
|
+
|
1880
|
+
private:
|
1881
|
+
PromiseBasedCall* call_;
|
1882
|
+
};
|
1883
|
+
return Waker(new AsanWaker(this));
|
1884
|
+
#endif
|
1885
|
+
#endif
|
1886
|
+
#ifndef GRPC_CALL_USES_ASAN_WAKER
|
1887
|
+
return Waker(this);
|
1888
|
+
#endif
|
1889
|
+
}
|
1890
|
+
Waker MakeNonOwningWaker() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) override;
|
1891
|
+
|
1892
|
+
// Wakeable methods
|
1893
|
+
void Wakeup() override {
|
1894
|
+
channel()->event_engine()->Run([this] {
|
1895
|
+
ApplicationCallbackExecCtx app_exec_ctx;
|
1896
|
+
ExecCtx exec_ctx;
|
1897
|
+
{
|
1898
|
+
ScopedContext activity_context(this);
|
1899
|
+
MutexLock lock(&mu_);
|
1900
|
+
Update();
|
1901
|
+
}
|
1902
|
+
InternalUnref("wakeup");
|
1903
|
+
});
|
1904
|
+
}
|
1905
|
+
void Drop() override { InternalUnref("wakeup"); }
|
1906
|
+
|
1907
|
+
void RunInContext(absl::AnyInvocable<void()> fn) {
|
1908
|
+
if (Activity::current() == this) {
|
1909
|
+
fn();
|
1910
|
+
} else {
|
1911
|
+
InternalRef("in_context");
|
1912
|
+
channel()->event_engine()->Run([this, fn = std::move(fn)]() mutable {
|
1913
|
+
ApplicationCallbackExecCtx app_exec_ctx;
|
1914
|
+
ExecCtx exec_ctx;
|
1915
|
+
{
|
1916
|
+
ScopedContext activity_context(this);
|
1917
|
+
MutexLock lock(&mu_);
|
1918
|
+
fn();
|
1919
|
+
Update();
|
1920
|
+
}
|
1921
|
+
InternalUnref("in_context");
|
1922
|
+
});
|
1923
|
+
}
|
1924
|
+
}
|
1925
|
+
|
1926
|
+
grpc_compression_algorithm test_only_compression_algorithm() override {
|
1927
|
+
abort();
|
1928
|
+
}
|
1929
|
+
uint32_t test_only_message_flags() override { abort(); }
|
1930
|
+
uint32_t test_only_encodings_accepted_by_peer() override { abort(); }
|
1931
|
+
grpc_compression_algorithm compression_for_level(
|
1932
|
+
grpc_compression_level) override {
|
1933
|
+
abort();
|
1934
|
+
}
|
1935
|
+
|
1936
|
+
// This should return nullptr for the promise stack (and alternative means
|
1937
|
+
// for that functionality be invented)
|
1938
|
+
grpc_call_stack* call_stack() override { return nullptr; }
|
1939
|
+
|
1940
|
+
protected:
|
1941
|
+
class ScopedContext
|
1942
|
+
: public ScopedActivity,
|
1943
|
+
public promise_detail::Context<Arena>,
|
1944
|
+
public promise_detail::Context<grpc_call_context_element>,
|
1945
|
+
public promise_detail::Context<CallContext>,
|
1946
|
+
public promise_detail::Context<CallFinalization> {
|
1947
|
+
public:
|
1948
|
+
explicit ScopedContext(PromiseBasedCall* call)
|
1949
|
+
: ScopedActivity(call),
|
1950
|
+
promise_detail::Context<Arena>(call->arena()),
|
1951
|
+
promise_detail::Context<grpc_call_context_element>(call->context_),
|
1952
|
+
promise_detail::Context<CallContext>(&call->call_context_),
|
1953
|
+
promise_detail::Context<CallFinalization>(&call->finalization_) {}
|
1954
|
+
};
|
1955
|
+
|
1956
|
+
class Completion {
|
1957
|
+
public:
|
1958
|
+
Completion() : index_(kNullIndex) {}
|
1959
|
+
~Completion() { GPR_ASSERT(index_ == kNullIndex); }
|
1960
|
+
explicit Completion(uint8_t index) : index_(index) {}
|
1961
|
+
Completion(const Completion& other) = delete;
|
1962
|
+
Completion& operator=(const Completion& other) = delete;
|
1963
|
+
Completion(Completion&& other) noexcept : index_(other.index_) {
|
1964
|
+
other.index_ = kNullIndex;
|
1965
|
+
}
|
1966
|
+
Completion& operator=(Completion&& other) noexcept {
|
1967
|
+
GPR_ASSERT(index_ == kNullIndex);
|
1968
|
+
index_ = other.index_;
|
1969
|
+
other.index_ = kNullIndex;
|
1970
|
+
return *this;
|
1971
|
+
}
|
1972
|
+
|
1973
|
+
uint8_t index() const { return index_; }
|
1974
|
+
uint8_t TakeIndex() { return std::exchange(index_, kNullIndex); }
|
1975
|
+
bool has_value() const { return index_ != kNullIndex; }
|
1976
|
+
|
1977
|
+
std::string ToString() const {
|
1978
|
+
return index_ == kNullIndex ? "null"
|
1979
|
+
: std::to_string(static_cast<int>(index_));
|
1980
|
+
}
|
1981
|
+
|
1982
|
+
private:
|
1983
|
+
enum : uint8_t { kNullIndex = 0xff };
|
1984
|
+
uint8_t index_;
|
1985
|
+
};
|
1986
|
+
|
1987
|
+
~PromiseBasedCall() override {
|
1988
|
+
if (non_owning_wakeable_) non_owning_wakeable_->DropActivity();
|
1989
|
+
if (cq_) GRPC_CQ_INTERNAL_UNREF(cq_, "bind");
|
1990
|
+
}
|
1991
|
+
|
1992
|
+
// Enumerates why a Completion is still pending
|
1993
|
+
enum class PendingOp {
|
1994
|
+
// We're in the midst of starting a batch of operations
|
1995
|
+
kStartingBatch = 0,
|
1996
|
+
// The following correspond with the batch operations from above
|
1997
|
+
kReceiveInitialMetadata,
|
1998
|
+
kReceiveStatusOnClient,
|
1999
|
+
kSendMessage,
|
2000
|
+
kReceiveMessage,
|
2001
|
+
};
|
2002
|
+
|
2003
|
+
static constexpr const char* PendingOpString(PendingOp reason) {
|
2004
|
+
switch (reason) {
|
2005
|
+
case PendingOp::kStartingBatch:
|
2006
|
+
return "StartingBatch";
|
2007
|
+
case PendingOp::kReceiveInitialMetadata:
|
2008
|
+
return "ReceiveInitialMetadata";
|
2009
|
+
case PendingOp::kReceiveStatusOnClient:
|
2010
|
+
return "ReceiveStatusOnClient";
|
2011
|
+
case PendingOp::kSendMessage:
|
2012
|
+
return "SendMessage";
|
2013
|
+
case PendingOp::kReceiveMessage:
|
2014
|
+
return "ReceiveMessage";
|
2015
|
+
}
|
2016
|
+
return "Unknown";
|
2017
|
+
}
|
2018
|
+
|
2019
|
+
static constexpr uint8_t PendingOpBit(PendingOp reason) {
|
2020
|
+
return 1 << static_cast<int>(reason);
|
2021
|
+
}
|
2022
|
+
|
2023
|
+
Mutex* mu() const ABSL_LOCK_RETURNED(mu_) { return &mu_; }
|
2024
|
+
|
2025
|
+
// Begin work on a completion, recording the tag/closure to notify.
|
2026
|
+
// Use the op selected in \a ops to determine the index to allocate into.
|
2027
|
+
// Starts the "StartingBatch" PendingOp immediately.
|
2028
|
+
// Assumes at least one operation in \a ops.
|
2029
|
+
Completion StartCompletion(void* tag, bool is_closure, const grpc_op* ops)
|
2030
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
2031
|
+
// Add one pending op to the completion, and return it.
|
2032
|
+
Completion AddOpToCompletion(const Completion& completion, PendingOp reason)
|
2033
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
2034
|
+
// Finish one op on the completion. Must have been previously been added.
|
2035
|
+
// The completion as a whole finishes when all pending ops finish.
|
2036
|
+
void FinishOpOnCompletion(Completion* completion, PendingOp reason)
|
2037
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
2038
|
+
// Mark the completion as failed. Does not finish it.
|
2039
|
+
void FailCompletion(const Completion& completion);
|
2040
|
+
// Run the promise polling loop until it stalls.
|
2041
|
+
void Update() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
2042
|
+
// Update the promise state once.
|
2043
|
+
virtual void UpdateOnce() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) = 0;
|
2044
|
+
// Accept the stats from the context (call once we have proof the transport is
|
2045
|
+
// done with them).
|
2046
|
+
// Right now this means that promise based calls do not record correct stats
|
2047
|
+
// with census if they are cancelled.
|
2048
|
+
// TODO(ctiller): this should be remedied before promise based calls are
|
2049
|
+
// dexperimentalized.
|
2050
|
+
void AcceptTransportStatsFromContext() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
|
2051
|
+
final_stats_ = *call_context_.call_stats();
|
2052
|
+
}
|
2053
|
+
|
2054
|
+
grpc_completion_queue* cq() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) { return cq_; }
|
2055
|
+
|
2056
|
+
void CToMetadata(grpc_metadata* metadata, size_t count,
|
2057
|
+
grpc_metadata_batch* batch);
|
2058
|
+
|
2059
|
+
std::string ActivityDebugTag() const override { return DebugTag(); }
|
2060
|
+
|
2061
|
+
// At the end of the call run any finalization actions.
|
2062
|
+
void RunFinalization(grpc_status_code status, const char* status_details) {
|
2063
|
+
grpc_call_final_info final_info;
|
2064
|
+
final_info.stats = final_stats_;
|
2065
|
+
final_info.final_status = status;
|
2066
|
+
final_info.error_string = status_details;
|
2067
|
+
finalization_.Run(&final_info);
|
2068
|
+
}
|
2069
|
+
|
2070
|
+
private:
|
2071
|
+
union CompletionInfo {
|
2072
|
+
struct Pending {
|
2073
|
+
// Bitmask of PendingOps
|
2074
|
+
uint8_t pending_op_bits;
|
2075
|
+
bool is_closure;
|
2076
|
+
bool success;
|
2077
|
+
void* tag;
|
2078
|
+
} pending;
|
2079
|
+
grpc_cq_completion completion;
|
2080
|
+
};
|
2081
|
+
|
2082
|
+
class NonOwningWakable final : public Wakeable {
|
2083
|
+
public:
|
2084
|
+
explicit NonOwningWakable(PromiseBasedCall* call) : call_(call) {}
|
2085
|
+
|
2086
|
+
// Ref the Handle (not the activity).
|
2087
|
+
void Ref() { refs_.fetch_add(1, std::memory_order_relaxed); }
|
2088
|
+
|
2089
|
+
// Activity is going away... drop its reference and sever the connection
|
2090
|
+
// back.
|
2091
|
+
void DropActivity() ABSL_LOCKS_EXCLUDED(mu_) {
|
2092
|
+
auto unref = absl::MakeCleanup([this]() { Unref(); });
|
2093
|
+
MutexLock lock(&mu_);
|
2094
|
+
GPR_ASSERT(call_ != nullptr);
|
2095
|
+
call_ = nullptr;
|
2096
|
+
}
|
2097
|
+
|
2098
|
+
// Activity needs to wake up (if it still exists!) - wake it up, and drop
|
2099
|
+
// the ref that was kept for this handle.
|
2100
|
+
void Wakeup() override ABSL_LOCKS_EXCLUDED(mu_) {
|
2101
|
+
// Drop the ref to the handle at end of scope (we have one ref = one
|
2102
|
+
// wakeup semantics).
|
2103
|
+
auto unref = absl::MakeCleanup([this]() { Unref(); });
|
2104
|
+
ReleasableMutexLock lock(&mu_);
|
2105
|
+
// Note that activity refcount can drop to zero, but we could win the lock
|
2106
|
+
// against DropActivity, so we need to only increase activities refcount
|
2107
|
+
// if it is non-zero.
|
2108
|
+
if (call_ != nullptr && call_->RefIfNonZero()) {
|
2109
|
+
PromiseBasedCall* call = call_;
|
2110
|
+
lock.Release();
|
2111
|
+
// Activity still exists and we have a reference: wake it up, which will
|
2112
|
+
// drop the ref.
|
2113
|
+
call->Wakeup();
|
2114
|
+
}
|
2115
|
+
}
|
2116
|
+
|
2117
|
+
std::string ActivityDebugTag() const override {
|
2118
|
+
MutexLock lock(&mu_);
|
2119
|
+
return call_ == nullptr ? "<unknown>" : call_->DebugTag();
|
2120
|
+
}
|
2121
|
+
|
2122
|
+
void Drop() override { Unref(); }
|
2123
|
+
|
2124
|
+
private:
|
2125
|
+
// Unref the Handle (not the activity).
|
2126
|
+
void Unref() {
|
2127
|
+
if (1 == refs_.fetch_sub(1, std::memory_order_acq_rel)) {
|
2128
|
+
delete this;
|
2129
|
+
}
|
2130
|
+
}
|
2131
|
+
|
2132
|
+
mutable Mutex mu_;
|
2133
|
+
// We have two initial refs: one for the wakeup that this is created for,
|
2134
|
+
// and will be dropped by Wakeup, and the other for the activity which is
|
2135
|
+
// dropped by DropActivity.
|
2136
|
+
std::atomic<size_t> refs_{2};
|
2137
|
+
PromiseBasedCall* call_ ABSL_GUARDED_BY(mu_);
|
2138
|
+
};
|
2139
|
+
|
2140
|
+
static void OnDestroy(void* arg, grpc_error_handle) {
|
2141
|
+
auto* call = static_cast<PromiseBasedCall*>(arg);
|
2142
|
+
ScopedContext context(call);
|
2143
|
+
call->DeleteThis();
|
2144
|
+
}
|
2145
|
+
|
2146
|
+
// First 32 bits are strong refs, next 32 bits are weak refs.
|
2147
|
+
static uint64_t MakeRefPair(uint32_t strong, uint32_t weak) {
|
2148
|
+
return (static_cast<uint64_t>(strong) << 32) + static_cast<int64_t>(weak);
|
2149
|
+
}
|
2150
|
+
static uint32_t GetStrongRefs(uint64_t ref_pair) {
|
2151
|
+
return static_cast<uint32_t>(ref_pair >> 32);
|
2152
|
+
}
|
2153
|
+
static uint32_t GetWeakRefs(uint64_t ref_pair) {
|
2154
|
+
return static_cast<uint32_t>(ref_pair & 0xffffffffu);
|
2155
|
+
}
|
2156
|
+
|
2157
|
+
bool RefIfNonZero() {
|
2158
|
+
uint64_t prev_ref_pair = refs_.load(std::memory_order_acquire);
|
2159
|
+
do {
|
2160
|
+
const uint32_t strong_refs = GetStrongRefs(prev_ref_pair);
|
2161
|
+
if (strong_refs == 0) return false;
|
2162
|
+
} while (!refs_.compare_exchange_weak(
|
2163
|
+
prev_ref_pair, prev_ref_pair + MakeRefPair(1, 0),
|
2164
|
+
std::memory_order_acq_rel, std::memory_order_acquire));
|
2165
|
+
return true;
|
2166
|
+
}
|
2167
|
+
|
2168
|
+
mutable Mutex mu_;
|
2169
|
+
std::atomic<uint64_t> refs_{MakeRefPair(1, 0)};
|
2170
|
+
CallContext call_context_{this};
|
2171
|
+
bool keep_polling_ ABSL_GUARDED_BY(mu()) = false;
|
2172
|
+
|
2173
|
+
/* Contexts for various subsystems (security, tracing, ...). */
|
2174
|
+
grpc_call_context_element context_[GRPC_CONTEXT_COUNT] = {};
|
2175
|
+
grpc_completion_queue* cq_ ABSL_GUARDED_BY(mu_);
|
2176
|
+
NonOwningWakable* non_owning_wakeable_ ABSL_GUARDED_BY(mu_) = nullptr;
|
2177
|
+
CompletionInfo completion_info_[6];
|
2178
|
+
grpc_call_stats final_stats_{};
|
2179
|
+
CallFinalization finalization_;
|
2180
|
+
};
|
2181
|
+
|
2182
|
+
template <typename T>
|
2183
|
+
grpc_error_handle MakePromiseBasedCall(grpc_call_create_args* args,
|
2184
|
+
grpc_call** out_call) {
|
2185
|
+
Channel* channel = args->channel.get();
|
2186
|
+
|
2187
|
+
auto alloc = Arena::CreateWithAlloc(channel->CallSizeEstimate(), sizeof(T),
|
2188
|
+
channel->allocator());
|
2189
|
+
PromiseBasedCall* call = new (alloc.second) T(alloc.first, args);
|
2190
|
+
*out_call = call->c_ptr();
|
2191
|
+
GPR_DEBUG_ASSERT(Call::FromC(*out_call) == call);
|
2192
|
+
return absl::OkStatus();
|
2193
|
+
}
|
2194
|
+
|
2195
|
+
PromiseBasedCall::PromiseBasedCall(Arena* arena,
|
2196
|
+
const grpc_call_create_args& args)
|
2197
|
+
: Call(arena, args.server_transport_data == nullptr, args.send_deadline,
|
2198
|
+
args.channel->Ref()),
|
2199
|
+
cq_(args.cq) {
|
2200
|
+
if (args.cq != nullptr) {
|
2201
|
+
GPR_ASSERT(args.pollset_set_alternative == nullptr &&
|
2202
|
+
"Only one of 'cq' and 'pollset_set_alternative' should be "
|
2203
|
+
"non-nullptr.");
|
2204
|
+
GRPC_CQ_INTERNAL_REF(args.cq, "bind");
|
2205
|
+
call_context_.pollent_ =
|
2206
|
+
grpc_polling_entity_create_from_pollset(grpc_cq_pollset(args.cq));
|
2207
|
+
}
|
2208
|
+
if (args.pollset_set_alternative != nullptr) {
|
2209
|
+
call_context_.pollent_ = grpc_polling_entity_create_from_pollset_set(
|
2210
|
+
args.pollset_set_alternative);
|
2211
|
+
}
|
2212
|
+
}
|
2213
|
+
|
2214
|
+
Waker PromiseBasedCall::MakeNonOwningWaker() {
|
2215
|
+
if (non_owning_wakeable_ == nullptr) {
|
2216
|
+
non_owning_wakeable_ = new NonOwningWakable(this);
|
2217
|
+
} else {
|
2218
|
+
non_owning_wakeable_->Ref();
|
2219
|
+
}
|
2220
|
+
return Waker(non_owning_wakeable_);
|
2221
|
+
}
|
2222
|
+
|
2223
|
+
void PromiseBasedCall::CToMetadata(grpc_metadata* metadata, size_t count,
|
2224
|
+
grpc_metadata_batch* b) {
|
2225
|
+
for (size_t i = 0; i < count; i++) {
|
2226
|
+
grpc_metadata* md = &metadata[i];
|
2227
|
+
auto key = StringViewFromSlice(md->key);
|
2228
|
+
// Filter "content-length metadata"
|
2229
|
+
if (key == "content-length") continue;
|
2230
|
+
b->Append(key, Slice(CSliceRef(md->value)),
|
2231
|
+
[md](absl::string_view error, const Slice& value) {
|
2232
|
+
gpr_log(GPR_DEBUG, "Append error: %s",
|
2233
|
+
absl::StrCat("key=", StringViewFromSlice(md->key),
|
2234
|
+
" error=", error,
|
2235
|
+
" value=", value.as_string_view())
|
2236
|
+
.c_str());
|
2237
|
+
});
|
2238
|
+
}
|
2239
|
+
}
|
2240
|
+
|
2241
|
+
void PromiseBasedCall::ContextSet(grpc_context_index elem, void* value,
|
2242
|
+
void (*destroy)(void*)) {
|
2243
|
+
if (context_[elem].destroy != nullptr) {
|
2244
|
+
context_[elem].destroy(context_[elem].value);
|
2245
|
+
}
|
2246
|
+
context_[elem].value = value;
|
2247
|
+
context_[elem].destroy = destroy;
|
2248
|
+
}
|
2249
|
+
|
2250
|
+
void* PromiseBasedCall::ContextGet(grpc_context_index elem) const {
|
2251
|
+
return context_[elem].value;
|
2252
|
+
}
|
2253
|
+
|
2254
|
+
PromiseBasedCall::Completion PromiseBasedCall::StartCompletion(
|
2255
|
+
void* tag, bool is_closure, const grpc_op* ops) {
|
2256
|
+
Completion c(BatchSlotForOp(ops[0].op));
|
2257
|
+
if (grpc_call_trace.enabled()) {
|
2258
|
+
gpr_log(GPR_INFO, "%sStartCompletion %s tag=%p", DebugTag().c_str(),
|
2259
|
+
c.ToString().c_str(), tag);
|
2260
|
+
}
|
2261
|
+
if (!is_closure) {
|
2262
|
+
grpc_cq_begin_op(cq(), tag);
|
2263
|
+
}
|
2264
|
+
completion_info_[c.index()].pending = {
|
2265
|
+
PendingOpBit(PendingOp::kStartingBatch), is_closure, true, tag};
|
2266
|
+
return c;
|
2267
|
+
}
|
2268
|
+
|
2269
|
+
PromiseBasedCall::Completion PromiseBasedCall::AddOpToCompletion(
|
2270
|
+
const Completion& completion, PendingOp reason) {
|
2271
|
+
if (grpc_call_trace.enabled()) {
|
2272
|
+
gpr_log(GPR_INFO, "%sAddOpToCompletion %s %s", DebugTag().c_str(),
|
2273
|
+
completion.ToString().c_str(), PendingOpString(reason));
|
2274
|
+
}
|
2275
|
+
auto& pending_op_bits =
|
2276
|
+
completion_info_[completion.index()].pending.pending_op_bits;
|
2277
|
+
GPR_ASSERT((pending_op_bits & PendingOpBit(reason)) == 0);
|
2278
|
+
pending_op_bits |= PendingOpBit(reason);
|
2279
|
+
return Completion(completion.index());
|
2280
|
+
}
|
2281
|
+
|
2282
|
+
void PromiseBasedCall::FailCompletion(const Completion& completion) {
|
2283
|
+
if (grpc_call_trace.enabled()) {
|
2284
|
+
gpr_log(GPR_INFO, "%sFailCompletion %s", DebugTag().c_str(),
|
2285
|
+
completion.ToString().c_str());
|
2286
|
+
}
|
2287
|
+
completion_info_[completion.index()].pending.success = false;
|
2288
|
+
}
|
2289
|
+
|
2290
|
+
void PromiseBasedCall::FinishOpOnCompletion(Completion* completion,
|
2291
|
+
PendingOp reason) {
|
2292
|
+
if (grpc_call_trace.enabled()) {
|
2293
|
+
auto pending_op_bits =
|
2294
|
+
completion_info_[completion->index()].pending.pending_op_bits;
|
2295
|
+
bool success = completion_info_[completion->index()].pending.success;
|
2296
|
+
std::vector<const char*> pending;
|
2297
|
+
for (size_t i = 0; i < 8 * sizeof(pending_op_bits); i++) {
|
2298
|
+
if (static_cast<PendingOp>(i) == reason) continue;
|
2299
|
+
if (pending_op_bits & (1 << i)) {
|
2300
|
+
pending.push_back(PendingOpString(static_cast<PendingOp>(i)));
|
2301
|
+
}
|
2302
|
+
}
|
2303
|
+
gpr_log(
|
2304
|
+
GPR_INFO, "%sFinishOpOnCompletion %s %s %s", DebugTag().c_str(),
|
2305
|
+
completion->ToString().c_str(), PendingOpString(reason),
|
2306
|
+
(pending.empty()
|
2307
|
+
? (success ? std::string("done") : std::string("failed"))
|
2308
|
+
: absl::StrFormat("pending_ops={%s}", absl::StrJoin(pending, ",")))
|
2309
|
+
.c_str());
|
2310
|
+
}
|
2311
|
+
const uint8_t i = completion->TakeIndex();
|
2312
|
+
GPR_ASSERT(i < GPR_ARRAY_SIZE(completion_info_));
|
2313
|
+
CompletionInfo::Pending& pending = completion_info_[i].pending;
|
2314
|
+
GPR_ASSERT(pending.pending_op_bits & PendingOpBit(reason));
|
2315
|
+
pending.pending_op_bits &= ~PendingOpBit(reason);
|
2316
|
+
auto error = pending.success ? absl::OkStatus() : absl::CancelledError();
|
2317
|
+
if (pending.pending_op_bits == 0) {
|
2318
|
+
if (pending.is_closure) {
|
2319
|
+
ExecCtx::Run(DEBUG_LOCATION, static_cast<grpc_closure*>(pending.tag),
|
2320
|
+
error);
|
2321
|
+
} else {
|
2322
|
+
grpc_cq_end_op(
|
2323
|
+
cq(), pending.tag, error, [](void*, grpc_cq_completion*) {}, nullptr,
|
2324
|
+
&completion_info_[i].completion);
|
2325
|
+
}
|
2326
|
+
}
|
2327
|
+
}
|
2328
|
+
|
2329
|
+
void PromiseBasedCall::Update() {
|
2330
|
+
keep_polling_ = false;
|
2331
|
+
do {
|
2332
|
+
UpdateOnce();
|
2333
|
+
} while (std::exchange(keep_polling_, false));
|
2334
|
+
}
|
2335
|
+
|
2336
|
+
void PromiseBasedCall::ForceImmediateRepoll() { keep_polling_ = true; }
|
2337
|
+
|
2338
|
+
void PromiseBasedCall::SetCompletionQueue(grpc_completion_queue* cq) {
|
2339
|
+
MutexLock lock(&mu_);
|
2340
|
+
cq_ = cq;
|
2341
|
+
GRPC_CQ_INTERNAL_REF(cq, "bind");
|
2342
|
+
call_context_.pollent_ =
|
2343
|
+
grpc_polling_entity_create_from_pollset(grpc_cq_pollset(cq));
|
2344
|
+
}
|
2345
|
+
|
2346
|
+
///////////////////////////////////////////////////////////////////////////////
|
2347
|
+
// CallContext
|
2348
|
+
|
2349
|
+
void CallContext::RunInContext(absl::AnyInvocable<void()> fn) {
|
2350
|
+
call_->RunInContext(std::move(fn));
|
2351
|
+
}
|
2352
|
+
|
2353
|
+
void CallContext::IncrementRefCount(const char* reason) {
|
2354
|
+
call_->InternalRef(reason);
|
2355
|
+
}
|
2356
|
+
|
2357
|
+
void CallContext::Unref(const char* reason) { call_->InternalUnref(reason); }
|
2358
|
+
|
2359
|
+
///////////////////////////////////////////////////////////////////////////////
|
2360
|
+
// ClientPromiseBasedCall
|
2361
|
+
|
2362
|
+
class ClientPromiseBasedCall final : public PromiseBasedCall {
|
2363
|
+
public:
|
2364
|
+
ClientPromiseBasedCall(Arena* arena, grpc_call_create_args* args)
|
2365
|
+
: PromiseBasedCall(arena, *args) {
|
2366
|
+
global_stats().IncrementClientCallsCreated();
|
2367
|
+
ScopedContext context(this);
|
2368
|
+
send_initial_metadata_ =
|
2369
|
+
GetContext<Arena>()->MakePooled<ClientMetadata>(GetContext<Arena>());
|
2370
|
+
send_initial_metadata_->Set(HttpPathMetadata(), std::move(*args->path));
|
2371
|
+
if (args->authority.has_value()) {
|
2372
|
+
send_initial_metadata_->Set(HttpAuthorityMetadata(),
|
2373
|
+
std::move(*args->authority));
|
2374
|
+
}
|
2375
|
+
if (auto* channelz_channel = channel()->channelz_node()) {
|
2376
|
+
channelz_channel->RecordCallStarted();
|
2377
|
+
}
|
2378
|
+
}
|
2379
|
+
|
2380
|
+
~ClientPromiseBasedCall() override {
|
2381
|
+
ScopedContext context(this);
|
2382
|
+
send_initial_metadata_.reset();
|
2383
|
+
recv_status_on_client_ = absl::monostate();
|
2384
|
+
promise_ = ArenaPromise<ServerMetadataHandle>();
|
2385
|
+
// Need to destroy the pipes under the ScopedContext above, so we move them
|
2386
|
+
// out here and then allow the destructors to run at end of scope, but
|
2387
|
+
// before context.
|
2388
|
+
auto c2s = std::move(client_to_server_messages_);
|
2389
|
+
auto s2c = std::move(server_to_client_messages_);
|
2390
|
+
}
|
2391
|
+
|
2392
|
+
absl::string_view GetServerAuthority() const override { abort(); }
|
2393
|
+
void CancelWithError(grpc_error_handle error) override;
|
2394
|
+
bool Completed() override;
|
2395
|
+
void Orphan() override {
|
2396
|
+
MutexLock lock(mu());
|
2397
|
+
ScopedContext ctx(this);
|
2398
|
+
if (!completed_) Finish(ServerMetadataFromStatus(absl::CancelledError()));
|
2399
|
+
}
|
2400
|
+
bool is_trailers_only() const override {
|
2401
|
+
MutexLock lock(mu());
|
2402
|
+
return is_trailers_only_;
|
2403
|
+
}
|
2404
|
+
bool failed_before_recv_message() const override { abort(); }
|
2405
|
+
|
2406
|
+
grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
|
2407
|
+
bool is_notify_tag_closure) override;
|
2408
|
+
|
2409
|
+
std::string DebugTag() const override {
|
2410
|
+
return absl::StrFormat("CLIENT_CALL[%p]: ", this);
|
2411
|
+
}
|
2412
|
+
|
2413
|
+
private:
|
2414
|
+
// Poll the underlying promise (and sundry objects) once.
|
2415
|
+
void UpdateOnce() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu()) override;
|
2416
|
+
// Finish the call with the given status/trailing metadata.
|
2417
|
+
void Finish(ServerMetadataHandle trailing_metadata)
|
2418
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
|
2419
|
+
// Validate that a set of ops is valid for a client call.
|
2420
|
+
grpc_call_error ValidateBatch(const grpc_op* ops, size_t nops) const
|
2421
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
|
2422
|
+
// Commit a valid batch of operations to be executed.
|
2423
|
+
void CommitBatch(const grpc_op* ops, size_t nops,
|
2424
|
+
const Completion& completion)
|
2425
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
|
2426
|
+
// Start the underlying promise.
|
2427
|
+
void StartPromise(ClientMetadataHandle client_initial_metadata)
|
2428
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
|
2429
|
+
// Publish some metadata out to the application.
|
2430
|
+
static void PublishMetadataArray(grpc_metadata_array* array,
|
2431
|
+
ServerMetadata* md);
|
2432
|
+
// Publish status out to the application.
|
2433
|
+
void PublishStatus(
|
2434
|
+
grpc_op::grpc_op_data::grpc_op_recv_status_on_client op_args,
|
2435
|
+
ServerMetadataHandle trailing_metadata)
|
2436
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
|
2437
|
+
// Publish server initial metadata out to the application.
|
2438
|
+
void PublishInitialMetadata(ServerMetadata* metadata)
|
2439
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
|
2440
|
+
|
2441
|
+
ArenaPromise<ServerMetadataHandle> promise_ ABSL_GUARDED_BY(mu());
|
2442
|
+
Latch<ServerMetadata*> server_initial_metadata_ ABSL_GUARDED_BY(mu());
|
2443
|
+
Pipe<MessageHandle> client_to_server_messages_ ABSL_GUARDED_BY(mu()){arena()};
|
2444
|
+
Pipe<MessageHandle> server_to_client_messages_ ABSL_GUARDED_BY(mu()){arena()};
|
2445
|
+
|
2446
|
+
ClientMetadataHandle send_initial_metadata_;
|
2447
|
+
grpc_metadata_array* recv_initial_metadata_ ABSL_GUARDED_BY(mu()) = nullptr;
|
2448
|
+
grpc_byte_buffer** recv_message_ ABSL_GUARDED_BY(mu()) = nullptr;
|
2449
|
+
absl::variant<absl::monostate,
|
2450
|
+
grpc_op::grpc_op_data::grpc_op_recv_status_on_client,
|
2451
|
+
ServerMetadataHandle>
|
2452
|
+
recv_status_on_client_ ABSL_GUARDED_BY(mu());
|
2453
|
+
absl::optional<PipeSender<MessageHandle>::PushType> outstanding_send_
|
2454
|
+
ABSL_GUARDED_BY(mu());
|
2455
|
+
absl::optional<PipeReceiver<MessageHandle>::NextType> outstanding_recv_
|
2456
|
+
ABSL_GUARDED_BY(mu());
|
2457
|
+
absl::optional<Latch<ServerMetadata*>::WaitPromise>
|
2458
|
+
server_initial_metadata_ready_;
|
2459
|
+
absl::optional<grpc_compression_algorithm> incoming_compression_algorithm_;
|
2460
|
+
Completion recv_initial_metadata_completion_ ABSL_GUARDED_BY(mu());
|
2461
|
+
Completion recv_status_on_client_completion_ ABSL_GUARDED_BY(mu());
|
2462
|
+
Completion send_message_completion_ ABSL_GUARDED_BY(mu());
|
2463
|
+
Completion recv_message_completion_ ABSL_GUARDED_BY(mu());
|
2464
|
+
bool completed_ ABSL_GUARDED_BY(mu()) = false;
|
2465
|
+
bool is_trailers_only_ ABSL_GUARDED_BY(mu());
|
2466
|
+
};
|
2467
|
+
|
2468
|
+
void ClientPromiseBasedCall::StartPromise(
|
2469
|
+
ClientMetadataHandle client_initial_metadata) {
|
2470
|
+
GPR_ASSERT(!promise_.has_value());
|
2471
|
+
promise_ = channel()->channel_stack()->MakeClientCallPromise(CallArgs{
|
2472
|
+
std::move(client_initial_metadata),
|
2473
|
+
&server_initial_metadata_,
|
2474
|
+
&client_to_server_messages_.receiver,
|
2475
|
+
&server_to_client_messages_.sender,
|
2476
|
+
});
|
2477
|
+
}
|
2478
|
+
|
2479
|
+
void ClientPromiseBasedCall::CancelWithError(grpc_error_handle error) {
|
2480
|
+
MutexLock lock(mu());
|
2481
|
+
ScopedContext context(this);
|
2482
|
+
Finish(ServerMetadataFromStatus(grpc_error_to_absl_status(error)));
|
2483
|
+
}
|
2484
|
+
|
2485
|
+
grpc_call_error ClientPromiseBasedCall::ValidateBatch(const grpc_op* ops,
|
2486
|
+
size_t nops) const {
|
2487
|
+
BitSet<8> got_ops;
|
2488
|
+
for (size_t op_idx = 0; op_idx < nops; op_idx++) {
|
2489
|
+
const grpc_op& op = ops[op_idx];
|
2490
|
+
switch (op.op) {
|
2491
|
+
case GRPC_OP_SEND_INITIAL_METADATA:
|
2492
|
+
if (!AreInitialMetadataFlagsValid(op.flags)) {
|
2493
|
+
return GRPC_CALL_ERROR_INVALID_FLAGS;
|
2494
|
+
}
|
2495
|
+
if (!ValidateMetadata(op.data.send_initial_metadata.count,
|
2496
|
+
op.data.send_initial_metadata.metadata)) {
|
2497
|
+
return GRPC_CALL_ERROR_INVALID_METADATA;
|
2498
|
+
}
|
2499
|
+
break;
|
2500
|
+
case GRPC_OP_SEND_MESSAGE:
|
2501
|
+
if (!AreWriteFlagsValid(op.flags)) {
|
2502
|
+
return GRPC_CALL_ERROR_INVALID_FLAGS;
|
2503
|
+
}
|
2504
|
+
break;
|
2505
|
+
case GRPC_OP_RECV_INITIAL_METADATA:
|
2506
|
+
case GRPC_OP_RECV_MESSAGE:
|
2507
|
+
case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
|
2508
|
+
case GRPC_OP_RECV_STATUS_ON_CLIENT:
|
2509
|
+
if (op.flags != 0) return GRPC_CALL_ERROR_INVALID_FLAGS;
|
2510
|
+
break;
|
2511
|
+
case GRPC_OP_RECV_CLOSE_ON_SERVER:
|
2512
|
+
case GRPC_OP_SEND_STATUS_FROM_SERVER:
|
2513
|
+
return GRPC_CALL_ERROR_NOT_ON_CLIENT;
|
2514
|
+
}
|
2515
|
+
if (got_ops.is_set(op.op)) return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
|
2516
|
+
got_ops.set(op.op);
|
2517
|
+
}
|
2518
|
+
return GRPC_CALL_OK;
|
2519
|
+
}
|
2520
|
+
|
2521
|
+
void ClientPromiseBasedCall::CommitBatch(const grpc_op* ops, size_t nops,
|
2522
|
+
const Completion& completion) {
|
2523
|
+
for (size_t op_idx = 0; op_idx < nops; op_idx++) {
|
2524
|
+
const grpc_op& op = ops[op_idx];
|
2525
|
+
switch (op.op) {
|
2526
|
+
case GRPC_OP_SEND_INITIAL_METADATA: {
|
2527
|
+
// compression not implemented
|
2528
|
+
GPR_ASSERT(
|
2529
|
+
!op.data.send_initial_metadata.maybe_compression_level.is_set);
|
2530
|
+
if (!completed_) {
|
2531
|
+
CToMetadata(op.data.send_initial_metadata.metadata,
|
2532
|
+
op.data.send_initial_metadata.count,
|
2533
|
+
send_initial_metadata_.get());
|
2534
|
+
StartPromise(std::move(send_initial_metadata_));
|
2535
|
+
}
|
2536
|
+
} break;
|
2537
|
+
case GRPC_OP_RECV_INITIAL_METADATA: {
|
2538
|
+
recv_initial_metadata_ =
|
2539
|
+
op.data.recv_initial_metadata.recv_initial_metadata;
|
2540
|
+
server_initial_metadata_ready_ = server_initial_metadata_.Wait();
|
2541
|
+
recv_initial_metadata_completion_ =
|
2542
|
+
AddOpToCompletion(completion, PendingOp::kReceiveInitialMetadata);
|
2543
|
+
} break;
|
2544
|
+
case GRPC_OP_RECV_STATUS_ON_CLIENT: {
|
2545
|
+
recv_status_on_client_completion_ =
|
2546
|
+
AddOpToCompletion(completion, PendingOp::kReceiveStatusOnClient);
|
2547
|
+
if (auto* finished_metadata =
|
2548
|
+
absl::get_if<ServerMetadataHandle>(&recv_status_on_client_)) {
|
2549
|
+
PublishStatus(op.data.recv_status_on_client,
|
2550
|
+
std::move(*finished_metadata));
|
2551
|
+
} else {
|
2552
|
+
recv_status_on_client_ = op.data.recv_status_on_client;
|
2553
|
+
}
|
2554
|
+
} break;
|
2555
|
+
case GRPC_OP_SEND_MESSAGE: {
|
2556
|
+
GPR_ASSERT(!outstanding_send_.has_value());
|
2557
|
+
if (!completed_) {
|
2558
|
+
send_message_completion_ =
|
2559
|
+
AddOpToCompletion(completion, PendingOp::kSendMessage);
|
2560
|
+
SliceBuffer send;
|
2561
|
+
grpc_slice_buffer_swap(
|
2562
|
+
&op.data.send_message.send_message->data.raw.slice_buffer,
|
2563
|
+
send.c_slice_buffer());
|
2564
|
+
outstanding_send_.emplace(client_to_server_messages_.sender.Push(
|
2565
|
+
GetContext<Arena>()->MakePooled<Message>(std::move(send),
|
2566
|
+
op.flags)));
|
2567
|
+
} else {
|
2568
|
+
FailCompletion(completion);
|
2569
|
+
}
|
2570
|
+
} break;
|
2571
|
+
case GRPC_OP_RECV_MESSAGE: {
|
2572
|
+
GPR_ASSERT(!outstanding_recv_.has_value());
|
2573
|
+
recv_message_ = op.data.recv_message.recv_message;
|
2574
|
+
recv_message_completion_ =
|
2575
|
+
AddOpToCompletion(completion, PendingOp::kReceiveMessage);
|
2576
|
+
outstanding_recv_.emplace(server_to_client_messages_.receiver.Next());
|
2577
|
+
} break;
|
2578
|
+
case GRPC_OP_SEND_CLOSE_FROM_CLIENT: {
|
2579
|
+
client_to_server_messages_.sender.Close();
|
2580
|
+
} break;
|
2581
|
+
case GRPC_OP_SEND_STATUS_FROM_SERVER:
|
2582
|
+
case GRPC_OP_RECV_CLOSE_ON_SERVER:
|
2583
|
+
abort(); // unreachable
|
2584
|
+
}
|
2585
|
+
}
|
2586
|
+
}
|
2587
|
+
|
2588
|
+
grpc_call_error ClientPromiseBasedCall::StartBatch(const grpc_op* ops,
|
2589
|
+
size_t nops,
|
2590
|
+
void* notify_tag,
|
2591
|
+
bool is_notify_tag_closure) {
|
2592
|
+
MutexLock lock(mu());
|
2593
|
+
ScopedContext activity_context(this);
|
2594
|
+
if (nops == 0) {
|
2595
|
+
EndOpImmediately(cq(), notify_tag, is_notify_tag_closure);
|
2596
|
+
return GRPC_CALL_OK;
|
2597
|
+
}
|
2598
|
+
const grpc_call_error validation_result = ValidateBatch(ops, nops);
|
2599
|
+
if (validation_result != GRPC_CALL_OK) {
|
2600
|
+
return validation_result;
|
2601
|
+
}
|
2602
|
+
Completion completion =
|
2603
|
+
StartCompletion(notify_tag, is_notify_tag_closure, ops);
|
2604
|
+
CommitBatch(ops, nops, completion);
|
2605
|
+
Update();
|
2606
|
+
FinishOpOnCompletion(&completion, PendingOp::kStartingBatch);
|
2607
|
+
return GRPC_CALL_OK;
|
2608
|
+
}
|
2609
|
+
|
2610
|
+
void ClientPromiseBasedCall::PublishInitialMetadata(ServerMetadata* metadata) {
|
2611
|
+
incoming_compression_algorithm_ =
|
2612
|
+
metadata->Take(GrpcEncodingMetadata()).value_or(GRPC_COMPRESS_NONE);
|
2613
|
+
server_initial_metadata_ready_.reset();
|
2614
|
+
GPR_ASSERT(recv_initial_metadata_ != nullptr);
|
2615
|
+
PublishMetadataArray(std::exchange(recv_initial_metadata_, nullptr),
|
2616
|
+
metadata);
|
2617
|
+
FinishOpOnCompletion(&recv_initial_metadata_completion_,
|
2618
|
+
PendingOp::kReceiveInitialMetadata);
|
2619
|
+
}
|
2620
|
+
|
2621
|
+
void ClientPromiseBasedCall::UpdateOnce() {
|
2622
|
+
if (grpc_call_trace.enabled()) {
|
2623
|
+
auto present_and_completion_text =
|
2624
|
+
[](const char* caption, bool has,
|
2625
|
+
const Completion& completion) -> std::string {
|
2626
|
+
if (has) {
|
2627
|
+
if (completion.has_value()) {
|
2628
|
+
return absl::StrCat(caption, ":",
|
2629
|
+
static_cast<int>(completion.index()), " ");
|
2630
|
+
} else {
|
2631
|
+
return absl::StrCat(caption,
|
2632
|
+
":!!BUG:operation is present, no completion!! ");
|
2633
|
+
}
|
2634
|
+
} else {
|
2635
|
+
if (!completion.has_value()) {
|
2636
|
+
return "";
|
2637
|
+
} else {
|
2638
|
+
return absl::StrCat(
|
2639
|
+
caption, ":no-op:", static_cast<int>(completion.index()), " ");
|
2640
|
+
}
|
2641
|
+
}
|
2642
|
+
};
|
2643
|
+
gpr_log(
|
2644
|
+
GPR_INFO, "%sUpdateOnce: %s%s%shas_promise=%s", DebugTag().c_str(),
|
2645
|
+
present_and_completion_text("server_initial_metadata_ready",
|
2646
|
+
server_initial_metadata_ready_.has_value(),
|
2647
|
+
recv_initial_metadata_completion_)
|
2648
|
+
.c_str(),
|
2649
|
+
present_and_completion_text("outstanding_send",
|
2650
|
+
outstanding_send_.has_value(),
|
2651
|
+
send_message_completion_)
|
2652
|
+
.c_str(),
|
2653
|
+
present_and_completion_text("outstanding_recv",
|
2654
|
+
outstanding_recv_.has_value(),
|
2655
|
+
recv_message_completion_)
|
2656
|
+
.c_str(),
|
2657
|
+
promise_.has_value() ? "true" : "false");
|
2658
|
+
}
|
2659
|
+
if (send_message_completion_.has_value()) {
|
2660
|
+
FinishOpOnCompletion(&send_message_completion_, PendingOp::kSendMessage);
|
2661
|
+
}
|
2662
|
+
if (server_initial_metadata_ready_.has_value()) {
|
2663
|
+
Poll<ServerMetadata**> r = (*server_initial_metadata_ready_)();
|
2664
|
+
if (ServerMetadata*** server_initial_metadata =
|
2665
|
+
absl::get_if<ServerMetadata**>(&r)) {
|
2666
|
+
PublishInitialMetadata(**server_initial_metadata);
|
2667
|
+
} else if (completed_) {
|
2668
|
+
ServerMetadata no_metadata{GetContext<Arena>()};
|
2669
|
+
PublishInitialMetadata(&no_metadata);
|
2670
|
+
}
|
2671
|
+
}
|
2672
|
+
if (outstanding_send_.has_value()) {
|
2673
|
+
Poll<bool> r = (*outstanding_send_)();
|
2674
|
+
if (const bool* result = absl::get_if<bool>(&r)) {
|
2675
|
+
outstanding_send_.reset();
|
2676
|
+
if (!*result) {
|
2677
|
+
FailCompletion(send_message_completion_);
|
2678
|
+
Finish(ServerMetadataFromStatus(absl::Status(
|
2679
|
+
absl::StatusCode::kInternal, "Failed to send message to server")));
|
2680
|
+
}
|
2681
|
+
}
|
2682
|
+
}
|
2683
|
+
if (promise_.has_value()) {
|
2684
|
+
Poll<ServerMetadataHandle> r = promise_();
|
2685
|
+
if (grpc_call_trace.enabled()) {
|
2686
|
+
gpr_log(GPR_INFO, "%sUpdateOnce: promise returns %s", DebugTag().c_str(),
|
2687
|
+
PollToString(r, [](const ServerMetadataHandle& h) {
|
2688
|
+
return h->DebugString();
|
2689
|
+
}).c_str());
|
2690
|
+
}
|
2691
|
+
if (auto* result = absl::get_if<ServerMetadataHandle>(&r)) {
|
2692
|
+
AcceptTransportStatsFromContext();
|
2693
|
+
Finish(std::move(*result));
|
2694
|
+
}
|
2695
|
+
}
|
2696
|
+
if (incoming_compression_algorithm_.has_value() &&
|
2697
|
+
outstanding_recv_.has_value()) {
|
2698
|
+
Poll<NextResult<MessageHandle>> r = (*outstanding_recv_)();
|
2699
|
+
if (auto* result = absl::get_if<NextResult<MessageHandle>>(&r)) {
|
2700
|
+
outstanding_recv_.reset();
|
2701
|
+
if (result->has_value()) {
|
2702
|
+
MessageHandle& message = **result;
|
2703
|
+
if ((message->flags() & GRPC_WRITE_INTERNAL_COMPRESS) &&
|
2704
|
+
(incoming_compression_algorithm_ != GRPC_COMPRESS_NONE)) {
|
2705
|
+
*recv_message_ = grpc_raw_compressed_byte_buffer_create(
|
2706
|
+
nullptr, 0, *incoming_compression_algorithm_);
|
2707
|
+
} else {
|
2708
|
+
*recv_message_ = grpc_raw_byte_buffer_create(nullptr, 0);
|
2709
|
+
}
|
2710
|
+
grpc_slice_buffer_move_into(message->payload()->c_slice_buffer(),
|
2711
|
+
&(*recv_message_)->data.raw.slice_buffer);
|
2712
|
+
if (grpc_call_trace.enabled()) {
|
2713
|
+
gpr_log(GPR_INFO,
|
2714
|
+
"%sUpdateOnce: outstanding_recv finishes: received %" PRIdPTR
|
2715
|
+
" byte message",
|
2716
|
+
DebugTag().c_str(),
|
2717
|
+
(*recv_message_)->data.raw.slice_buffer.length);
|
2718
|
+
}
|
2719
|
+
} else {
|
2720
|
+
if (grpc_call_trace.enabled()) {
|
2721
|
+
gpr_log(
|
2722
|
+
GPR_INFO,
|
2723
|
+
"%sUpdateOnce: outstanding_recv finishes: received end-of-stream",
|
2724
|
+
DebugTag().c_str());
|
2725
|
+
}
|
2726
|
+
*recv_message_ = nullptr;
|
2727
|
+
}
|
2728
|
+
FinishOpOnCompletion(&recv_message_completion_,
|
2729
|
+
PendingOp::kReceiveMessage);
|
2730
|
+
} else if (completed_) {
|
2731
|
+
if (grpc_call_trace.enabled()) {
|
2732
|
+
gpr_log(GPR_INFO,
|
2733
|
+
"%sUpdateOnce: outstanding_recv finishes: promise has "
|
2734
|
+
"completed without queuing a message, forcing end-of-stream",
|
2735
|
+
DebugTag().c_str());
|
2736
|
+
}
|
2737
|
+
outstanding_recv_.reset();
|
2738
|
+
*recv_message_ = nullptr;
|
2739
|
+
FinishOpOnCompletion(&recv_message_completion_,
|
2740
|
+
PendingOp::kReceiveMessage);
|
2741
|
+
}
|
2742
|
+
}
|
2743
|
+
}
|
2744
|
+
|
2745
|
+
void ClientPromiseBasedCall::Finish(ServerMetadataHandle trailing_metadata) {
|
2746
|
+
if (grpc_call_trace.enabled()) {
|
2747
|
+
gpr_log(GPR_INFO, "%sFinish: %s", DebugTag().c_str(),
|
2748
|
+
trailing_metadata->DebugString().c_str());
|
2749
|
+
}
|
2750
|
+
promise_ = ArenaPromise<ServerMetadataHandle>();
|
2751
|
+
completed_ = true;
|
2752
|
+
if (recv_initial_metadata_ != nullptr) {
|
2753
|
+
ForceImmediateRepoll();
|
2754
|
+
}
|
2755
|
+
const bool pending_initial_metadata =
|
2756
|
+
server_initial_metadata_ready_.has_value();
|
2757
|
+
server_initial_metadata_ready_.reset();
|
2758
|
+
Poll<ServerMetadata**> r = server_initial_metadata_.Wait()();
|
2759
|
+
if (auto* result = absl::get_if<ServerMetadata**>(&r)) {
|
2760
|
+
if (pending_initial_metadata) PublishInitialMetadata(**result);
|
2761
|
+
is_trailers_only_ = false;
|
2762
|
+
} else {
|
2763
|
+
if (pending_initial_metadata) {
|
2764
|
+
ServerMetadata no_metadata{GetContext<Arena>()};
|
2765
|
+
PublishInitialMetadata(&no_metadata);
|
2766
|
+
}
|
2767
|
+
is_trailers_only_ = true;
|
2768
|
+
}
|
2769
|
+
if (auto* channelz_channel = channel()->channelz_node()) {
|
2770
|
+
if (trailing_metadata->get(GrpcStatusMetadata())
|
2771
|
+
.value_or(GRPC_STATUS_UNKNOWN) == GRPC_STATUS_OK) {
|
2772
|
+
channelz_channel->RecordCallSucceeded();
|
2773
|
+
} else {
|
2774
|
+
channelz_channel->RecordCallFailed();
|
2775
|
+
}
|
2776
|
+
}
|
2777
|
+
if (auto* status_request =
|
2778
|
+
absl::get_if<grpc_op::grpc_op_data::grpc_op_recv_status_on_client>(
|
2779
|
+
&recv_status_on_client_)) {
|
2780
|
+
PublishStatus(*status_request, std::move(trailing_metadata));
|
2781
|
+
} else {
|
2782
|
+
recv_status_on_client_ = std::move(trailing_metadata);
|
2783
|
+
}
|
2784
|
+
}
|
2785
|
+
|
2786
|
+
namespace {
|
2787
|
+
std::string MakeErrorString(const ServerMetadata* trailing_metadata) {
|
2788
|
+
std::string out = absl::StrCat(
|
2789
|
+
trailing_metadata->get(GrpcStatusFromWire()).value_or(false)
|
2790
|
+
? "Error received from peer"
|
2791
|
+
: "Error generated by client",
|
2792
|
+
"grpc_status: ",
|
2793
|
+
grpc_status_code_to_string(trailing_metadata->get(GrpcStatusMetadata())
|
2794
|
+
.value_or(GRPC_STATUS_UNKNOWN)));
|
2795
|
+
if (const Slice* message =
|
2796
|
+
trailing_metadata->get_pointer(GrpcMessageMetadata())) {
|
2797
|
+
absl::StrAppend(&out, "\ngrpc_message: ", message->as_string_view());
|
2798
|
+
}
|
2799
|
+
if (auto annotations = trailing_metadata->get_pointer(GrpcStatusContext())) {
|
2800
|
+
absl::StrAppend(&out, "\nStatus Context:");
|
2801
|
+
for (const std::string& annotation : *annotations) {
|
2802
|
+
absl::StrAppend(&out, "\n ", annotation);
|
2803
|
+
}
|
2804
|
+
}
|
2805
|
+
return out;
|
2806
|
+
}
|
2807
|
+
} // namespace
|
2808
|
+
|
2809
|
+
void ClientPromiseBasedCall::PublishStatus(
|
2810
|
+
grpc_op::grpc_op_data::grpc_op_recv_status_on_client op_args,
|
2811
|
+
ServerMetadataHandle trailing_metadata) {
|
2812
|
+
const grpc_status_code status = trailing_metadata->get(GrpcStatusMetadata())
|
2813
|
+
.value_or(GRPC_STATUS_UNKNOWN);
|
2814
|
+
*op_args.status = status;
|
2815
|
+
absl::string_view message_string;
|
2816
|
+
if (Slice* message = trailing_metadata->get_pointer(GrpcMessageMetadata())) {
|
2817
|
+
message_string = message->as_string_view();
|
2818
|
+
*op_args.status_details = message->Ref().TakeCSlice();
|
2819
|
+
} else {
|
2820
|
+
*op_args.status_details = grpc_empty_slice();
|
2821
|
+
}
|
2822
|
+
if (message_string.empty()) {
|
2823
|
+
RunFinalization(status, nullptr);
|
2824
|
+
} else {
|
2825
|
+
std::string error_string(message_string);
|
2826
|
+
RunFinalization(status, error_string.c_str());
|
2827
|
+
}
|
2828
|
+
if (op_args.error_string != nullptr && status != GRPC_STATUS_OK) {
|
2829
|
+
*op_args.error_string =
|
2830
|
+
gpr_strdup(MakeErrorString(trailing_metadata.get()).c_str());
|
2831
|
+
}
|
2832
|
+
PublishMetadataArray(op_args.trailing_metadata, trailing_metadata.get());
|
2833
|
+
FinishOpOnCompletion(&recv_status_on_client_completion_,
|
2834
|
+
PendingOp::kReceiveStatusOnClient);
|
2835
|
+
}
|
2836
|
+
|
2837
|
+
void ClientPromiseBasedCall::PublishMetadataArray(grpc_metadata_array* array,
|
2838
|
+
ServerMetadata* md) {
|
2839
|
+
const auto md_count = md->count();
|
2840
|
+
if (md_count > array->capacity) {
|
2841
|
+
array->capacity =
|
2842
|
+
std::max(array->capacity + md->count(), array->capacity * 3 / 2);
|
2843
|
+
array->metadata = static_cast<grpc_metadata*>(
|
2844
|
+
gpr_realloc(array->metadata, sizeof(grpc_metadata) * array->capacity));
|
2845
|
+
}
|
2846
|
+
PublishToAppEncoder encoder(array);
|
2847
|
+
md->Encode(&encoder);
|
2848
|
+
}
|
2849
|
+
|
2850
|
+
bool ClientPromiseBasedCall::Completed() {
|
2851
|
+
MutexLock lock(mu());
|
2852
|
+
return completed_;
|
2853
|
+
}
|
2854
|
+
|
2855
|
+
gpr_atm* CallContext::peer_string_atm_ptr() {
|
2856
|
+
return call_->peer_string_atm_ptr();
|
2857
|
+
}
|
2858
|
+
|
2859
|
+
} // namespace grpc_core
|
2860
|
+
|
2861
|
+
///////////////////////////////////////////////////////////////////////////////
|
2862
|
+
// C-based API
|
2863
|
+
|
2864
|
+
void* grpc_call_arena_alloc(grpc_call* call, size_t size) {
|
2865
|
+
grpc_core::ExecCtx exec_ctx;
|
2866
|
+
return grpc_core::Call::FromC(call)->arena()->Alloc(size);
|
2867
|
+
}
|
2868
|
+
|
2869
|
+
size_t grpc_call_get_initial_size_estimate() {
|
2870
|
+
return grpc_core::FilterStackCall::InitialSizeEstimate();
|
2871
|
+
}
|
2872
|
+
|
2873
|
+
grpc_error_handle grpc_call_create(grpc_call_create_args* args,
|
2874
|
+
grpc_call** out_call) {
|
2875
|
+
if (grpc_core::IsPromiseBasedClientCallEnabled() &&
|
2876
|
+
args->channel->is_promising()) {
|
2877
|
+
if (args->server_transport_data == nullptr) {
|
2878
|
+
return grpc_core::MakePromiseBasedCall<grpc_core::ClientPromiseBasedCall>(
|
2879
|
+
args, out_call);
|
2880
|
+
}
|
2881
|
+
}
|
2882
|
+
return grpc_core::FilterStackCall::Create(args, out_call);
|
2883
|
+
}
|
2884
|
+
|
2885
|
+
void grpc_call_set_completion_queue(grpc_call* call,
|
2886
|
+
grpc_completion_queue* cq) {
|
2887
|
+
grpc_core::Call::FromC(call)->SetCompletionQueue(cq);
|
2888
|
+
}
|
2889
|
+
|
2890
|
+
void grpc_call_ref(grpc_call* c) { grpc_core::Call::FromC(c)->ExternalRef(); }
|
2891
|
+
|
2892
|
+
void grpc_call_unref(grpc_call* c) {
|
2893
|
+
grpc_core::ExecCtx exec_ctx;
|
2894
|
+
grpc_core::Call::FromC(c)->ExternalUnref();
|
2895
|
+
}
|
2896
|
+
|
2897
|
+
char* grpc_call_get_peer(grpc_call* call) {
|
2898
|
+
return grpc_core::Call::FromC(call)->GetPeer();
|
2899
|
+
}
|
2900
|
+
|
2901
|
+
grpc_call* grpc_call_from_top_element(grpc_call_element* surface_element) {
|
2902
|
+
return grpc_core::FilterStackCall::FromTopElem(surface_element)->c_ptr();
|
2903
|
+
}
|
2904
|
+
|
2905
|
+
grpc_call_error grpc_call_cancel(grpc_call* call, void* reserved) {
|
2906
|
+
GRPC_API_TRACE("grpc_call_cancel(call=%p, reserved=%p)", 2, (call, reserved));
|
2907
|
+
GPR_ASSERT(reserved == nullptr);
|
2908
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2909
|
+
grpc_core::ExecCtx exec_ctx;
|
2910
|
+
grpc_core::Call::FromC(call)->CancelWithError(absl::CancelledError());
|
2911
|
+
return GRPC_CALL_OK;
|
2912
|
+
}
|
2913
|
+
|
2914
|
+
grpc_call_error grpc_call_cancel_with_status(grpc_call* c,
|
2915
|
+
grpc_status_code status,
|
2916
|
+
const char* description,
|
2917
|
+
void* reserved) {
|
2918
|
+
GRPC_API_TRACE(
|
2919
|
+
"grpc_call_cancel_with_status("
|
2920
|
+
"c=%p, status=%d, description=%s, reserved=%p)",
|
2921
|
+
4, (c, (int)status, description, reserved));
|
2922
|
+
GPR_ASSERT(reserved == nullptr);
|
2923
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2924
|
+
grpc_core::ExecCtx exec_ctx;
|
2925
|
+
grpc_core::Call::FromC(c)->CancelWithStatus(status, description);
|
2926
|
+
return GRPC_CALL_OK;
|
2927
|
+
}
|
2928
|
+
|
2929
|
+
void grpc_call_cancel_internal(grpc_call* call) {
|
2930
|
+
grpc_core::Call::FromC(call)->CancelWithError(absl::CancelledError());
|
2931
|
+
}
|
2932
|
+
|
2933
|
+
grpc_compression_algorithm grpc_call_test_only_get_compression_algorithm(
|
2934
|
+
grpc_call* call) {
|
2935
|
+
return grpc_core::Call::FromC(call)->test_only_compression_algorithm();
|
2936
|
+
}
|
2937
|
+
|
2938
|
+
uint32_t grpc_call_test_only_get_message_flags(grpc_call* call) {
|
2939
|
+
return grpc_core::Call::FromC(call)->test_only_message_flags();
|
2940
|
+
}
|
2941
|
+
|
2942
|
+
uint32_t grpc_call_test_only_get_encodings_accepted_by_peer(grpc_call* call) {
|
2943
|
+
return grpc_core::Call::FromC(call)->test_only_encodings_accepted_by_peer();
|
2944
|
+
}
|
2945
|
+
|
2946
|
+
grpc_core::Arena* grpc_call_get_arena(grpc_call* call) {
|
2947
|
+
return grpc_core::Call::FromC(call)->arena();
|
2948
|
+
}
|
2949
|
+
|
2950
|
+
grpc_call_stack* grpc_call_get_call_stack(grpc_call* call) {
|
2951
|
+
return grpc_core::Call::FromC(call)->call_stack();
|
2952
|
+
}
|
2953
|
+
|
1961
2954
|
grpc_call_error grpc_call_start_batch(grpc_call* call, const grpc_op* ops,
|
1962
2955
|
size_t nops, void* tag, void* reserved) {
|
1963
|
-
grpc_call_error err;
|
1964
|
-
|
1965
2956
|
GRPC_API_TRACE(
|
1966
2957
|
"grpc_call_start_batch(call=%p, ops=%p, nops=%lu, tag=%p, "
|
1967
2958
|
"reserved=%p)",
|
1968
2959
|
5, (call, ops, (unsigned long)nops, tag, reserved));
|
1969
2960
|
|
1970
2961
|
if (reserved != nullptr) {
|
1971
|
-
|
2962
|
+
return GRPC_CALL_ERROR;
|
1972
2963
|
} else {
|
1973
2964
|
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
1974
2965
|
grpc_core::ExecCtx exec_ctx;
|
1975
|
-
|
2966
|
+
return grpc_core::Call::FromC(call)->StartBatch(ops, nops, tag, false);
|
1976
2967
|
}
|
1977
|
-
|
1978
|
-
return err;
|
1979
2968
|
}
|
1980
2969
|
|
1981
2970
|
grpc_call_error grpc_call_start_batch_and_execute(grpc_call* call,
|
1982
2971
|
const grpc_op* ops,
|
1983
2972
|
size_t nops,
|
1984
2973
|
grpc_closure* closure) {
|
1985
|
-
return
|
2974
|
+
return grpc_core::Call::FromC(call)->StartBatch(ops, nops, closure, true);
|
1986
2975
|
}
|
1987
2976
|
|
1988
2977
|
void grpc_call_context_set(grpc_call* call, grpc_context_index elem,
|
1989
2978
|
void* value, void (*destroy)(void* value)) {
|
1990
|
-
|
1991
|
-
call->context[elem].destroy(call->context[elem].value);
|
1992
|
-
}
|
1993
|
-
call->context[elem].value = value;
|
1994
|
-
call->context[elem].destroy = destroy;
|
2979
|
+
return grpc_core::Call::FromC(call)->ContextSet(elem, value, destroy);
|
1995
2980
|
}
|
1996
2981
|
|
1997
2982
|
void* grpc_call_context_get(grpc_call* call, grpc_context_index elem) {
|
1998
|
-
return call->
|
2983
|
+
return grpc_core::Call::FromC(call)->ContextGet(elem);
|
1999
2984
|
}
|
2000
2985
|
|
2001
|
-
uint8_t grpc_call_is_client(grpc_call* call) {
|
2986
|
+
uint8_t grpc_call_is_client(grpc_call* call) {
|
2987
|
+
return grpc_core::Call::FromC(call)->is_client();
|
2988
|
+
}
|
2002
2989
|
|
2003
2990
|
grpc_compression_algorithm grpc_call_compression_for_level(
|
2004
2991
|
grpc_call* call, grpc_compression_level level) {
|
2005
|
-
|
2006
|
-
compression_algorithm_for_level_locked(call, level);
|
2007
|
-
return algo;
|
2992
|
+
return grpc_core::Call::FromC(call)->compression_for_level(level);
|
2008
2993
|
}
|
2009
2994
|
|
2010
2995
|
bool grpc_call_is_trailers_only(const grpc_call* call) {
|
2011
|
-
|
2012
|
-
GPR_DEBUG_ASSERT(!result || call->recv_initial_metadata.empty());
|
2013
|
-
return result;
|
2996
|
+
return grpc_core::Call::FromC(call)->is_trailers_only();
|
2014
2997
|
}
|
2015
2998
|
|
2016
2999
|
int grpc_call_failed_before_recv_message(const grpc_call* c) {
|
2017
|
-
return c->
|
3000
|
+
return grpc_core::Call::FromC(c)->failed_before_recv_message();
|
3001
|
+
}
|
3002
|
+
|
3003
|
+
absl::string_view grpc_call_server_authority(const grpc_call* call) {
|
3004
|
+
return grpc_core::Call::FromC(call)->GetServerAuthority();
|
2018
3005
|
}
|
2019
3006
|
|
2020
3007
|
const char* grpc_call_error_to_string(grpc_call_error error) {
|