grpc 1.50.0 → 1.56.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +453 -176
- data/include/grpc/byte_buffer.h +76 -1
- data/include/grpc/byte_buffer_reader.h +19 -1
- data/include/grpc/compression.h +2 -2
- data/include/grpc/event_engine/event_engine.h +83 -23
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
- data/include/grpc/event_engine/internal/slice_cast.h +67 -0
- data/include/grpc/event_engine/memory_allocator.h +1 -1
- data/include/grpc/event_engine/slice.h +24 -4
- data/include/grpc/event_engine/slice_buffer.h +44 -3
- data/include/grpc/fork.h +25 -1
- data/include/grpc/grpc.h +3 -13
- data/include/grpc/grpc_audit_logging.h +96 -0
- data/include/grpc/grpc_posix.h +1 -1
- data/include/grpc/grpc_security.h +4 -0
- data/include/grpc/impl/codegen/atm.h +3 -71
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -58
- data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -59
- data/include/grpc/impl/codegen/atm_windows.h +3 -106
- data/include/grpc/impl/codegen/byte_buffer.h +4 -78
- data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
- data/include/grpc/impl/codegen/compression_types.h +3 -82
- data/include/grpc/impl/codegen/connectivity_state.h +3 -20
- data/include/grpc/impl/codegen/fork.h +4 -25
- data/include/grpc/impl/codegen/gpr_types.h +2 -34
- data/include/grpc/impl/codegen/grpc_types.h +3 -791
- data/include/grpc/impl/codegen/log.h +3 -86
- data/include/grpc/impl/codegen/port_platform.h +3 -758
- data/include/grpc/impl/codegen/propagation_bits.h +3 -28
- data/include/grpc/impl/codegen/slice.h +3 -106
- data/include/grpc/impl/codegen/status.h +4 -131
- data/include/grpc/impl/codegen/sync.h +3 -42
- data/include/grpc/impl/codegen/sync_abseil.h +3 -12
- data/include/grpc/impl/codegen/sync_custom.h +3 -14
- data/include/grpc/impl/codegen/sync_generic.h +3 -25
- data/include/grpc/impl/codegen/sync_posix.h +3 -28
- data/include/grpc/impl/codegen/sync_windows.h +3 -16
- data/include/grpc/impl/compression_types.h +109 -0
- data/include/grpc/impl/connectivity_state.h +47 -0
- data/include/grpc/impl/grpc_types.h +838 -0
- data/include/grpc/impl/propagation_bits.h +54 -0
- data/include/grpc/impl/slice_type.h +112 -0
- data/include/grpc/load_reporting.h +1 -1
- data/include/grpc/module.modulemap +7 -1
- data/include/grpc/slice.h +1 -1
- data/include/grpc/status.h +131 -1
- data/include/grpc/support/atm.h +70 -1
- data/include/grpc/support/atm_gcc_atomic.h +59 -1
- data/include/grpc/support/atm_gcc_sync.h +58 -1
- data/include/grpc/support/atm_windows.h +105 -1
- data/include/grpc/support/json.h +218 -0
- data/include/grpc/support/log.h +87 -1
- data/include/grpc/support/log_windows.h +1 -1
- data/include/grpc/support/port_platform.h +767 -1
- data/include/grpc/support/string_util.h +1 -1
- data/include/grpc/support/sync.h +35 -2
- data/include/grpc/support/sync_abseil.h +11 -1
- data/include/grpc/support/sync_custom.h +13 -1
- data/include/grpc/support/sync_generic.h +24 -1
- data/include/grpc/support/sync_posix.h +27 -1
- data/include/grpc/support/sync_windows.h +15 -1
- data/include/grpc/support/time.h +31 -6
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +164 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
- data/src/core/ext/filters/census/grpc_context.cc +17 -18
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +28 -22
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +5 -4
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +4 -4
- data/src/core/ext/filters/client_channel/backend_metric.cc +12 -1
- data/src/core/ext/filters/client_channel/backend_metric.h +3 -3
- data/src/core/ext/filters/client_channel/backup_poller.cc +26 -35
- data/src/core/ext/filters/client_channel/backup_poller.h +24 -27
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +51 -28
- data/src/core/ext/filters/client_channel/client_channel.cc +1014 -1016
- data/src/core/ext/filters/client_channel/client_channel.h +155 -187
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +36 -37
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +22 -22
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +17 -17
- data/src/core/ext/filters/client_channel/client_channel_factory.h +3 -3
- data/src/core/ext/filters/client_channel/client_channel_internal.h +77 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +18 -18
- data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
- data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
- data/src/core/ext/filters/client_channel/config_selector.h +25 -55
- data/src/core/ext/filters/client_channel/connector.h +9 -5
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +28 -55
- data/src/core/ext/filters/client_channel/dynamic_filters.h +10 -11
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +21 -21
- data/src/core/ext/filters/client_channel/http_proxy.cc +74 -42
- data/src/core/ext/filters/client_channel/http_proxy.h +21 -21
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +29 -21
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +7 -2
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +66 -130
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +40 -24
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +156 -178
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +26 -27
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +4 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +21 -22
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +19 -20
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +22 -23
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +11 -94
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +4 -4
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +263 -242
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +28 -7
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +28 -26
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +76 -112
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +159 -168
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +22 -5
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +173 -171
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +31 -25
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +68 -31
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +198 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +1002 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +76 -70
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +103 -105
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +34 -41
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +76 -113
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +111 -185
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +814 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +67 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +363 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +21 -21
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -10
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +59 -175
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.h +30 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +42 -43
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +22 -23
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +92 -87
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +153 -153
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +54 -55
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +18 -18
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.cc +60 -0
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.h +27 -0
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +549 -0
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.h +35 -0
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +97 -0
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.h +32 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +20 -39
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.h +24 -0
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +4 -4
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +85 -223
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +45 -36
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +12 -15
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +280 -189
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +19 -4
- data/src/core/ext/filters/client_channel/retry_filter.cc +200 -264
- data/src/core/ext/filters/client_channel/retry_filter.h +3 -3
- data/src/core/ext/filters/client_channel/retry_service_config.cc +195 -236
- data/src/core/ext/filters/client_channel/retry_service_config.h +23 -26
- data/src/core/ext/filters/client_channel/retry_throttle.cc +27 -29
- data/src/core/ext/filters/client_channel/retry_throttle.h +29 -28
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +17 -47
- data/src/core/ext/filters/client_channel/subchannel.cc +133 -337
- data/src/core/ext/filters/client_channel/subchannel.h +23 -86
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +3 -3
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +21 -21
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +36 -38
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +11 -8
- data/src/core/ext/filters/deadline/deadline_filter.cc +73 -64
- data/src/core/ext/filters/deadline/deadline_filter.h +6 -10
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +3 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +3 -7
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
- data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
- data/src/core/ext/filters/http/client/http_client_filter.cc +47 -43
- data/src/core/ext/filters/http/client/http_client_filter.h +20 -20
- data/src/core/ext/filters/http/client_authority_filter.cc +19 -19
- data/src/core/ext/filters/http/client_authority_filter.h +21 -21
- data/src/core/ext/filters/http/http_filters_plugin.cc +30 -57
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +323 -0
- data/src/core/ext/filters/http/message_compress/compression_filter.h +139 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +54 -52
- data/src/core/ext/filters/http/server/http_server_filter.h +21 -21
- data/src/core/ext/filters/message_size/message_size_filter.cc +184 -297
- data/src/core/ext/filters/message_size/message_size_filter.h +72 -20
- data/src/core/ext/filters/rbac/rbac_filter.cc +16 -15
- data/src/core/ext/filters/rbac/rbac_filter.h +3 -3
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +829 -538
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +7 -6
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -11
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +12 -16
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +3 -3
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +220 -0
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +81 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
- data/src/core/ext/gcp/metadata_query.cc +137 -0
- data/src/core/ext/gcp/metadata_query.h +87 -0
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
- data/src/core/ext/transport/chttp2/alpn/alpn.h +24 -24
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +68 -67
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +30 -24
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +149 -149
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +21 -21
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +22 -22
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +33 -33
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +41 -37
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +35 -31
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +673 -455
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +42 -22
- data/src/core/ext/transport/chttp2/transport/context_list_entry.h +70 -0
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +0 -36
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +38 -85
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +130 -107
- data/src/core/ext/transport/chttp2/transport/flow_control.h +66 -39
- data/src/core/ext/transport/chttp2/transport/frame.h +21 -21
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +35 -32
- data/src/core/ext/transport/chttp2/transport/frame_data.h +27 -27
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +38 -36
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +20 -20
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +27 -31
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +21 -24
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +30 -25
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +21 -21
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +39 -37
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +22 -22
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +24 -21
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +21 -21
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +201 -353
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +328 -164
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +4 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +5 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +498 -744
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +30 -26
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +41 -37
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +30 -22
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +39 -37
- data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
- data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +21 -21
- data/src/core/ext/transport/chttp2/transport/internal.h +220 -192
- data/src/core/ext/transport/chttp2/transport/parsing.cc +263 -109
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +19 -19
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +23 -23
- data/src/core/ext/transport/chttp2/transport/stream_map.h +33 -33
- data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
- data/src/core/ext/transport/chttp2/transport/varint.h +37 -34
- data/src/core/ext/transport/chttp2/transport/writing.cc +93 -72
- data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -17
- data/src/core/ext/transport/inproc/inproc_transport.cc +143 -155
- data/src/core/ext/transport/inproc/inproc_transport.h +21 -21
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +87 -52
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +414 -181
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -59
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +485 -219
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +90 -55
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +415 -188
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +377 -194
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1694 -666
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +30 -17
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +144 -47
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +34 -21
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +160 -62
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +27 -14
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +78 -38
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +20 -11
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +48 -26
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +20 -11
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +48 -26
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +109 -62
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +566 -244
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +21 -12
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +45 -30
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +22 -19
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +82 -29
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +23 -16
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +45 -30
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +230 -143
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +733 -404
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +417 -258
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1873 -867
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -41
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +286 -148
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +537 -349
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +2038 -1178
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +21 -12
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +45 -30
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +89 -52
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +347 -232
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +264 -165
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +888 -476
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +154 -72
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +603 -213
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +22 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +50 -36
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +380 -221
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1168 -611
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +166 -94
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +666 -292
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +18 -11
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +37 -26
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +21 -12
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +45 -30
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +30 -17
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +144 -47
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +274 -167
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +789 -440
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +222 -128
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +1116 -485
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +22 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +60 -37
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +350 -208
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1088 -625
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +44 -11
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +175 -18
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +34 -19
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +118 -56
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +48 -16
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +189 -44
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +31 -18
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +143 -65
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +22 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +51 -37
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +78 -43
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +265 -127
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +147 -84
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +454 -226
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +115 -62
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +559 -227
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +18 -11
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +35 -26
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +187 -107
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +969 -410
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +172 -95
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +864 -374
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +49 -23
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +182 -89
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +39 -18
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +74 -56
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +28 -15
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +71 -45
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +131 -74
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +489 -249
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +135 -80
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +505 -245
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +257 -127
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +1010 -387
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +91 -41
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +648 -183
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +1301 -751
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +5583 -2425
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +49 -28
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +164 -84
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +228 -141
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +738 -399
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +20 -10
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +53 -22
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +21 -12
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +45 -30
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +32 -19
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +70 -49
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +27 -14
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +110 -43
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +46 -25
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +259 -100
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +21 -12
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +49 -25
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +18 -11
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +35 -26
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +42 -23
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +108 -70
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +7 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +21 -16
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +43 -24
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +110 -75
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +30 -16
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +100 -46
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +16 -9
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +73 -23
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +60 -37
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +150 -108
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +74 -43
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +357 -167
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +44 -25
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +114 -80
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +42 -18
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +253 -67
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +75 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +201 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +474 -289
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2156 -1037
- data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +107 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +69 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +246 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +138 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +499 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +36 -17
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +144 -55
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +18 -11
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +35 -26
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +7 -4
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +15 -10
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +184 -96
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +907 -360
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +56 -33
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +150 -101
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +188 -109
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +827 -408
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +32 -19
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +109 -53
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +10 -7
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +18 -14
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +300 -175
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +1297 -511
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +42 -23
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +188 -75
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +130 -83
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +510 -238
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +22 -13
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +55 -34
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +39 -26
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +124 -68
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +56 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +130 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +60 -26
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +130 -51
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +37 -20
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +133 -63
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +22 -13
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +91 -40
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +21 -12
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +50 -32
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +18 -11
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +37 -26
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +46 -27
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +101 -70
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +117 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +40 -23
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +161 -75
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +31 -18
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +114 -56
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +46 -29
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +139 -91
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +65 -42
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +200 -121
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +80 -45
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +208 -131
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +34 -21
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +74 -53
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +7 -4
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +13 -8
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +16 -9
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +28 -18
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +28 -15
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +55 -34
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +43 -22
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +91 -53
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +35 -20
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +92 -57
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +7 -4
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +16 -9
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +20 -11
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +48 -26
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +23 -14
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +61 -41
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +14 -11
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +30 -20
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +255 -154
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +934 -450
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +299 -180
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +946 -483
- data/src/core/ext/upb-generated/google/api/http.upb.c +68 -35
- data/src/core/ext/upb-generated/google/api/http.upb.h +284 -120
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +22 -13
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +95 -37
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +19 -10
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +38 -22
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +1018 -424
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +3851 -1412
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +19 -10
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +38 -22
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +10 -7
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +18 -14
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +62 -39
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +207 -102
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +19 -10
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +38 -22
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +90 -51
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +157 -107
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +22 -13
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +95 -37
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +59 -34
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +154 -92
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +43 -24
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +118 -60
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +250 -145
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +919 -415
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +34 -19
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +76 -51
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +25 -14
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +45 -30
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +144 -81
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +405 -217
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +51 -26
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +153 -61
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +173 -102
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +855 -298
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +68 -49
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +155 -104
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +26 -17
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +55 -34
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +12 -9
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +31 -14
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +26 -17
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +55 -34
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +23 -16
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +45 -30
- data/src/core/ext/upb-generated/validate/validate.upb.c +845 -455
- data/src/core/ext/upb-generated/validate/validate.upb.h +4347 -1908
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +68 -49
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +155 -104
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +26 -17
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +55 -34
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +12 -9
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +31 -14
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +65 -44
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +137 -91
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +23 -16
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +45 -30
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +16 -9
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +28 -18
- data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +56 -0
- data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +122 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +37 -22
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +96 -63
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +26 -17
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +52 -29
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +21 -12
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +45 -30
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +23 -14
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +62 -42
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +44 -25
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +169 -79
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +27 -14
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +65 -38
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +86 -30
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +223 -54
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +21 -13
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +89 -34
- data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +53 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +107 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +75 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +270 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +39 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +78 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +78 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +289 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +162 -101
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +501 -293
- data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +160 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +740 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +24 -15
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +53 -37
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +40 -23
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +161 -75
- data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +82 -0
- data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +240 -0
- data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +85 -0
- data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +246 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +21 -13
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +45 -30
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +55 -54
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +35 -14
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +16 -5
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +252 -241
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +233 -225
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +6 -10
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +96 -76
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +11 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +95 -94
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +13 -12
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +11 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +82 -76
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +193 -188
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +32 -16
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +11 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +8 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +11 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +72 -67
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +141 -134
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +21 -5
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +55 -42
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +167 -138
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +16 -5
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -71
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +11 -5
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +772 -739
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +16 -5
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +17 -15
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +7 -9
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +21 -19
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +54 -43
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +41 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +382 -364
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +36 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +138 -136
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +151 -147
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +6 -6
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +17 -14
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +6 -6
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +12 -13
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +36 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +13 -10
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +11 -5
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +15 -15
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +41 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +11 -10
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +329 -273
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +11 -5
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +36 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +36 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +41 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +36 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +41 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +10 -10
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +61 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +41 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +46 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +5 -8
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +6 -5
- data/src/core/ext/xds/certificate_provider_store.cc +8 -13
- data/src/core/ext/xds/certificate_provider_store.h +4 -4
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +32 -46
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +17 -12
- data/src/core/ext/xds/upb_utils.h +4 -4
- data/src/core/ext/xds/xds_api.cc +61 -113
- data/src/core/ext/xds/xds_api.h +13 -15
- data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
- data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
- data/src/core/ext/xds/xds_bootstrap.cc +3 -3
- data/src/core/ext/xds/xds_bootstrap.h +3 -4
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +37 -33
- data/src/core/ext/xds/xds_bootstrap_grpc.h +24 -4
- data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
- data/src/core/ext/xds/xds_certificate_provider.h +4 -4
- data/src/core/ext/xds/xds_channel_args.h +3 -3
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +1 -3
- data/src/core/ext/xds/xds_channel_stack_modifier.h +4 -4
- data/src/core/ext/xds/xds_client.cc +171 -104
- data/src/core/ext/xds/xds_client.h +17 -9
- data/src/core/ext/xds/xds_client_grpc.cc +30 -24
- data/src/core/ext/xds/xds_client_grpc.h +4 -4
- data/src/core/ext/xds/xds_client_stats.cc +46 -32
- data/src/core/ext/xds/xds_client_stats.h +46 -41
- data/src/core/ext/xds/xds_cluster.cc +358 -205
- data/src/core/ext/xds/xds_cluster.h +55 -39
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +61 -74
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +50 -26
- data/src/core/ext/xds/xds_common_types.cc +213 -141
- data/src/core/ext/xds/xds_common_types.h +22 -16
- data/src/core/ext/xds/xds_endpoint.cc +229 -132
- data/src/core/ext/xds/xds_endpoint.h +17 -12
- data/src/core/ext/xds/xds_health_status.cc +80 -0
- data/src/core/ext/xds/xds_health_status.h +109 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +68 -51
- data/src/core/ext/xds/xds_http_fault_filter.h +19 -26
- data/src/core/ext/xds/xds_http_filters.cc +65 -73
- data/src/core/ext/xds/xds_http_filters.h +76 -25
- data/src/core/ext/xds/xds_http_rbac_filter.cc +303 -272
- data/src/core/ext/xds/xds_http_rbac_filter.h +19 -21
- data/src/core/ext/xds/xds_http_stateful_session_filter.cc +222 -0
- data/src/core/ext/xds/xds_http_stateful_session_filter.h +59 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +211 -166
- data/src/core/ext/xds/xds_lb_policy_registry.h +13 -14
- data/src/core/ext/xds/xds_listener.cc +456 -420
- data/src/core/ext/xds/xds_listener.h +49 -51
- data/src/core/ext/xds/xds_resource_type.h +8 -16
- data/src/core/ext/xds/xds_resource_type_impl.h +13 -16
- data/src/core/ext/xds/xds_route_config.cc +566 -534
- data/src/core/ext/xds/xds_route_config.h +43 -32
- data/src/core/ext/xds/xds_routing.cc +4 -3
- data/src/core/ext/xds/xds_routing.h +5 -3
- data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -106
- data/src/core/ext/xds/xds_transport.h +3 -3
- data/src/core/ext/xds/xds_transport_grpc.cc +10 -9
- data/src/core/ext/xds/xds_transport_grpc.h +4 -4
- data/src/core/lib/address_utils/parse_address.cc +30 -29
- data/src/core/lib/address_utils/parse_address.h +35 -35
- data/src/core/lib/address_utils/sockaddr_utils.cc +30 -28
- data/src/core/lib/address_utils/sockaddr_utils.h +36 -36
- data/src/core/lib/avl/avl.h +12 -7
- data/src/core/lib/backoff/backoff.cc +17 -17
- data/src/core/lib/backoff/backoff.h +20 -20
- data/src/core/lib/backoff/random_early_detection.cc +31 -0
- data/src/core/lib/backoff/random_early_detection.h +59 -0
- data/src/core/lib/channel/call_finalization.h +4 -4
- data/src/core/lib/channel/call_tracer.cc +51 -0
- data/src/core/lib/channel/call_tracer.h +106 -34
- data/src/core/lib/channel/channel_args.cc +100 -42
- data/src/core/lib/channel/channel_args.h +104 -49
- data/src/core/lib/channel/channel_args_preconditioning.h +4 -4
- data/src/core/lib/channel/channel_fwd.h +3 -3
- data/src/core/lib/channel/channel_stack.cc +60 -57
- data/src/core/lib/channel/channel_stack.h +148 -135
- data/src/core/lib/channel/channel_stack_builder.cc +21 -24
- data/src/core/lib/channel/channel_stack_builder.h +17 -9
- data/src/core/lib/channel/channel_stack_builder_impl.cc +56 -25
- data/src/core/lib/channel/channel_stack_builder_impl.h +5 -3
- data/src/core/lib/channel/channel_trace.cc +37 -34
- data/src/core/lib/channel/channel_trace.h +22 -22
- data/src/core/lib/channel/channelz.cc +181 -154
- data/src/core/lib/channel/channelz.h +71 -64
- data/src/core/lib/channel/channelz_registry.cc +41 -37
- data/src/core/lib/channel/channelz_registry.h +21 -21
- data/src/core/lib/channel/connected_channel.cc +764 -67
- data/src/core/lib/channel/connected_channel.h +20 -24
- data/src/core/lib/channel/context.h +33 -22
- data/src/core/lib/channel/promise_based_filter.cc +1591 -278
- data/src/core/lib/channel/promise_based_filter.h +486 -104
- data/src/core/lib/channel/server_call_tracer_filter.cc +110 -0
- data/src/core/lib/channel/status_util.cc +35 -17
- data/src/core/lib/channel/status_util.h +29 -22
- data/src/core/lib/compression/compression.cc +19 -19
- data/src/core/lib/compression/compression_internal.cc +38 -48
- data/src/core/lib/compression/compression_internal.h +25 -25
- data/src/core/lib/compression/message_compress.cc +26 -26
- data/src/core/lib/compression/message_compress.h +27 -27
- data/src/core/lib/config/config_vars.cc +153 -0
- data/src/core/lib/config/config_vars.h +127 -0
- data/src/core/lib/config/config_vars_non_generated.cc +51 -0
- data/src/core/lib/config/core_configuration.h +3 -3
- data/src/core/lib/config/load_config.cc +79 -0
- data/src/core/lib/config/load_config.h +55 -0
- 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 +39 -136
- data/src/core/lib/debug/stats.h +49 -55
- data/src/core/lib/debug/stats_data.cc +240 -88
- data/src/core/lib/debug/stats_data.h +295 -145
- data/src/core/lib/debug/trace.cc +56 -79
- data/src/core/lib/debug/trace.h +37 -54
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
- data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +5 -0
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -3
- data/src/core/lib/event_engine/common_closures.h +71 -0
- data/src/core/lib/event_engine/default_event_engine.cc +56 -16
- data/src/core/lib/event_engine/default_event_engine.h +44 -8
- data/src/core/lib/event_engine/default_event_engine_factory.cc +16 -6
- data/src/core/lib/event_engine/default_event_engine_factory.h +3 -3
- data/src/core/lib/event_engine/event_engine.cc +60 -0
- data/src/core/lib/event_engine/forkable.cc +11 -6
- data/src/core/lib/event_engine/forkable.h +3 -3
- data/src/core/lib/event_engine/handle_containers.h +12 -20
- data/src/core/lib/event_engine/memory_allocator.cc +1 -1
- data/src/core/lib/event_engine/memory_allocator_factory.h +47 -0
- data/src/core/lib/event_engine/poller.h +13 -7
- data/src/core/lib/event_engine/posix.h +162 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +642 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +139 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +895 -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 +68 -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 +254 -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 +1338 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +726 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +523 -28
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +165 -27
- data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +292 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +278 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +379 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +867 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
- data/src/core/lib/event_engine/posix_engine/timer.cc +49 -49
- data/src/core/lib/event_engine/posix_engine/timer.h +90 -89
- data/src/core/lib/event_engine/posix_engine/timer_heap.cc +27 -27
- data/src/core/lib/event_engine/posix_engine/timer_heap.h +24 -24
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +76 -214
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +44 -72
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -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 +150 -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 +21 -1
- data/src/core/lib/event_engine/{executor/executor.h → resolved_address_internal.h} +11 -15
- data/src/core/lib/event_engine/shim.cc +64 -0
- data/src/core/lib/event_engine/{executor/threaded_executor.cc → shim.h} +10 -13
- data/src/core/lib/event_engine/slice.cc +8 -7
- data/src/core/lib/event_engine/slice_buffer.cc +2 -2
- data/src/core/lib/event_engine/tcp_socket_utils.cc +389 -0
- data/src/core/lib/event_engine/tcp_socket_utils.h +90 -0
- data/src/core/lib/event_engine/thread_local.cc +29 -0
- data/src/core/lib/event_engine/thread_local.h +32 -0
- data/src/core/lib/event_engine/thread_pool/original_thread_pool.cc +256 -0
- data/src/core/lib/event_engine/thread_pool/original_thread_pool.h +137 -0
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
- data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +40 -0
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
- data/src/core/lib/event_engine/time_util.h +3 -3
- data/src/core/lib/event_engine/trace.cc +7 -0
- data/src/core/lib/event_engine/trace.h +22 -3
- data/src/core/lib/event_engine/utils.cc +2 -2
- data/src/core/lib/event_engine/utils.h +12 -4
- data/src/core/lib/event_engine/windows/iocp.cc +39 -53
- data/src/core/lib/event_engine/windows/iocp.h +7 -7
- data/src/core/lib/event_engine/windows/win_socket.cc +69 -47
- data/src/core/lib/event_engine/windows/win_socket.h +38 -29
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +379 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.h +120 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +285 -33
- data/src/core/lib/event_engine/windows/windows_engine.h +70 -26
- data/src/core/lib/event_engine/windows/windows_listener.cc +370 -0
- data/src/core/lib/event_engine/windows/windows_listener.h +156 -0
- data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
- data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
- data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
- data/src/core/lib/experiments/config.cc +56 -17
- data/src/core/lib/experiments/config.h +29 -3
- data/src/core/lib/experiments/experiments.cc +92 -29
- data/src/core/lib/experiments/experiments.h +101 -23
- data/src/core/lib/gpr/alloc.cc +19 -17
- data/src/core/lib/gpr/alloc.h +20 -20
- data/src/core/lib/gpr/{log_android.cc → android/log.cc} +22 -20
- data/src/core/lib/gpr/atm.cc +17 -17
- data/src/core/lib/gpr/iphone/cpu.cc +44 -0
- data/src/core/lib/gpr/{cpu_linux.cc → linux/cpu.cc} +28 -23
- data/src/core/lib/gpr/{log_linux.cc → linux/log.cc} +24 -24
- data/src/core/lib/gpr/log.cc +42 -47
- data/src/core/lib/gpr/log_internal.h +55 -0
- data/src/core/lib/gpr/{tmpfile_msys.cc → msys/tmpfile.cc} +21 -20
- data/src/core/lib/gpr/{cpu_posix.cc → posix/cpu.cc} +23 -22
- data/src/core/lib/gpr/{log_posix.cc → posix/log.cc} +20 -19
- data/src/core/lib/gpr/{string_posix.cc → posix/string.cc} +24 -24
- data/src/core/lib/gpr/{sync_posix.cc → posix/sync.cc} +23 -21
- data/src/core/lib/gpr/{time_posix.cc → posix/time.cc} +40 -30
- data/src/core/lib/gpr/{tmpfile_posix.cc → posix/tmpfile.cc} +22 -20
- data/src/core/lib/gpr/spinlock.h +20 -20
- data/src/core/lib/gpr/string.cc +25 -24
- data/src/core/lib/gpr/string.h +61 -61
- data/src/core/lib/gpr/sync.cc +25 -25
- data/src/core/lib/gpr/sync_abseil.cc +37 -27
- data/src/core/lib/gpr/time.cc +23 -21
- data/src/core/lib/gpr/time_precise.cc +22 -22
- data/src/core/lib/gpr/time_precise.h +20 -21
- data/src/core/lib/gpr/tmpfile.h +24 -24
- data/src/core/lib/gpr/useful.h +43 -30
- data/src/core/{ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc → lib/gpr/windows/cpu.cc} +16 -11
- data/src/core/lib/gpr/{log_windows.cc → windows/log.cc} +25 -24
- data/src/core/lib/gpr/windows/string.cc +69 -0
- data/src/core/lib/gpr/{string_util_windows.cc → windows/string_util.cc} +22 -22
- data/src/core/lib/gpr/{sync_windows.cc → windows/sync.cc} +29 -27
- data/src/core/lib/gpr/{time_windows.cc → windows/time.cc} +25 -22
- data/src/core/lib/gpr/{tmpfile_windows.cc → windows/tmpfile.cc} +23 -22
- data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
- data/src/core/lib/gprpp/atomic_utils.h +20 -20
- data/src/core/lib/gprpp/bitset.h +27 -3
- data/src/core/lib/gprpp/chunked_vector.h +3 -3
- data/src/core/lib/gprpp/construct_destruct.h +3 -3
- data/src/core/lib/gprpp/cpp_impl_of.h +3 -3
- data/src/core/lib/gprpp/crash.cc +43 -0
- data/src/core/lib/gprpp/crash.h +37 -0
- data/src/core/lib/gprpp/debug_location.h +20 -23
- data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
- data/src/core/lib/gprpp/env.h +23 -23
- data/src/core/lib/gprpp/examine_stack.cc +17 -17
- data/src/core/lib/gprpp/examine_stack.h +21 -21
- data/src/core/lib/gprpp/fork.cc +49 -39
- data/src/core/lib/gprpp/fork.h +29 -27
- data/src/core/lib/gprpp/host_port.cc +28 -26
- data/src/core/lib/gprpp/host_port.h +32 -31
- data/src/core/lib/gprpp/{env_linux.cc → linux/env.cc} +21 -21
- 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 +22 -21
- data/src/core/lib/gprpp/match.h +3 -3
- data/src/core/lib/gprpp/memory.h +21 -21
- data/src/core/lib/gprpp/mpscq.cc +17 -17
- data/src/core/lib/gprpp/mpscq.h +21 -21
- data/src/core/lib/gprpp/no_destruct.h +4 -3
- data/src/core/lib/gprpp/notification.h +3 -3
- data/src/core/lib/gprpp/orphanable.h +25 -24
- data/src/core/lib/gprpp/overload.h +3 -3
- data/src/core/lib/gprpp/packed_table.h +3 -3
- data/src/core/lib/gprpp/per_cpu.cc +33 -0
- data/src/core/lib/gprpp/per_cpu.h +75 -0
- data/src/core/lib/gprpp/posix/env.cc +47 -0
- data/src/core/lib/gprpp/{stat_posix.cc → posix/stat.cc} +5 -4
- data/src/core/lib/gprpp/{thd_posix.cc → posix/thd.cc} +75 -64
- data/src/core/lib/gprpp/ref_counted.h +54 -55
- data/src/core/lib/gprpp/ref_counted_ptr.h +22 -21
- data/src/core/lib/gprpp/single_set_ptr.h +3 -3
- data/src/core/lib/gprpp/sorted_pack.h +3 -3
- data/src/core/lib/gprpp/stat.h +3 -3
- data/src/core/lib/gprpp/status_helper.cc +6 -5
- data/src/core/lib/gprpp/status_helper.h +4 -6
- data/src/core/lib/gprpp/strerror.cc +43 -0
- data/src/core/lib/gprpp/strerror.h +29 -0
- data/src/core/lib/gprpp/sync.h +23 -23
- data/src/core/lib/gprpp/table.h +4 -3
- data/src/core/lib/gprpp/tchar.h +3 -3
- data/src/core/lib/gprpp/thd.h +39 -23
- data/src/core/lib/gprpp/time.cc +18 -10
- data/src/core/lib/gprpp/time.h +16 -6
- data/src/core/lib/gprpp/time_averaged_stats.cc +20 -20
- data/src/core/lib/gprpp/time_averaged_stats.h +50 -50
- data/src/core/lib/gprpp/time_util.h +4 -4
- data/src/core/lib/gprpp/unique_type_name.h +21 -21
- data/src/core/lib/gprpp/validation_errors.cc +8 -3
- data/src/core/lib/gprpp/validation_errors.h +37 -13
- data/src/core/lib/gprpp/{env_windows.cc → windows/env.cc} +18 -18
- data/src/core/lib/gprpp/{stat_windows.cc → windows/stat.cc} +4 -2
- data/src/core/lib/gprpp/{thd_windows.cc → windows/thd.cc} +28 -28
- data/src/core/lib/gprpp/work_serializer.h +3 -3
- data/src/core/lib/handshaker/proxy_mapper.h +21 -21
- data/src/core/lib/handshaker/proxy_mapper_registry.cc +17 -17
- data/src/core/lib/handshaker/proxy_mapper_registry.h +21 -21
- data/src/core/lib/http/format_request.cc +19 -18
- data/src/core/lib/http/format_request.h +20 -20
- data/src/core/lib/http/httpcli.cc +58 -61
- data/src/core/lib/http/httpcli.h +29 -29
- data/src/core/lib/http/httpcli_security_connector.cc +22 -25
- data/src/core/lib/http/httpcli_ssl_credentials.h +3 -3
- data/src/core/lib/http/parser.cc +76 -87
- data/src/core/lib/http/parser.h +35 -35
- data/src/core/lib/iomgr/block_annotate.h +23 -23
- data/src/core/lib/iomgr/buffer_list.cc +156 -136
- data/src/core/lib/iomgr/buffer_list.h +122 -101
- data/src/core/lib/iomgr/call_combiner.cc +32 -30
- data/src/core/lib/iomgr/call_combiner.h +26 -27
- data/src/core/lib/iomgr/cfstream_handle.cc +34 -37
- data/src/core/lib/iomgr/cfstream_handle.h +25 -25
- data/src/core/lib/iomgr/closure.cc +27 -0
- data/src/core/lib/iomgr/closure.h +95 -48
- data/src/core/lib/iomgr/combiner.cc +20 -19
- data/src/core/lib/iomgr/combiner.h +20 -20
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
- data/src/core/lib/iomgr/dynamic_annotations.h +22 -22
- data/src/core/lib/iomgr/endpoint.cc +17 -17
- data/src/core/lib/iomgr/endpoint.h +49 -49
- data/src/core/lib/iomgr/endpoint_cfstream.cc +58 -53
- data/src/core/lib/iomgr/endpoint_cfstream.h +32 -32
- data/src/core/lib/iomgr/endpoint_pair.h +22 -22
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +22 -21
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +29 -20
- data/src/core/lib/iomgr/error.cc +49 -61
- data/src/core/lib/iomgr/error.h +45 -176
- data/src/core/lib/iomgr/error_cfstream.cc +18 -18
- data/src/core/lib/iomgr/error_cfstream.h +21 -21
- data/src/core/lib/iomgr/ev_apple.cc +33 -33
- data/src/core/lib/iomgr/ev_apple.h +21 -21
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +218 -198
- data/src/core/lib/iomgr/ev_epoll1_linux.h +20 -20
- data/src/core/lib/iomgr/ev_poll_posix.cc +212 -205
- data/src/core/lib/iomgr/ev_poll_posix.h +20 -20
- data/src/core/lib/iomgr/ev_posix.cc +47 -79
- data/src/core/lib/iomgr/ev_posix.h +88 -87
- data/src/core/lib/iomgr/ev_windows.cc +18 -18
- data/src/core/lib/iomgr/event_engine_shims/closure.cc +62 -0
- data/src/core/lib/{event_engine/executor/threaded_executor.h → iomgr/event_engine_shims/closure.h} +11 -16
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +471 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
- data/src/core/lib/iomgr/exec_ctx.cc +34 -34
- data/src/core/lib/iomgr/exec_ctx.h +144 -144
- data/src/core/lib/iomgr/executor.cc +21 -21
- data/src/core/lib/iomgr/executor.h +27 -27
- data/src/core/lib/iomgr/fork_posix.cc +29 -26
- data/src/core/lib/iomgr/fork_windows.cc +21 -21
- data/src/core/lib/iomgr/gethostname.h +20 -20
- data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
- data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
- data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
- data/src/core/lib/iomgr/grpc_if_nametoindex.h +22 -22
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
- data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
- data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
- data/src/core/lib/iomgr/internal_errqueue.h +83 -83
- data/src/core/lib/iomgr/iocp_windows.cc +46 -24
- data/src/core/lib/iomgr/iocp_windows.h +32 -21
- data/src/core/lib/iomgr/iomgr.cc +23 -26
- data/src/core/lib/iomgr/iomgr.h +35 -35
- data/src/core/lib/iomgr/iomgr_fwd.h +3 -3
- data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
- data/src/core/lib/iomgr/iomgr_internal.h +28 -28
- data/src/core/lib/iomgr/iomgr_posix.cc +20 -20
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +21 -20
- data/src/core/lib/iomgr/iomgr_windows.cc +32 -24
- data/src/core/lib/iomgr/load_file.cc +24 -27
- data/src/core/lib/iomgr/load_file.h +22 -22
- data/src/core/lib/iomgr/lockfree_event.cc +114 -114
- data/src/core/lib/iomgr/lockfree_event.h +23 -23
- data/src/core/lib/iomgr/nameser.h +86 -86
- data/src/core/lib/iomgr/polling_entity.cc +25 -21
- data/src/core/lib/iomgr/polling_entity.h +29 -29
- data/src/core/lib/iomgr/pollset.cc +17 -17
- data/src/core/lib/iomgr/pollset.h +54 -54
- data/src/core/lib/iomgr/pollset_set.cc +17 -17
- data/src/core/lib/iomgr/pollset_set.h +25 -25
- data/src/core/lib/iomgr/pollset_set_windows.cc +27 -27
- data/src/core/lib/iomgr/pollset_set_windows.h +20 -20
- data/src/core/lib/iomgr/pollset_windows.cc +33 -32
- data/src/core/lib/iomgr/pollset_windows.h +24 -24
- data/src/core/lib/iomgr/port.h +31 -31
- data/src/core/lib/iomgr/python_util.h +24 -24
- data/src/core/lib/iomgr/resolve_address.cc +26 -20
- data/src/core/lib/iomgr/resolve_address.h +24 -25
- data/src/core/lib/iomgr/resolve_address_impl.h +4 -4
- data/src/core/lib/iomgr/resolve_address_posix.cc +35 -45
- data/src/core/lib/iomgr/resolve_address_posix.h +4 -5
- data/src/core/lib/iomgr/resolve_address_windows.cc +18 -20
- data/src/core/lib/iomgr/resolve_address_windows.h +4 -5
- data/src/core/lib/iomgr/resolved_address.h +3 -3
- data/src/core/lib/iomgr/sockaddr.h +23 -23
- data/src/core/lib/iomgr/sockaddr_posix.h +21 -21
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +18 -17
- data/src/core/lib/iomgr/sockaddr_windows.h +21 -21
- data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
- data/src/core/lib/iomgr/socket_factory_posix.h +32 -32
- data/src/core/lib/iomgr/socket_mutator.cc +19 -18
- data/src/core/lib/iomgr/socket_mutator.h +39 -39
- data/src/core/lib/iomgr/socket_utils.h +27 -27
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +87 -70
- data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
- data/src/core/lib/iomgr/socket_utils_posix.cc +25 -20
- data/src/core/lib/iomgr/socket_utils_posix.h +84 -81
- data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
- data/src/core/lib/iomgr/socket_windows.cc +97 -42
- data/src/core/lib/iomgr/socket_windows.h +68 -61
- data/src/core/lib/iomgr/systemd_utils.cc +116 -0
- data/src/core/lib/iomgr/systemd_utils.h +33 -0
- data/src/core/lib/iomgr/tcp_client.cc +17 -17
- data/src/core/lib/iomgr/tcp_client.h +28 -28
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +39 -31
- data/src/core/lib/iomgr/tcp_client_posix.cc +86 -73
- data/src/core/lib/iomgr/tcp_client_posix.h +45 -45
- data/src/core/lib/iomgr/tcp_client_windows.cc +51 -42
- data/src/core/lib/iomgr/tcp_posix.cc +270 -301
- data/src/core/lib/iomgr/tcp_posix.h +29 -29
- data/src/core/lib/iomgr/tcp_server.cc +30 -22
- data/src/core/lib/iomgr/tcp_server.h +71 -65
- data/src/core/lib/iomgr/tcp_server_posix.cc +373 -98
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +67 -54
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +90 -55
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +40 -40
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
- data/src/core/lib/iomgr/tcp_server_windows.cc +277 -119
- data/src/core/lib/iomgr/tcp_windows.cc +121 -101
- data/src/core/lib/iomgr/tcp_windows.h +34 -34
- data/src/core/lib/iomgr/timer.cc +17 -17
- data/src/core/lib/iomgr/timer.h +68 -68
- data/src/core/lib/iomgr/timer_generic.cc +132 -138
- data/src/core/lib/iomgr/timer_generic.h +21 -21
- data/src/core/lib/iomgr/timer_heap.cc +25 -25
- data/src/core/lib/iomgr/timer_heap.h +22 -22
- data/src/core/lib/iomgr/timer_manager.cc +30 -29
- data/src/core/lib/iomgr/timer_manager.h +27 -27
- data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
- data/src/core/lib/iomgr/unix_sockets_posix.h +21 -21
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -21
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +20 -20
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +18 -18
- data/src/core/lib/iomgr/wakeup_fd_posix.h +52 -52
- data/src/core/lib/json/json.h +5 -221
- data/src/core/lib/json/json_args.h +3 -3
- data/src/core/lib/json/json_channel_args.h +42 -0
- data/src/core/lib/json/json_object_loader.cc +39 -25
- data/src/core/lib/json/json_object_loader.h +69 -21
- data/src/core/lib/json/json_reader.cc +98 -70
- data/src/core/lib/json/json_reader.h +34 -0
- data/src/core/lib/json/json_util.cc +14 -19
- data/src/core/lib/json/json_util.h +12 -11
- data/src/core/lib/json/json_writer.cc +80 -81
- data/src/core/{ext/xds/xds_resource_type.cc → lib/json/json_writer.h} +11 -11
- data/src/core/lib/load_balancing/lb_policy.cc +36 -31
- data/src/core/lib/load_balancing/lb_policy.h +32 -10
- data/src/core/lib/load_balancing/lb_policy_factory.h +3 -3
- data/src/core/lib/load_balancing/lb_policy_registry.cc +10 -8
- data/src/core/lib/load_balancing/lb_policy_registry.h +3 -3
- data/src/core/lib/load_balancing/subchannel_interface.h +9 -14
- data/src/core/lib/matchers/matchers.cc +10 -9
- data/src/core/lib/matchers/matchers.h +5 -4
- data/src/core/lib/promise/activity.cc +43 -6
- data/src/core/lib/promise/activity.h +143 -79
- data/src/core/lib/promise/arena_promise.h +84 -54
- data/src/core/lib/promise/cancel_callback.h +77 -0
- data/src/core/lib/promise/context.h +17 -9
- data/src/core/lib/promise/detail/basic_join.h +197 -0
- data/src/core/lib/promise/detail/basic_seq.h +20 -45
- data/src/core/lib/promise/detail/promise_factory.h +67 -14
- data/src/core/lib/promise/detail/promise_like.h +3 -3
- data/src/core/lib/promise/detail/status.h +31 -3
- data/src/core/lib/promise/detail/switch.h +1455 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +23 -15
- data/src/core/lib/promise/for_each.h +176 -0
- data/src/core/lib/promise/if.h +204 -0
- data/src/core/lib/promise/interceptor_list.h +329 -0
- data/src/core/lib/promise/latch.h +197 -23
- data/src/core/lib/promise/loop.h +22 -16
- data/src/core/lib/promise/map.h +12 -6
- data/src/core/lib/promise/party.cc +304 -0
- data/src/core/lib/promise/party.h +508 -0
- data/src/core/lib/promise/pipe.h +762 -0
- data/src/core/lib/promise/poll.h +177 -11
- data/src/core/lib/promise/prioritized_race.h +95 -0
- data/src/core/lib/promise/promise.h +6 -7
- data/src/core/lib/promise/race.h +6 -9
- data/src/core/lib/promise/seq.h +7 -8
- data/src/core/lib/promise/sleep.cc +7 -5
- data/src/core/lib/promise/sleep.h +4 -5
- data/src/core/lib/promise/trace.cc +20 -0
- data/src/core/lib/promise/trace.h +24 -0
- data/src/core/lib/promise/try_join.h +82 -0
- data/src/core/lib/promise/try_seq.h +14 -16
- data/src/core/lib/resolver/resolver.cc +17 -17
- data/src/core/lib/resolver/resolver.h +3 -3
- data/src/core/lib/resolver/resolver_factory.h +4 -4
- data/src/core/lib/resolver/resolver_registry.cc +15 -0
- data/src/core/lib/resolver/resolver_registry.h +3 -3
- data/src/core/lib/resolver/server_address.cc +19 -25
- data/src/core/lib/resolver/server_address.h +22 -30
- data/src/core/lib/resource_quota/api.cc +0 -1
- data/src/core/lib/resource_quota/api.h +4 -4
- data/src/core/lib/resource_quota/arena.cc +82 -20
- data/src/core/lib/resource_quota/arena.h +287 -22
- data/src/core/lib/resource_quota/memory_quota.cc +141 -44
- data/src/core/lib/resource_quota/memory_quota.h +87 -26
- data/src/core/lib/resource_quota/periodic_update.h +3 -3
- data/src/core/lib/resource_quota/resource_quota.h +4 -4
- data/src/core/lib/resource_quota/thread_quota.h +3 -3
- data/src/core/lib/resource_quota/trace.h +3 -3
- data/src/core/lib/security/authorization/audit_logging.cc +98 -0
- data/src/core/lib/security/authorization/audit_logging.h +73 -0
- data/src/core/lib/security/authorization/authorization_engine.h +3 -3
- data/src/core/lib/security/authorization/authorization_policy_provider.h +4 -4
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +0 -1
- data/src/core/lib/security/authorization/evaluate_args.h +3 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -4
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +21 -4
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +3 -3
- data/src/core/lib/security/authorization/matchers.cc +25 -22
- data/src/core/lib/security/authorization/matchers.h +3 -3
- data/src/core/lib/security/authorization/rbac_policy.cc +39 -7
- data/src/core/lib/security/authorization/rbac_policy.h +22 -5
- data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
- data/src/core/lib/security/authorization/stdout_logger.h +61 -0
- data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +11 -7
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +17 -11
- data/src/core/lib/security/context/security_context.cc +22 -23
- data/src/core/lib/security/context/security_context.h +43 -33
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +17 -17
- data/src/core/lib/security/credentials/alts/alts_credentials.h +53 -53
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
- data/src/core/lib/security/credentials/alts/check_gcp_environment.h +43 -43
- data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
- data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +19 -19
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +38 -39
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +18 -18
- data/src/core/lib/security/credentials/call_creds_util.h +3 -3
- data/src/core/lib/security/credentials/channel_creds_registry.h +3 -3
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +22 -22
- data/src/core/lib/security/credentials/composite/composite_credentials.h +23 -24
- data/src/core/lib/security/credentials/credentials.cc +19 -18
- data/src/core/lib/security/credentials/credentials.h +37 -36
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +113 -108
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -3
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +5 -3
- data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +105 -115
- data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -3
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +39 -41
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +3 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +51 -52
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +3 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +20 -19
- data/src/core/lib/security/credentials/fake/fake_credentials.h +37 -38
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +17 -17
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +72 -126
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +21 -22
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +19 -17
- data/src/core/lib/security/credentials/iam/iam_credentials.h +20 -20
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -3
- data/src/core/lib/security/credentials/jwt/json_token.cc +43 -41
- data/src/core/lib/security/credentials/jwt/json_token.h +35 -35
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +27 -22
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +22 -22
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +115 -113
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +46 -46
- data/src/core/lib/security/credentials/local/local_credentials.cc +17 -17
- data/src/core/lib/security/credentials/local/local_credentials.h +23 -23
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +80 -80
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -23
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +24 -23
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +25 -25
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +19 -20
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +20 -20
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +20 -28
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +7 -14
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +44 -44
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +3 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +18 -18
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +3 -3
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -19
- data/src/core/lib/security/credentials/tls/tls_credentials.h +21 -21
- data/src/core/lib/security/credentials/tls/tls_utils.h +3 -3
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -2
- data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +33 -43
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +43 -44
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +33 -41
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +22 -23
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +5 -10
- data/src/core/lib/security/security_connector/load_system_roots.h +20 -20
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +18 -18
- data/src/core/lib/security/security_connector/load_system_roots_supported.cc +24 -31
- data/src/core/lib/security/security_connector/load_system_roots_supported.h +22 -23
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +30 -34
- data/src/core/lib/security/security_connector/local/local_security_connector.h +42 -43
- data/src/core/lib/security/security_connector/security_connector.cc +17 -17
- data/src/core/lib/security/security_connector/security_connector.h +35 -36
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +35 -39
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +40 -41
- data/src/core/lib/security/security_connector/ssl_utils.cc +48 -64
- data/src/core/lib/security/security_connector/ssl_utils.h +35 -35
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +54 -48
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +21 -21
- data/src/core/lib/security/transport/auth_filters.h +45 -23
- data/src/core/lib/security/transport/client_auth_filter.cc +21 -21
- data/src/core/lib/security/transport/secure_endpoint.cc +58 -58
- data/src/core/lib/security/transport/secure_endpoint.h +25 -25
- data/src/core/lib/security/transport/security_handshaker.cc +79 -70
- data/src/core/lib/security/transport/security_handshaker.h +22 -22
- data/src/core/lib/security/transport/server_auth_filter.cc +160 -274
- data/src/core/lib/security/transport/tsi_error.cc +23 -20
- data/src/core/lib/security/transport/tsi_error.h +20 -20
- data/src/core/lib/security/util/json_util.cc +27 -27
- data/src/core/lib/security/util/json_util.h +20 -20
- data/src/core/lib/service_config/service_config.h +4 -4
- data/src/core/lib/service_config/service_config_call_data.h +54 -19
- data/src/core/lib/service_config/service_config_impl.cc +118 -158
- data/src/core/lib/service_config/service_config_impl.h +16 -19
- data/src/core/lib/service_config/service_config_parser.cc +14 -31
- data/src/core/lib/service_config/service_config_parser.h +16 -12
- data/src/core/lib/slice/b64.cc +26 -26
- data/src/core/lib/slice/b64.h +32 -32
- data/src/core/lib/slice/percent_encoding.cc +17 -17
- data/src/core/lib/slice/percent_encoding.h +28 -28
- data/src/core/lib/slice/slice.cc +48 -42
- data/src/core/lib/slice/slice.h +59 -18
- data/src/core/lib/slice/slice_buffer.cc +63 -59
- data/src/core/lib/slice/slice_buffer.h +35 -4
- data/src/core/lib/slice/slice_internal.h +34 -42
- data/src/core/lib/slice/slice_refcount.cc +3 -18
- data/src/core/lib/slice/slice_refcount.h +53 -18
- data/src/core/lib/slice/slice_string_helpers.cc +17 -17
- data/src/core/lib/slice/slice_string_helpers.h +21 -21
- data/src/core/lib/surface/api_trace.cc +17 -17
- data/src/core/lib/surface/api_trace.h +25 -25
- data/src/core/lib/surface/builtins.cc +2 -0
- data/src/core/lib/surface/builtins.h +3 -3
- data/src/core/lib/surface/byte_buffer.cc +22 -23
- data/src/core/lib/surface/byte_buffer_reader.cc +23 -23
- data/src/core/lib/surface/call.cc +2297 -535
- data/src/core/lib/surface/call.h +123 -42
- data/src/core/lib/surface/call_details.cc +20 -21
- data/src/core/lib/surface/call_log_batch.cc +19 -18
- data/src/core/lib/surface/call_test_only.h +33 -33
- data/src/core/lib/surface/call_trace.cc +123 -0
- data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/surface/call_trace.h} +10 -12
- data/src/core/lib/surface/channel.cc +62 -67
- data/src/core/lib/surface/channel.h +43 -35
- data/src/core/lib/surface/channel_init.cc +17 -17
- data/src/core/lib/surface/channel_init.h +20 -20
- data/src/core/lib/surface/channel_ping.cc +19 -19
- data/src/core/lib/surface/channel_stack_type.cc +21 -17
- data/src/core/lib/surface/channel_stack_type.h +22 -20
- data/src/core/lib/surface/completion_queue.cc +182 -194
- data/src/core/lib/surface/completion_queue.h +36 -36
- data/src/core/lib/surface/completion_queue_factory.cc +28 -28
- data/src/core/lib/surface/completion_queue_factory.h +22 -22
- data/src/core/lib/surface/event_string.cc +18 -17
- data/src/core/lib/surface/event_string.h +22 -22
- data/src/core/lib/surface/init.cc +30 -59
- data/src/core/lib/surface/init.h +20 -20
- data/src/core/lib/surface/init_internally.cc +1 -0
- data/src/core/lib/surface/init_internally.h +12 -3
- data/src/core/lib/surface/lame_client.cc +31 -26
- data/src/core/lib/surface/lame_client.h +21 -21
- data/src/core/lib/surface/metadata_array.cc +17 -18
- data/src/core/lib/surface/server.cc +363 -111
- data/src/core/lib/surface/server.h +10 -9
- data/src/core/lib/surface/validate_metadata.cc +60 -60
- data/src/core/lib/surface/validate_metadata.h +30 -21
- data/src/core/lib/surface/version.cc +21 -21
- data/src/core/lib/transport/batch_builder.cc +182 -0
- data/src/core/lib/transport/batch_builder.h +480 -0
- data/src/core/lib/transport/bdp_estimator.cc +24 -24
- data/src/core/lib/transport/bdp_estimator.h +31 -28
- data/src/core/lib/transport/connectivity_state.cc +19 -19
- data/src/core/lib/transport/connectivity_state.h +22 -22
- data/src/core/lib/transport/custom_metadata.h +30 -0
- data/src/core/lib/transport/error_utils.cc +51 -45
- data/src/core/lib/transport/error_utils.h +24 -24
- data/src/core/lib/transport/handshaker.cc +60 -46
- data/src/core/lib/transport/handshaker.h +47 -42
- data/src/core/lib/transport/handshaker_factory.h +47 -21
- data/src/core/lib/transport/handshaker_registry.cc +25 -19
- data/src/core/lib/transport/handshaker_registry.h +23 -24
- data/src/core/lib/transport/http2_errors.h +22 -22
- data/src/core/lib/transport/http_connect_handshaker.cc +40 -41
- data/src/core/lib/transport/http_connect_handshaker.h +21 -21
- data/src/core/lib/transport/metadata_batch.cc +24 -7
- data/src/core/lib/transport/metadata_batch.h +193 -53
- data/src/core/lib/transport/metadata_compression_traits.h +67 -0
- data/src/core/lib/transport/parsed_metadata.cc +2 -6
- data/src/core/lib/transport/parsed_metadata.h +23 -12
- data/src/core/lib/transport/pid_controller.cc +20 -20
- data/src/core/lib/transport/pid_controller.h +27 -27
- data/src/core/lib/transport/simple_slice_based_metadata.h +48 -0
- data/src/core/lib/transport/status_conversion.cc +22 -22
- data/src/core/lib/transport/status_conversion.h +22 -22
- data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -21
- data/src/core/lib/transport/tcp_connect_handshaker.h +3 -3
- data/src/core/lib/transport/timeout_encoding.cc +28 -23
- data/src/core/lib/transport/timeout_encoding.h +20 -20
- data/src/core/lib/transport/transport.cc +113 -43
- data/src/core/lib/transport/transport.h +275 -210
- data/src/core/lib/transport/transport_fwd.h +3 -3
- data/src/core/lib/transport/transport_impl.h +53 -46
- data/src/core/lib/transport/transport_op_string.cc +75 -63
- data/src/core/lib/uri/uri_parser.cc +1 -1
- data/src/core/lib/uri/uri_parser.h +3 -3
- data/src/core/plugin_registry/grpc_plugin_registry.cc +34 -35
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +9 -14
- data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
- data/src/core/tsi/alts/crypt/gsec.cc +26 -26
- data/src/core/tsi/alts/crypt/gsec.h +336 -336
- data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
- data/src/core/tsi/alts/frame_protector/alts_counter.h +68 -68
- data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
- data/src/core/tsi/alts/frame_protector/alts_crypter.h +209 -209
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +73 -71
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +40 -40
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +82 -83
- data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
- data/src/core/tsi/alts/frame_protector/frame_handler.h +169 -169
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +98 -80
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +107 -102
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +38 -37
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +60 -60
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +23 -23
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +38 -38
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +105 -104
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +40 -41
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +35 -36
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +67 -68
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +55 -56
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +141 -142
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +58 -57
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +43 -44
- data/src/core/tsi/fake_transport_security.cc +80 -79
- data/src/core/tsi/fake_transport_security.h +33 -33
- data/src/core/tsi/local_transport_security.cc +34 -33
- data/src/core/tsi/local_transport_security.h +33 -33
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -4
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
- data/src/core/tsi/ssl/session_cache/ssl_session.h +21 -21
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +19 -19
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +22 -22
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +25 -20
- data/src/core/tsi/ssl_transport_security.cc +256 -349
- data/src/core/tsi/ssl_transport_security.h +206 -203
- data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
- data/src/core/tsi/ssl_transport_security_utils.h +147 -0
- data/src/core/tsi/ssl_types.h +27 -27
- data/src/core/tsi/transport_security.cc +26 -26
- data/src/core/tsi/transport_security.h +47 -47
- data/src/core/tsi/transport_security_grpc.cc +20 -20
- data/src/core/tsi/transport_security_grpc.h +41 -41
- data/src/core/tsi/transport_security_interface.h +333 -333
- data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +0 -1
- data/src/ruby/ext/grpc/ext-export.gcc +1 -2
- data/src/ruby/ext/grpc/extconf.rb +55 -11
- data/src/ruby/ext/grpc/rb_call.c +1 -0
- data/src/ruby/ext/grpc/rb_channel.c +1 -0
- data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
- data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +1 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +59 -59
- data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +0 -6
- data/src/ruby/spec/channel_spec.rb +0 -43
- data/src/ruby/spec/client_server_spec.rb +20 -8
- data/src/ruby/spec/generic/active_call_spec.rb +12 -3
- data/third_party/abseil-cpp/absl/algorithm/container.h +56 -57
- data/third_party/abseil-cpp/absl/base/attributes.h +39 -19
- data/third_party/abseil-cpp/absl/base/config.h +45 -4
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +3 -18
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +2 -1
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +10 -6
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +23 -24
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +2 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +4 -4
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -10
- data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -40
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
- data/third_party/abseil-cpp/absl/base/macros.h +4 -21
- data/third_party/abseil-cpp/absl/base/optimization.h +58 -6
- data/third_party/abseil-cpp/absl/base/options.h +1 -7
- data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
- 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 +7 -5
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -7
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +66 -18
- data/third_party/abseil-cpp/absl/container/internal/common.h +3 -3
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +13 -1
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +50 -5
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +14 -46
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +110 -32
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +155 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +661 -341
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -13
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -9
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +40 -85
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +33 -8
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +118 -94
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
- data/third_party/abseil-cpp/absl/flags/commandlineflag.cc +34 -0
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +200 -0
- data/third_party/abseil-cpp/absl/flags/config.h +68 -0
- data/third_party/abseil-cpp/absl/flags/declare.h +73 -0
- data/third_party/abseil-cpp/absl/flags/flag.cc +38 -0
- data/third_party/abseil-cpp/absl/flags/flag.h +310 -0
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.cc +26 -0
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +68 -0
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +615 -0
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +800 -0
- data/third_party/abseil-cpp/absl/flags/internal/flag_msvc.inc +116 -0
- data/third_party/abseil-cpp/absl/flags/internal/path_util.h +62 -0
- data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +65 -0
- data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +61 -0
- data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +60 -0
- data/third_party/abseil-cpp/absl/flags/internal/program_name.h +50 -0
- data/third_party/abseil-cpp/absl/flags/internal/registry.h +97 -0
- data/third_party/abseil-cpp/absl/flags/internal/sequence_lock.h +187 -0
- data/third_party/abseil-cpp/absl/flags/marshalling.cc +241 -0
- data/third_party/abseil-cpp/absl/flags/marshalling.h +356 -0
- data/third_party/abseil-cpp/absl/flags/reflection.cc +354 -0
- data/third_party/abseil-cpp/absl/flags/reflection.h +90 -0
- data/third_party/abseil-cpp/absl/flags/usage_config.cc +165 -0
- data/third_party/abseil-cpp/absl/flags/usage_config.h +135 -0
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +5 -2
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +47 -26
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +18 -4
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
- data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
- data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
- data/third_party/abseil-cpp/absl/numeric/bits.h +2 -3
- data/third_party/abseil-cpp/absl/numeric/int128.cc +10 -8
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +14 -6
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +2 -23
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
- data/third_party/abseil-cpp/absl/random/random.h +6 -6
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +1 -0
- data/third_party/abseil-cpp/absl/status/status.cc +19 -12
- data/third_party/abseil-cpp/absl/status/status.h +2 -2
- data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
- data/third_party/abseil-cpp/absl/strings/cord.cc +92 -40
- data/third_party/abseil-cpp/absl/strings/cord.h +71 -80
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +8 -5
- data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
- data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
- data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +330 -70
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +8 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +26 -14
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +9 -7
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +8 -5
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +12 -10
- data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
- data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
- data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +126 -29
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +4 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +49 -287
- data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +10 -101
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
- data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
- data/third_party/abseil-cpp/absl/strings/numbers.cc +34 -31
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
- data/third_party/abseil-cpp/absl/strings/str_cat.h +50 -3
- data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
- data/third_party/abseil-cpp/absl/strings/string_view.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/string_view.h +3 -10
- data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +46 -20
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +104 -55
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +85 -46
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
- data/third_party/abseil-cpp/absl/synchronization/notification.h +0 -1
- data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
- data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
- data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
- data/third_party/abseil-cpp/absl/time/duration.cc +7 -7
- data/third_party/abseil-cpp/absl/time/format.cc +2 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
- data/third_party/abseil-cpp/absl/time/time.cc +2 -2
- data/third_party/abseil-cpp/absl/time/time.h +253 -158
- data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
- data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
- data/third_party/abseil-cpp/absl/types/span.h +29 -7
- data/third_party/boringssl-with-bazel/err_data.c +728 -712
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +177 -177
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +28 -55
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +21 -23
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +20 -23
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +66 -185
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +18 -21
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +356 -311
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +177 -196
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +146 -210
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +6 -9
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +346 -526
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +110 -131
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +130 -116
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +93 -60
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +93 -181
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +242 -305
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +41 -18
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +30 -33
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +36 -33
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +29 -26
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +135 -90
- data/third_party/boringssl-with-bazel/src/crypto/asn1/posix_time.c +230 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +797 -793
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +529 -526
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +114 -135
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +201 -207
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +21 -26
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +55 -68
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +17 -11
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +37 -51
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +15 -9
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +13 -9
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +22 -19
- data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +5 -5
- data/third_party/boringssl-with-bazel/src/crypto/bio/printf.c +0 -13
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -6
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +40 -27
- data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +10 -23
- data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +2 -6
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +29 -28
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +161 -201
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +254 -39
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +37 -75
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +8 -10
- data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/cipher → cipher_extra}/e_des.c +100 -78
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +34 -37
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +22 -11
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +6 -10
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +12 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +74 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_freebsd.c +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-fuchsia.c → cpu_aarch64_fuchsia.c} +8 -7
- data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-linux.c → cpu_aarch64_linux.c} +6 -4
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-win.c → cpu_aarch64_win.c} +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm.c → cpu_arm.c} +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.c +55 -0
- data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.c → cpu_arm_linux.c} +11 -90
- data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.h → cpu_arm_linux.h} +0 -38
- data/third_party/boringssl-with-bazel/src/crypto/{cpu-ppc64le.c → cpu_arm_openbsd.c} +10 -17
- data/third_party/boringssl-with-bazel/src/crypto/{cpu-intel.c → cpu_intel.c} +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/crypto.c +25 -20
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +22 -31
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +17 -32
- data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/des.c +232 -232
- data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +232 -29
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +0 -3
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +43 -16
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +37 -7
- data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +11 -36
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +229 -102
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +31 -7
- data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +83 -60
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +46 -12
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +25 -23
- data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +43 -9
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +75 -44
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +19 -25
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +96 -45
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +7 -8
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +26 -23
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_hkdf.c +233 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +42 -25
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +4 -5
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +35 -47
- data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +135 -244
- data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/evp/sign.c +15 -10
- data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +29 -15
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +13 -14
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +3 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +13 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +9 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +36 -27
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +16 -26
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +88 -60
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +4 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +99 -113
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +5 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c +112 -168
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +86 -31
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +11 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +4 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +4 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +13 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +13 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +19 -108
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +19 -15
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +15 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +22 -21
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +79 -19
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +102 -99
- data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → fipsmodule/cipher}/e_aesccm.c +52 -46
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/{cmac → fipsmodule/cmac}/cmac.c +55 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.c +2 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +24 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +56 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +5 -3
- data/third_party/boringssl-with-bazel/src/crypto/{evp → fipsmodule/digestsign}/digestsign.c +51 -15
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +49 -49
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +92 -18
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +12 -12
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +108 -86
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +55 -25
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +55 -71
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64-table.h → p256-nistz-table.h} +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.c → p256-nistz.c} +72 -65
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.h → p256-nistz.h} +5 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +62 -51
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +2 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +12 -17
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +25 -26
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -14
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +9 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +44 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +6 -0
- data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c +52 -24
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +9 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +1 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +3 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +170 -160
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +69 -61
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -12
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +31 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +16 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +9 -38
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +73 -59
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +22 -68
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +43 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +42 -314
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +244 -139
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +144 -205
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +41 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +593 -421
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +89 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +334 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +3 -12
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +12 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +14 -12
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +52 -6
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +192 -18
- data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +65 -29
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +391 -18
- data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +91 -0
- data/third_party/boringssl-with-bazel/src/crypto/kyber/keccak.c +204 -0
- data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +833 -0
- data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +13 -1
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +220 -13
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +19 -7
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +9 -4
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +81 -90
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +150 -245
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +633 -613
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +17 -17
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +142 -149
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +99 -131
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +0 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -66
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +31 -38
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +18 -31
- data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +8 -1
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +129 -5
- data/third_party/boringssl-with-bazel/src/crypto/refcount_c11.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +6 -17
- data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
- data/third_party/boringssl-with-bazel/src/crypto/{asn1/a_print.c → rsa_extra/internal.h} +15 -21
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
- data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +8 -11
- data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +61 -27
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +10 -13
- data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +10 -13
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +128 -34
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +418 -133
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +116 -284
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +701 -87
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c +22 -24
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +63 -55
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +32 -34
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +32 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +465 -704
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +285 -331
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +183 -178
- data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c +11 -15
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +68 -50
- data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +132 -151
- data/third_party/boringssl-with-bazel/src/crypto/x509/policy.c +790 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +95 -102
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +72 -57
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +12 -10
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +220 -254
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +52 -47
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +3 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +136 -270
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +161 -327
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +37 -33
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +14 -31
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +55 -85
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +528 -616
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +129 -122
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +164 -181
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +132 -132
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +186 -203
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +64 -79
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +175 -160
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1864 -2050
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +380 -480
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +156 -163
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +266 -265
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +40 -15
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +59 -63
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +63 -67
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +114 -144
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +25 -26
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +329 -416
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +8 -7
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_info.c +30 -28
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +354 -370
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +37 -32
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +116 -119
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +36 -26
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +3 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c +10 -13
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +3 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +419 -261
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +113 -105
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +11 -15
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +79 -171
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +126 -131
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c +3 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +465 -469
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c +56 -54
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +46 -49
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +294 -344
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +342 -365
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +429 -393
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +29 -24
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c +65 -59
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +125 -121
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +43 -42
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +120 -125
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c +50 -20
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +228 -265
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +386 -389
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +45 -32
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c +57 -54
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c +63 -67
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +130 -135
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +652 -691
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +90 -75
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1063 -1145
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +13 -11
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +28 -48
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +217 -191
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +26 -78
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +50 -14
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +29 -14
- data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +49 -17
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +99 -29
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +49 -60
- data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +2 -15
- data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +16 -200
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +34 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +82 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +32 -30
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +7 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +48 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +37 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +33 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +25 -33
- data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +7 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +69 -16
- data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +91 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/kyber.h +128 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +74 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +7 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +8 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +11 -18
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +8 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +12 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +98 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +96 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +18 -21
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +285 -92
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +1 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +381 -287
- data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +9 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/time.h +41 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +22 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +57 -23
- data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +0 -11
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +2075 -1407
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +242 -214
- data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +6 -13
- data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +17 -18
- data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +4 -5
- data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +25 -33
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +45 -26
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +64 -35
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +198 -54
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +5 -5
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +53 -34
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +76 -44
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +200 -121
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +47 -12
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +91 -75
- data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +8 -10
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +47 -69
- data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +1 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +5 -9
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +217 -226
- data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +78 -101
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +106 -142
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +244 -35
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +167 -64
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +41 -32
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +22 -6
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +15 -13
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +7 -44
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +7 -4
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +7 -23
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +25 -34
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +16 -98
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +1241 -657
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +751 -398
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3551 -1938
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1272 -487
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
- data/third_party/cares/cares/include/ares.h +23 -1
- data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
- data/third_party/cares/cares/include/ares_rules.h +2 -2
- data/third_party/cares/cares/include/ares_version.h +3 -3
- data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
- data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
- data/third_party/cares/cares/src/lib/ares_data.c +16 -0
- data/third_party/cares/cares/src/lib/ares_data.h +7 -0
- data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
- data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
- data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
- data/third_party/cares/cares/src/lib/ares_init.c +97 -485
- data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
- data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
- data/third_party/cares/cares/src/lib/ares_private.h +30 -16
- data/third_party/cares/cares/src/lib/ares_process.c +55 -16
- data/third_party/cares/cares/src/lib/ares_query.c +1 -35
- data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
- data/third_party/cares/cares/src/lib/ares_send.c +5 -7
- data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
- data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
- data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
- data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
- data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
- data/third_party/re2/re2/bitstate.cc +3 -3
- data/third_party/re2/re2/dfa.cc +13 -13
- data/third_party/re2/re2/nfa.cc +4 -4
- data/third_party/re2/re2/onepass.cc +2 -2
- data/third_party/re2/re2/prefilter_tree.cc +27 -59
- data/third_party/re2/re2/prefilter_tree.h +3 -2
- data/third_party/re2/re2/prog.cc +11 -2
- data/third_party/re2/re2/prog.h +17 -5
- data/third_party/re2/re2/re2.cc +6 -11
- data/third_party/re2/re2/re2.h +1 -1
- data/third_party/re2/re2/regexp.cc +1 -2
- data/third_party/re2/re2/stringpiece.h +10 -7
- data/third_party/re2/re2/unicode_casefold.cc +25 -11
- data/third_party/re2/re2/unicode_groups.cc +319 -151
- data/third_party/re2/re2/walker-inl.h +3 -2
- data/third_party/re2/util/mutex.h +4 -4
- data/third_party/upb/upb/{table_internal.h → alloc.h} +6 -6
- data/third_party/upb/upb/arena.h +4 -193
- data/third_party/upb/upb/array.h +4 -51
- data/third_party/upb/upb/base/descriptor_constants.h +104 -0
- data/third_party/upb/upb/base/log2.h +57 -0
- data/third_party/upb/upb/{status.c → base/status.c} +2 -7
- data/third_party/upb/upb/base/status.h +66 -0
- data/third_party/upb/upb/base/string_view.h +75 -0
- data/third_party/upb/upb/{array.c → collections/array.c} +67 -36
- data/third_party/upb/upb/collections/array.h +85 -0
- data/third_party/upb/upb/collections/array_internal.h +135 -0
- data/third_party/upb/upb/{map.c → collections/map.c} +53 -26
- data/third_party/upb/upb/collections/map.h +135 -0
- data/third_party/upb/upb/collections/map_gencode_util.h +78 -0
- data/third_party/upb/upb/collections/map_internal.h +170 -0
- data/third_party/upb/upb/collections/map_sorter.c +166 -0
- data/third_party/upb/upb/collections/map_sorter_internal.h +109 -0
- data/third_party/upb/upb/{message_value.h → collections/message_value.h} +12 -13
- data/third_party/upb/upb/decode.h +3 -62
- data/third_party/upb/upb/def.h +4 -384
- data/third_party/upb/upb/def.hpp +3 -411
- data/third_party/upb/upb/encode.h +3 -48
- data/third_party/upb/upb/extension_registry.h +3 -52
- data/third_party/upb/upb/{table.c → hash/common.c} +52 -110
- data/third_party/upb/upb/hash/common.h +199 -0
- data/third_party/upb/upb/hash/int_table.h +102 -0
- data/third_party/upb/upb/hash/str_table.h +161 -0
- data/third_party/upb/upb/{json_decode.c → json/decode.c} +63 -98
- data/third_party/upb/upb/json/decode.h +52 -0
- data/third_party/upb/upb/{json_encode.c → json/encode.c} +69 -45
- data/third_party/upb/upb/json/encode.h +70 -0
- data/third_party/upb/upb/json_decode.h +4 -15
- data/third_party/upb/upb/json_encode.h +4 -33
- data/third_party/upb/upb/lex/atoi.c +68 -0
- data/third_party/upb/upb/lex/atoi.h +53 -0
- data/third_party/upb/upb/{upb.c → lex/round_trip.c} +2 -11
- data/third_party/upb/upb/{internal/upb.h → lex/round_trip.h} +17 -30
- data/third_party/upb/upb/lex/strtod.c +97 -0
- data/third_party/upb/upb/lex/strtod.h +46 -0
- data/third_party/upb/upb/lex/unicode.c +57 -0
- data/third_party/upb/upb/lex/unicode.h +77 -0
- data/third_party/upb/upb/map.h +4 -85
- data/third_party/upb/upb/mem/alloc.c +47 -0
- data/third_party/upb/upb/mem/alloc.h +98 -0
- data/third_party/upb/upb/mem/arena.c +367 -0
- data/third_party/upb/upb/mem/arena.h +160 -0
- data/third_party/upb/upb/mem/arena_internal.h +114 -0
- data/third_party/upb/upb/message/accessors.c +68 -0
- data/third_party/upb/upb/message/accessors.h +379 -0
- data/third_party/upb/upb/message/accessors_internal.h +325 -0
- data/third_party/upb/upb/message/extension_internal.h +83 -0
- data/third_party/upb/upb/message/internal.h +135 -0
- data/third_party/upb/upb/message/message.c +180 -0
- data/third_party/upb/upb/message/message.h +69 -0
- data/third_party/upb/upb/mini_table/common.c +128 -0
- data/third_party/upb/upb/mini_table/common.h +170 -0
- data/third_party/upb/upb/mini_table/common_internal.h +111 -0
- data/third_party/upb/upb/{mini_table.c → mini_table/decode.c} +513 -533
- data/third_party/upb/upb/mini_table/decode.h +179 -0
- data/third_party/upb/upb/mini_table/encode.c +300 -0
- data/third_party/upb/upb/mini_table/encode_internal.h +111 -0
- data/third_party/upb/upb/{mini_table.hpp → mini_table/encode_internal.hpp} +32 -8
- data/third_party/upb/upb/mini_table/enum_internal.h +88 -0
- data/third_party/upb/upb/mini_table/extension_internal.h +47 -0
- data/third_party/upb/upb/{extension_registry.c → mini_table/extension_registry.c} +27 -24
- data/third_party/upb/upb/mini_table/extension_registry.h +104 -0
- data/third_party/upb/upb/mini_table/field_internal.h +192 -0
- data/third_party/upb/upb/mini_table/file_internal.h +47 -0
- data/third_party/upb/upb/mini_table/message_internal.h +136 -0
- data/third_party/upb/upb/mini_table/sub_internal.h +38 -0
- data/third_party/upb/upb/mini_table/types.h +40 -0
- data/third_party/upb/upb/mini_table.h +4 -157
- data/third_party/upb/upb/msg.h +3 -38
- data/third_party/upb/upb/port/atomic.h +101 -0
- data/third_party/upb/upb/{port_def.inc → port/def.inc} +94 -27
- data/third_party/upb/upb/{port_undef.inc → port/undef.inc} +13 -3
- data/third_party/upb/upb/{internal → port}/vsnprintf_compat.h +5 -7
- data/third_party/upb/upb/reflection/common.h +67 -0
- data/third_party/upb/upb/reflection/def.h +42 -0
- data/third_party/upb/upb/reflection/def.hpp +610 -0
- data/third_party/upb/upb/reflection/def_builder.c +357 -0
- data/third_party/upb/upb/reflection/def_builder_internal.h +157 -0
- data/third_party/upb/upb/reflection/def_pool.c +462 -0
- data/third_party/upb/upb/reflection/def_pool.h +108 -0
- data/third_party/upb/upb/reflection/def_pool_internal.h +77 -0
- data/third_party/upb/upb/reflection/def_type.c +50 -0
- data/third_party/upb/upb/reflection/def_type.h +81 -0
- data/third_party/upb/upb/reflection/desc_state.c +53 -0
- data/third_party/upb/upb/reflection/desc_state_internal.h +64 -0
- data/third_party/upb/upb/reflection/enum_def.c +310 -0
- data/third_party/upb/upb/reflection/enum_def.h +80 -0
- data/third_party/upb/upb/reflection/enum_def_internal.h +56 -0
- data/third_party/upb/upb/reflection/enum_reserved_range.c +84 -0
- data/third_party/upb/upb/reflection/enum_reserved_range.h +51 -0
- data/third_party/upb/upb/reflection/enum_reserved_range_internal.h +55 -0
- data/third_party/upb/upb/reflection/enum_value_def.c +144 -0
- data/third_party/upb/upb/reflection/enum_value_def.h +57 -0
- data/third_party/upb/upb/reflection/enum_value_def_internal.h +57 -0
- data/third_party/upb/upb/reflection/extension_range.c +93 -0
- data/third_party/upb/upb/reflection/extension_range.h +55 -0
- data/third_party/upb/upb/reflection/extension_range_internal.h +54 -0
- data/third_party/upb/upb/reflection/field_def.c +930 -0
- data/third_party/upb/upb/reflection/field_def.h +91 -0
- data/third_party/upb/upb/reflection/field_def_internal.h +76 -0
- data/third_party/upb/upb/reflection/file_def.c +370 -0
- data/third_party/upb/upb/reflection/file_def.h +77 -0
- data/third_party/upb/upb/reflection/file_def_internal.h +57 -0
- data/third_party/upb/upb/reflection/message.c +233 -0
- data/third_party/upb/upb/reflection/message.h +102 -0
- data/third_party/upb/upb/reflection/message.hpp +37 -0
- data/third_party/upb/upb/reflection/message_def.c +718 -0
- data/third_party/upb/upb/reflection/message_def.h +174 -0
- data/third_party/upb/upb/reflection/message_def_internal.h +63 -0
- data/third_party/upb/upb/reflection/message_reserved_range.c +81 -0
- data/third_party/upb/upb/reflection/message_reserved_range.h +51 -0
- data/third_party/upb/upb/reflection/message_reserved_range_internal.h +55 -0
- data/third_party/upb/upb/reflection/method_def.c +124 -0
- data/third_party/upb/upb/reflection/method_def.h +59 -0
- data/third_party/upb/upb/reflection/method_def_internal.h +53 -0
- data/third_party/upb/upb/reflection/oneof_def.c +226 -0
- data/third_party/upb/upb/reflection/oneof_def.h +66 -0
- data/third_party/upb/upb/reflection/oneof_def_internal.h +57 -0
- data/third_party/upb/upb/reflection/service_def.c +128 -0
- data/third_party/upb/upb/reflection/service_def.h +60 -0
- data/third_party/upb/upb/reflection/service_def_internal.h +53 -0
- data/third_party/upb/upb/reflection.h +4 -78
- data/third_party/upb/upb/reflection.hpp +3 -7
- data/third_party/upb/upb/status.h +4 -34
- data/third_party/upb/upb/{collections.h → string_view.h} +7 -7
- data/third_party/upb/upb/{text_encode.c → text/encode.c} +74 -70
- data/third_party/upb/upb/text/encode.h +69 -0
- data/third_party/upb/upb/text_encode.h +4 -32
- data/third_party/upb/upb/upb.h +6 -151
- data/third_party/upb/upb/upb.hpp +10 -18
- data/third_party/upb/upb/wire/common.h +44 -0
- data/third_party/upb/upb/wire/common_internal.h +50 -0
- data/third_party/upb/upb/wire/decode.c +1343 -0
- data/third_party/upb/upb/wire/decode.h +108 -0
- data/third_party/upb/upb/{decode_fast.c → wire/decode_fast.c} +184 -225
- data/third_party/upb/upb/{decode_fast.h → wire/decode_fast.h} +21 -7
- data/third_party/upb/upb/{internal/decode.h → wire/decode_internal.h} +44 -92
- data/third_party/upb/upb/{encode.c → wire/encode.c} +114 -95
- data/third_party/upb/upb/wire/encode.h +92 -0
- data/third_party/upb/upb/wire/eps_copy_input_stream.c +39 -0
- data/third_party/upb/upb/wire/eps_copy_input_stream.h +425 -0
- data/third_party/upb/upb/wire/reader.c +67 -0
- data/third_party/upb/upb/wire/reader.h +227 -0
- data/third_party/upb/upb/wire/swap_internal.h +63 -0
- data/third_party/upb/upb/wire/types.h +41 -0
- data/third_party/{upb/third_party/utf8_range → utf8_range}/range2-neon.c +1 -1
- data/third_party/{upb/third_party/utf8_range → utf8_range}/utf8_range.h +12 -0
- data/third_party/zlib/compress.c +3 -3
- data/third_party/zlib/crc32.c +21 -12
- data/third_party/zlib/deflate.c +112 -106
- data/third_party/zlib/deflate.h +2 -2
- data/third_party/zlib/gzlib.c +1 -1
- data/third_party/zlib/gzread.c +3 -5
- data/third_party/zlib/gzwrite.c +1 -1
- data/third_party/zlib/infback.c +10 -7
- data/third_party/zlib/inflate.c +5 -2
- data/third_party/zlib/inftrees.c +2 -2
- data/third_party/zlib/inftrees.h +1 -1
- data/third_party/zlib/trees.c +61 -62
- data/third_party/zlib/uncompr.c +2 -2
- data/third_party/zlib/zconf.h +16 -3
- data/third_party/zlib/zlib.h +10 -10
- data/third_party/zlib/zutil.c +9 -7
- data/third_party/zlib/zutil.h +1 -0
- metadata +509 -152
- data/include/grpc/impl/codegen/gpr_slice.h +0 -71
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -176
- data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +0 -30
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -332
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -52
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -322
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -62
- data/src/core/ext/transport/chttp2/transport/context_list.cc +0 -71
- data/src/core/ext/transport/chttp2/transport/context_list.h +0 -54
- data/src/core/lib/event_engine/socket_notifier.h +0 -55
- data/src/core/lib/event_engine/thread_pool.cc +0 -195
- data/src/core/lib/event_engine/thread_pool.h +0 -114
- data/src/core/lib/gpr/cpu_iphone.cc +0 -44
- data/src/core/lib/gpr/cpu_windows.cc +0 -33
- 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.cc +0 -69
- data/src/core/lib/gpr/tls.h +0 -156
- data/src/core/lib/gprpp/env_posix.cc +0 -47
- data/src/core/lib/gprpp/global_config.h +0 -93
- data/src/core/lib/gprpp/global_config_custom.h +0 -29
- data/src/core/lib/gprpp/global_config_env.cc +0 -139
- data/src/core/lib/gprpp/global_config_env.h +0 -133
- data/src/core/lib/gprpp/global_config_generic.h +0 -40
- data/src/core/lib/promise/call_push_pull.h +0 -148
- data/src/core/lib/promise/intra_activity_waiter.h +0 -49
- data/src/core/lib/security/security_connector/ssl_utils_config.cc +0 -32
- data/src/core/lib/security/security_connector/ssl_utils_config.h +0 -30
- data/src/core/lib/slice/slice_api.cc +0 -39
- data/src/core/lib/slice/slice_buffer_api.cc +0 -35
- data/src/core/lib/slice/slice_refcount_base.h +0 -60
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +0 -195
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +0 -236
- data/third_party/boringssl-with-bazel/src/crypto/asn1/charmap.h +0 -15
- data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +0 -206
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c +0 -361
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +0 -287
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +0 -132
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +0 -155
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +0 -131
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +0 -189
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +0 -843
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +0 -289
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c +0 -57
- data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
- data/third_party/upb/upb/arena.c +0 -277
- data/third_party/upb/upb/decode.c +0 -1221
- data/third_party/upb/upb/def.c +0 -3269
- data/third_party/upb/upb/internal/table.h +0 -385
- data/third_party/upb/upb/msg.c +0 -368
- data/third_party/upb/upb/msg_internal.h +0 -837
- data/third_party/upb/upb/reflection.c +0 -323
- /data/src/ruby/ext/grpc/{ext-export-truffleruby.clang → ext-export-truffleruby-with-ruby-abi-version.clang} +0 -0
- /data/src/ruby/ext/grpc/{ext-export-truffleruby.gcc → ext-export-truffleruby-with-ruby-abi-version.gcc} +0 -0
- /data/third_party/{upb/third_party/utf8_range → utf8_range}/naive.c +0 -0
- /data/third_party/{upb/third_party/utf8_range → utf8_range}/range2-sse.c +0 -0
@@ -1,46 +1,53 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
1
|
+
//
|
2
|
+
//
|
3
|
+
// Copyright 2015 gRPC authors.
|
4
|
+
//
|
5
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
// you may not use this file except in compliance with the License.
|
7
|
+
// You may obtain a copy of the License at
|
8
|
+
//
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
//
|
11
|
+
// Unless required by applicable law or agreed to in writing, software
|
12
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
// See the License for the specific language governing permissions and
|
15
|
+
// limitations under the License.
|
16
|
+
//
|
17
|
+
//
|
18
18
|
|
19
19
|
#include <grpc/support/port_platform.h>
|
20
20
|
|
21
21
|
#include "src/core/lib/surface/call.h"
|
22
22
|
|
23
|
+
#include <inttypes.h>
|
23
24
|
#include <limits.h>
|
24
25
|
#include <stdlib.h>
|
26
|
+
#include <string.h>
|
25
27
|
|
26
28
|
#include <algorithm>
|
27
29
|
#include <atomic>
|
30
|
+
#include <initializer_list>
|
31
|
+
#include <memory>
|
28
32
|
#include <new>
|
29
33
|
#include <string>
|
34
|
+
#include <type_traits>
|
30
35
|
#include <utility>
|
36
|
+
#include <vector>
|
31
37
|
|
32
38
|
#include "absl/base/thread_annotations.h"
|
33
39
|
#include "absl/meta/type_traits.h"
|
34
40
|
#include "absl/status/status.h"
|
35
41
|
#include "absl/strings/str_cat.h"
|
36
42
|
#include "absl/strings/str_format.h"
|
43
|
+
#include "absl/strings/str_join.h"
|
37
44
|
#include "absl/strings/string_view.h"
|
38
45
|
|
39
46
|
#include <grpc/byte_buffer.h>
|
40
47
|
#include <grpc/compression.h>
|
48
|
+
#include <grpc/event_engine/event_engine.h>
|
41
49
|
#include <grpc/grpc.h>
|
42
|
-
#include <grpc/impl/
|
43
|
-
#include <grpc/impl/codegen/propagation_bits.h>
|
50
|
+
#include <grpc/impl/propagation_bits.h>
|
44
51
|
#include <grpc/slice.h>
|
45
52
|
#include <grpc/slice_buffer.h>
|
46
53
|
#include <grpc/status.h>
|
@@ -48,40 +55,68 @@
|
|
48
55
|
#include <grpc/support/atm.h>
|
49
56
|
#include <grpc/support/log.h>
|
50
57
|
#include <grpc/support/string_util.h>
|
58
|
+
#include <grpc/support/time.h>
|
51
59
|
|
60
|
+
#include "src/core/lib/channel/call_finalization.h"
|
61
|
+
#include "src/core/lib/channel/call_tracer.h"
|
62
|
+
#include "src/core/lib/channel/channel_args.h"
|
52
63
|
#include "src/core/lib/channel/channel_stack.h"
|
53
64
|
#include "src/core/lib/channel/channelz.h"
|
54
65
|
#include "src/core/lib/channel/context.h"
|
66
|
+
#include "src/core/lib/channel/status_util.h"
|
55
67
|
#include "src/core/lib/compression/compression_internal.h"
|
56
68
|
#include "src/core/lib/debug/stats.h"
|
69
|
+
#include "src/core/lib/debug/stats_data.h"
|
70
|
+
#include "src/core/lib/experiments/experiments.h"
|
57
71
|
#include "src/core/lib/gpr/alloc.h"
|
58
72
|
#include "src/core/lib/gpr/time_precise.h"
|
73
|
+
#include "src/core/lib/gpr/useful.h"
|
74
|
+
#include "src/core/lib/gprpp/bitset.h"
|
59
75
|
#include "src/core/lib/gprpp/cpp_impl_of.h"
|
76
|
+
#include "src/core/lib/gprpp/crash.h"
|
60
77
|
#include "src/core/lib/gprpp/debug_location.h"
|
61
78
|
#include "src/core/lib/gprpp/ref_counted.h"
|
79
|
+
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
80
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
62
81
|
#include "src/core/lib/gprpp/sync.h"
|
63
82
|
#include "src/core/lib/iomgr/call_combiner.h"
|
64
83
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
65
84
|
#include "src/core/lib/iomgr/polling_entity.h"
|
85
|
+
#include "src/core/lib/promise/activity.h"
|
86
|
+
#include "src/core/lib/promise/arena_promise.h"
|
87
|
+
#include "src/core/lib/promise/context.h"
|
88
|
+
#include "src/core/lib/promise/detail/basic_seq.h"
|
89
|
+
#include "src/core/lib/promise/latch.h"
|
90
|
+
#include "src/core/lib/promise/map.h"
|
91
|
+
#include "src/core/lib/promise/party.h"
|
92
|
+
#include "src/core/lib/promise/pipe.h"
|
93
|
+
#include "src/core/lib/promise/poll.h"
|
94
|
+
#include "src/core/lib/promise/race.h"
|
95
|
+
#include "src/core/lib/promise/seq.h"
|
66
96
|
#include "src/core/lib/resource_quota/arena.h"
|
67
97
|
#include "src/core/lib/slice/slice_buffer.h"
|
68
98
|
#include "src/core/lib/slice/slice_internal.h"
|
69
|
-
#include "src/core/lib/slice/slice_refcount.h"
|
70
99
|
#include "src/core/lib/surface/api_trace.h"
|
71
100
|
#include "src/core/lib/surface/call_test_only.h"
|
72
101
|
#include "src/core/lib/surface/channel.h"
|
73
102
|
#include "src/core/lib/surface/completion_queue.h"
|
74
103
|
#include "src/core/lib/surface/server.h"
|
75
104
|
#include "src/core/lib/surface/validate_metadata.h"
|
105
|
+
#include "src/core/lib/transport/batch_builder.h"
|
76
106
|
#include "src/core/lib/transport/error_utils.h"
|
77
107
|
#include "src/core/lib/transport/metadata_batch.h"
|
78
108
|
#include "src/core/lib/transport/transport.h"
|
79
109
|
|
80
110
|
grpc_core::TraceFlag grpc_call_error_trace(false, "call_error");
|
81
111
|
grpc_core::TraceFlag grpc_compression_trace(false, "compression");
|
112
|
+
grpc_core::TraceFlag grpc_call_trace(false, "call");
|
113
|
+
grpc_core::DebugOnlyTraceFlag grpc_call_refcount_trace(false, "call_refcount");
|
82
114
|
|
83
115
|
namespace grpc_core {
|
84
116
|
|
117
|
+
///////////////////////////////////////////////////////////////////////////////
|
118
|
+
// Call
|
119
|
+
|
85
120
|
class Call : public CppImplOf<Call, grpc_call> {
|
86
121
|
public:
|
87
122
|
Arena* arena() { return arena_; }
|
@@ -94,7 +129,7 @@ class Call : public CppImplOf<Call, grpc_call> {
|
|
94
129
|
void CancelWithStatus(grpc_status_code status, const char* description);
|
95
130
|
virtual void CancelWithError(grpc_error_handle error) = 0;
|
96
131
|
virtual void SetCompletionQueue(grpc_completion_queue* cq) = 0;
|
97
|
-
|
132
|
+
char* GetPeer();
|
98
133
|
virtual grpc_call_error StartBatch(const grpc_op* ops, size_t nops,
|
99
134
|
void* notify_tag,
|
100
135
|
bool is_notify_tag_closure) = 0;
|
@@ -106,22 +141,29 @@ class Call : public CppImplOf<Call, grpc_call> {
|
|
106
141
|
virtual void InternalRef(const char* reason) = 0;
|
107
142
|
virtual void InternalUnref(const char* reason) = 0;
|
108
143
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
144
|
+
grpc_compression_algorithm test_only_compression_algorithm() {
|
145
|
+
return incoming_compression_algorithm_;
|
146
|
+
}
|
147
|
+
uint32_t test_only_message_flags() { return test_only_last_message_flags_; }
|
148
|
+
CompressionAlgorithmSet encodings_accepted_by_peer() {
|
149
|
+
return encodings_accepted_by_peer_;
|
150
|
+
}
|
114
151
|
|
115
152
|
// This should return nullptr for the promise stack (and alternative means
|
116
153
|
// for that functionality be invented)
|
117
154
|
virtual grpc_call_stack* call_stack() = 0;
|
118
155
|
|
119
156
|
protected:
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
157
|
+
// The maximum number of concurrent batches possible.
|
158
|
+
// Based upon the maximum number of individually queueable ops in the batch
|
159
|
+
// api:
|
160
|
+
// - initial metadata send
|
161
|
+
// - message send
|
162
|
+
// - status/close send (depending on client/server)
|
163
|
+
// - initial metadata recv
|
164
|
+
// - message recv
|
165
|
+
// - status/close recv (depending on client/server)
|
166
|
+
static constexpr size_t kMaxConcurrentBatches = 6;
|
125
167
|
|
126
168
|
struct ParentCall {
|
127
169
|
Mutex child_list_mu;
|
@@ -131,15 +173,32 @@ class Call : public CppImplOf<Call, grpc_call> {
|
|
131
173
|
struct ChildCall {
|
132
174
|
explicit ChildCall(Call* parent) : parent(parent) {}
|
133
175
|
Call* parent;
|
134
|
-
|
135
|
-
|
136
|
-
|
176
|
+
/// siblings: children of the same parent form a list, and this list is
|
177
|
+
/// protected under
|
178
|
+
/// parent->mu
|
137
179
|
Call* sibling_next = nullptr;
|
138
180
|
Call* sibling_prev = nullptr;
|
139
181
|
};
|
140
182
|
|
183
|
+
Call(Arena* arena, bool is_client, Timestamp send_deadline,
|
184
|
+
RefCountedPtr<Channel> channel)
|
185
|
+
: channel_(std::move(channel)),
|
186
|
+
arena_(arena),
|
187
|
+
send_deadline_(send_deadline),
|
188
|
+
is_client_(is_client) {
|
189
|
+
GPR_DEBUG_ASSERT(arena_ != nullptr);
|
190
|
+
GPR_DEBUG_ASSERT(channel_ != nullptr);
|
191
|
+
}
|
192
|
+
virtual ~Call() = default;
|
193
|
+
|
194
|
+
void DeleteThis();
|
195
|
+
|
141
196
|
ParentCall* GetOrCreateParentCall();
|
142
197
|
ParentCall* parent_call();
|
198
|
+
Channel* channel() const {
|
199
|
+
GPR_DEBUG_ASSERT(channel_ != nullptr);
|
200
|
+
return channel_.get();
|
201
|
+
}
|
143
202
|
|
144
203
|
absl::Status InitParent(Call* parent, uint32_t propagation_mask);
|
145
204
|
void PublishToParent(Call* parent);
|
@@ -151,7 +210,42 @@ class Call : public CppImplOf<Call, grpc_call> {
|
|
151
210
|
send_deadline_ = send_deadline;
|
152
211
|
}
|
153
212
|
|
213
|
+
Slice GetPeerString() const {
|
214
|
+
MutexLock lock(&peer_mu_);
|
215
|
+
return peer_string_.Ref();
|
216
|
+
}
|
217
|
+
|
218
|
+
void SetPeerString(Slice peer_string) {
|
219
|
+
MutexLock lock(&peer_mu_);
|
220
|
+
peer_string_ = std::move(peer_string);
|
221
|
+
}
|
222
|
+
|
223
|
+
void ClearPeerString() { SetPeerString(Slice(grpc_empty_slice())); }
|
224
|
+
|
225
|
+
// TODO(ctiller): cancel_func is for cancellation of the call - filter stack
|
226
|
+
// holds no mutexes here, promise stack does, and so locking is different.
|
227
|
+
// Remove this and cancel directly once promise conversion is done.
|
228
|
+
void ProcessIncomingInitialMetadata(grpc_metadata_batch& md);
|
229
|
+
// Fixup outgoing metadata before sending - adds compression, protects
|
230
|
+
// internal headers against external modification.
|
231
|
+
void PrepareOutgoingInitialMetadata(const grpc_op& op,
|
232
|
+
grpc_metadata_batch& md);
|
233
|
+
void NoteLastMessageFlags(uint32_t flags) {
|
234
|
+
test_only_last_message_flags_ = flags;
|
235
|
+
}
|
236
|
+
grpc_compression_algorithm incoming_compression_algorithm() const {
|
237
|
+
return incoming_compression_algorithm_;
|
238
|
+
}
|
239
|
+
|
240
|
+
void HandleCompressionAlgorithmDisabled(
|
241
|
+
grpc_compression_algorithm compression_algorithm) GPR_ATTRIBUTE_NOINLINE;
|
242
|
+
void HandleCompressionAlgorithmNotAccepted(
|
243
|
+
grpc_compression_algorithm compression_algorithm) GPR_ATTRIBUTE_NOINLINE;
|
244
|
+
|
245
|
+
gpr_cycle_counter start_time() const { return start_time_; }
|
246
|
+
|
154
247
|
private:
|
248
|
+
RefCountedPtr<Channel> channel_;
|
155
249
|
Arena* const arena_;
|
156
250
|
std::atomic<ParentCall*> parent_call_{nullptr};
|
157
251
|
ChildCall* child_ = nullptr;
|
@@ -159,11 +253,261 @@ class Call : public CppImplOf<Call, grpc_call> {
|
|
159
253
|
const bool is_client_;
|
160
254
|
// flag indicating that cancellation is inherited
|
161
255
|
bool cancellation_is_inherited_ = false;
|
256
|
+
// Compression algorithm for *incoming* data
|
257
|
+
grpc_compression_algorithm incoming_compression_algorithm_ =
|
258
|
+
GRPC_COMPRESS_NONE;
|
259
|
+
// Supported encodings (compression algorithms), a bitset.
|
260
|
+
// Always support no compression.
|
261
|
+
CompressionAlgorithmSet encodings_accepted_by_peer_{GRPC_COMPRESS_NONE};
|
262
|
+
uint32_t test_only_last_message_flags_ = 0;
|
263
|
+
// Peer name is protected by a mutex because it can be accessed by the
|
264
|
+
// application at the same moment as it is being set by the completion
|
265
|
+
// of the recv_initial_metadata op. The mutex should be mostly uncontended.
|
266
|
+
mutable Mutex peer_mu_;
|
267
|
+
Slice peer_string_;
|
268
|
+
gpr_cycle_counter start_time_ = gpr_get_cycle_counter();
|
162
269
|
};
|
163
270
|
|
271
|
+
Call::ParentCall* Call::GetOrCreateParentCall() {
|
272
|
+
ParentCall* p = parent_call_.load(std::memory_order_acquire);
|
273
|
+
if (p == nullptr) {
|
274
|
+
p = arena_->New<ParentCall>();
|
275
|
+
ParentCall* expected = nullptr;
|
276
|
+
if (!parent_call_.compare_exchange_strong(expected, p,
|
277
|
+
std::memory_order_release,
|
278
|
+
std::memory_order_relaxed)) {
|
279
|
+
p->~ParentCall();
|
280
|
+
p = expected;
|
281
|
+
}
|
282
|
+
}
|
283
|
+
return p;
|
284
|
+
}
|
285
|
+
|
286
|
+
Call::ParentCall* Call::parent_call() {
|
287
|
+
return parent_call_.load(std::memory_order_acquire);
|
288
|
+
}
|
289
|
+
|
290
|
+
absl::Status Call::InitParent(Call* parent, uint32_t propagation_mask) {
|
291
|
+
child_ = arena()->New<ChildCall>(parent);
|
292
|
+
|
293
|
+
parent->InternalRef("child");
|
294
|
+
GPR_ASSERT(is_client_);
|
295
|
+
GPR_ASSERT(!parent->is_client_);
|
296
|
+
|
297
|
+
if (propagation_mask & GRPC_PROPAGATE_DEADLINE) {
|
298
|
+
send_deadline_ = std::min(send_deadline_, parent->send_deadline_);
|
299
|
+
}
|
300
|
+
// for now GRPC_PROPAGATE_TRACING_CONTEXT *MUST* be passed with
|
301
|
+
// GRPC_PROPAGATE_STATS_CONTEXT
|
302
|
+
// TODO(ctiller): This should change to use the appropriate census start_op
|
303
|
+
// call.
|
304
|
+
if (propagation_mask & GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT) {
|
305
|
+
if (0 == (propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT)) {
|
306
|
+
return absl::UnknownError(
|
307
|
+
"Census tracing propagation requested without Census context "
|
308
|
+
"propagation");
|
309
|
+
}
|
310
|
+
ContextSet(GRPC_CONTEXT_TRACING, parent->ContextGet(GRPC_CONTEXT_TRACING),
|
311
|
+
nullptr);
|
312
|
+
} else if (propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT) {
|
313
|
+
return absl::UnknownError(
|
314
|
+
"Census context propagation requested without Census tracing "
|
315
|
+
"propagation");
|
316
|
+
}
|
317
|
+
if (propagation_mask & GRPC_PROPAGATE_CANCELLATION) {
|
318
|
+
cancellation_is_inherited_ = true;
|
319
|
+
}
|
320
|
+
return absl::OkStatus();
|
321
|
+
}
|
322
|
+
|
323
|
+
void Call::PublishToParent(Call* parent) {
|
324
|
+
ChildCall* cc = child_;
|
325
|
+
ParentCall* pc = parent->GetOrCreateParentCall();
|
326
|
+
MutexLock lock(&pc->child_list_mu);
|
327
|
+
if (pc->first_child == nullptr) {
|
328
|
+
pc->first_child = this;
|
329
|
+
cc->sibling_next = cc->sibling_prev = this;
|
330
|
+
} else {
|
331
|
+
cc->sibling_next = pc->first_child;
|
332
|
+
cc->sibling_prev = pc->first_child->child_->sibling_prev;
|
333
|
+
cc->sibling_next->child_->sibling_prev =
|
334
|
+
cc->sibling_prev->child_->sibling_next = this;
|
335
|
+
}
|
336
|
+
if (parent->Completed()) {
|
337
|
+
CancelWithError(absl::CancelledError());
|
338
|
+
}
|
339
|
+
}
|
340
|
+
|
341
|
+
void Call::MaybeUnpublishFromParent() {
|
342
|
+
ChildCall* cc = child_;
|
343
|
+
if (cc == nullptr) return;
|
344
|
+
|
345
|
+
ParentCall* pc = cc->parent->parent_call();
|
346
|
+
{
|
347
|
+
MutexLock lock(&pc->child_list_mu);
|
348
|
+
if (this == pc->first_child) {
|
349
|
+
pc->first_child = cc->sibling_next;
|
350
|
+
if (this == pc->first_child) {
|
351
|
+
pc->first_child = nullptr;
|
352
|
+
}
|
353
|
+
}
|
354
|
+
cc->sibling_prev->child_->sibling_next = cc->sibling_next;
|
355
|
+
cc->sibling_next->child_->sibling_prev = cc->sibling_prev;
|
356
|
+
}
|
357
|
+
cc->parent->InternalUnref("child");
|
358
|
+
}
|
359
|
+
|
360
|
+
void Call::CancelWithStatus(grpc_status_code status, const char* description) {
|
361
|
+
// copying 'description' is needed to ensure the grpc_call_cancel_with_status
|
362
|
+
// guarantee that can be short-lived.
|
363
|
+
// TODO(ctiller): change to
|
364
|
+
// absl::Status(static_cast<absl::StatusCode>(status), description)
|
365
|
+
// (ie remove the set_int, set_str).
|
366
|
+
CancelWithError(grpc_error_set_int(
|
367
|
+
grpc_error_set_str(
|
368
|
+
absl::Status(static_cast<absl::StatusCode>(status), description),
|
369
|
+
StatusStrProperty::kGrpcMessage, description),
|
370
|
+
StatusIntProperty::kRpcStatus, status));
|
371
|
+
}
|
372
|
+
|
373
|
+
void Call::PropagateCancellationToChildren() {
|
374
|
+
ParentCall* pc = parent_call();
|
375
|
+
if (pc != nullptr) {
|
376
|
+
Call* child;
|
377
|
+
MutexLock lock(&pc->child_list_mu);
|
378
|
+
child = pc->first_child;
|
379
|
+
if (child != nullptr) {
|
380
|
+
do {
|
381
|
+
Call* next_child_call = child->child_->sibling_next;
|
382
|
+
if (child->cancellation_is_inherited_) {
|
383
|
+
child->InternalRef("propagate_cancel");
|
384
|
+
child->CancelWithError(absl::CancelledError());
|
385
|
+
child->InternalUnref("propagate_cancel");
|
386
|
+
}
|
387
|
+
child = next_child_call;
|
388
|
+
} while (child != pc->first_child);
|
389
|
+
}
|
390
|
+
}
|
391
|
+
}
|
392
|
+
|
393
|
+
char* Call::GetPeer() {
|
394
|
+
Slice peer_slice = GetPeerString();
|
395
|
+
if (!peer_slice.empty()) {
|
396
|
+
absl::string_view peer_string_view = peer_slice.as_string_view();
|
397
|
+
char* peer_string =
|
398
|
+
static_cast<char*>(gpr_malloc(peer_string_view.size() + 1));
|
399
|
+
memcpy(peer_string, peer_string_view.data(), peer_string_view.size());
|
400
|
+
peer_string[peer_string_view.size()] = '\0';
|
401
|
+
return peer_string;
|
402
|
+
}
|
403
|
+
char* peer_string = grpc_channel_get_target(channel_->c_ptr());
|
404
|
+
if (peer_string != nullptr) return peer_string;
|
405
|
+
return gpr_strdup("unknown");
|
406
|
+
}
|
407
|
+
|
408
|
+
void Call::DeleteThis() {
|
409
|
+
RefCountedPtr<Channel> channel = std::move(channel_);
|
410
|
+
Arena* arena = arena_;
|
411
|
+
this->~Call();
|
412
|
+
channel->UpdateCallSizeEstimate(arena->TotalUsedBytes());
|
413
|
+
arena->Destroy();
|
414
|
+
}
|
415
|
+
|
416
|
+
void Call::PrepareOutgoingInitialMetadata(const grpc_op& op,
|
417
|
+
grpc_metadata_batch& md) {
|
418
|
+
// TODO(juanlishen): If the user has already specified a compression
|
419
|
+
// algorithm by setting the initial metadata with key of
|
420
|
+
// GRPC_COMPRESSION_REQUEST_ALGORITHM_MD_KEY, we shouldn't override that
|
421
|
+
// with the compression algorithm mapped from compression level.
|
422
|
+
// process compression level
|
423
|
+
grpc_compression_level effective_compression_level = GRPC_COMPRESS_LEVEL_NONE;
|
424
|
+
bool level_set = false;
|
425
|
+
if (op.data.send_initial_metadata.maybe_compression_level.is_set) {
|
426
|
+
effective_compression_level =
|
427
|
+
op.data.send_initial_metadata.maybe_compression_level.level;
|
428
|
+
level_set = true;
|
429
|
+
} else {
|
430
|
+
const grpc_compression_options copts = channel()->compression_options();
|
431
|
+
if (copts.default_level.is_set) {
|
432
|
+
level_set = true;
|
433
|
+
effective_compression_level = copts.default_level.level;
|
434
|
+
}
|
435
|
+
}
|
436
|
+
// Currently, only server side supports compression level setting.
|
437
|
+
if (level_set && !is_client()) {
|
438
|
+
const grpc_compression_algorithm calgo =
|
439
|
+
encodings_accepted_by_peer().CompressionAlgorithmForLevel(
|
440
|
+
effective_compression_level);
|
441
|
+
// The following metadata will be checked and removed by the message
|
442
|
+
// compression filter. It will be used as the call's compression
|
443
|
+
// algorithm.
|
444
|
+
md.Set(GrpcInternalEncodingRequest(), calgo);
|
445
|
+
}
|
446
|
+
// Ignore any te metadata key value pairs specified.
|
447
|
+
md.Remove(TeMetadata());
|
448
|
+
// Should never come from applications
|
449
|
+
md.Remove(GrpcLbClientStatsMetadata());
|
450
|
+
}
|
451
|
+
|
452
|
+
void Call::ProcessIncomingInitialMetadata(grpc_metadata_batch& md) {
|
453
|
+
Slice* peer_string = md.get_pointer(PeerString());
|
454
|
+
if (peer_string != nullptr) SetPeerString(peer_string->Ref());
|
455
|
+
|
456
|
+
incoming_compression_algorithm_ =
|
457
|
+
md.Take(GrpcEncodingMetadata()).value_or(GRPC_COMPRESS_NONE);
|
458
|
+
encodings_accepted_by_peer_ =
|
459
|
+
md.Take(GrpcAcceptEncodingMetadata())
|
460
|
+
.value_or(CompressionAlgorithmSet{GRPC_COMPRESS_NONE});
|
461
|
+
|
462
|
+
const grpc_compression_options compression_options =
|
463
|
+
channel_->compression_options();
|
464
|
+
const grpc_compression_algorithm compression_algorithm =
|
465
|
+
incoming_compression_algorithm_;
|
466
|
+
if (GPR_UNLIKELY(!CompressionAlgorithmSet::FromUint32(
|
467
|
+
compression_options.enabled_algorithms_bitset)
|
468
|
+
.IsSet(compression_algorithm))) {
|
469
|
+
// check if algorithm is supported by current channel config
|
470
|
+
HandleCompressionAlgorithmDisabled(compression_algorithm);
|
471
|
+
}
|
472
|
+
// GRPC_COMPRESS_NONE is always set.
|
473
|
+
GPR_DEBUG_ASSERT(encodings_accepted_by_peer_.IsSet(GRPC_COMPRESS_NONE));
|
474
|
+
if (GPR_UNLIKELY(!encodings_accepted_by_peer_.IsSet(compression_algorithm))) {
|
475
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
|
476
|
+
HandleCompressionAlgorithmNotAccepted(compression_algorithm);
|
477
|
+
}
|
478
|
+
}
|
479
|
+
}
|
480
|
+
|
481
|
+
void Call::HandleCompressionAlgorithmNotAccepted(
|
482
|
+
grpc_compression_algorithm compression_algorithm) {
|
483
|
+
const char* algo_name = nullptr;
|
484
|
+
grpc_compression_algorithm_name(compression_algorithm, &algo_name);
|
485
|
+
gpr_log(GPR_ERROR,
|
486
|
+
"Compression algorithm ('%s') not present in the "
|
487
|
+
"accepted encodings (%s)",
|
488
|
+
algo_name,
|
489
|
+
std::string(encodings_accepted_by_peer_.ToString()).c_str());
|
490
|
+
}
|
491
|
+
|
492
|
+
void Call::HandleCompressionAlgorithmDisabled(
|
493
|
+
grpc_compression_algorithm compression_algorithm) {
|
494
|
+
const char* algo_name = nullptr;
|
495
|
+
grpc_compression_algorithm_name(compression_algorithm, &algo_name);
|
496
|
+
std::string error_msg =
|
497
|
+
absl::StrFormat("Compression algorithm '%s' is disabled.", algo_name);
|
498
|
+
gpr_log(GPR_ERROR, "%s", error_msg.c_str());
|
499
|
+
CancelWithError(grpc_error_set_int(absl::UnimplementedError(error_msg),
|
500
|
+
StatusIntProperty::kRpcStatus,
|
501
|
+
GRPC_STATUS_UNIMPLEMENTED));
|
502
|
+
}
|
503
|
+
|
504
|
+
///////////////////////////////////////////////////////////////////////////////
|
505
|
+
// FilterStackCall
|
506
|
+
// To be removed once promise conversion is complete
|
507
|
+
|
164
508
|
class FilterStackCall final : public Call {
|
165
509
|
public:
|
166
|
-
~FilterStackCall() {
|
510
|
+
~FilterStackCall() override {
|
167
511
|
for (int i = 0; i < GRPC_CONTEXT_COUNT; ++i) {
|
168
512
|
if (context_[i].destroy) {
|
169
513
|
context_[i].destroy(context_[i].value);
|
@@ -198,7 +542,6 @@ class FilterStackCall final : public Call {
|
|
198
542
|
|
199
543
|
void CancelWithError(grpc_error_handle error) override;
|
200
544
|
void SetCompletionQueue(grpc_completion_queue* cq) override;
|
201
|
-
char* GetPeer() override;
|
202
545
|
grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
|
203
546
|
bool is_notify_tag_closure) override;
|
204
547
|
void ExternalRef() override { ext_ref_.Ref(); }
|
@@ -216,11 +559,6 @@ class FilterStackCall final : public Call {
|
|
216
559
|
return context_[elem].value;
|
217
560
|
}
|
218
561
|
|
219
|
-
grpc_compression_algorithm compression_for_level(
|
220
|
-
grpc_compression_level level) override {
|
221
|
-
return encodings_accepted_by_peer_.CompressionAlgorithmForLevel(level);
|
222
|
-
}
|
223
|
-
|
224
562
|
bool is_trailers_only() const override {
|
225
563
|
bool result = is_trailers_only_;
|
226
564
|
GPR_DEBUG_ASSERT(!result || recv_initial_metadata_.TransportSize() == 0);
|
@@ -238,85 +576,115 @@ class FilterStackCall final : public Call {
|
|
238
576
|
return authority_metadata->as_string_view();
|
239
577
|
}
|
240
578
|
|
241
|
-
grpc_compression_algorithm test_only_compression_algorithm() override {
|
242
|
-
return incoming_compression_algorithm_;
|
243
|
-
}
|
244
|
-
|
245
|
-
uint32_t test_only_message_flags() override {
|
246
|
-
return test_only_last_message_flags_;
|
247
|
-
}
|
248
|
-
|
249
|
-
uint32_t test_only_encodings_accepted_by_peer() override {
|
250
|
-
return encodings_accepted_by_peer_.ToLegacyBitmask();
|
251
|
-
}
|
252
|
-
|
253
579
|
static size_t InitialSizeEstimate() {
|
254
580
|
return sizeof(FilterStackCall) +
|
255
581
|
sizeof(BatchControl) * kMaxConcurrentBatches;
|
256
582
|
}
|
257
583
|
|
258
584
|
private:
|
259
|
-
// The maximum number of concurrent batches possible.
|
260
|
-
// Based upon the maximum number of individually queueable ops in the batch
|
261
|
-
// api:
|
262
|
-
// - initial metadata send
|
263
|
-
// - message send
|
264
|
-
// - status/close send (depending on client/server)
|
265
|
-
// - initial metadata recv
|
266
|
-
// - message recv
|
267
|
-
// - status/close recv (depending on client/server)
|
268
|
-
static constexpr size_t kMaxConcurrentBatches = 6;
|
269
|
-
|
270
585
|
static constexpr gpr_atm kRecvNone = 0;
|
271
586
|
static constexpr gpr_atm kRecvInitialMetadataFirst = 1;
|
272
587
|
|
588
|
+
enum class PendingOp {
|
589
|
+
kRecvMessage,
|
590
|
+
kRecvInitialMetadata,
|
591
|
+
kRecvTrailingMetadata,
|
592
|
+
kSends
|
593
|
+
};
|
594
|
+
static intptr_t PendingOpMask(PendingOp op) {
|
595
|
+
return static_cast<intptr_t>(1) << static_cast<intptr_t>(op);
|
596
|
+
}
|
597
|
+
static std::string PendingOpString(intptr_t pending_ops) {
|
598
|
+
std::vector<absl::string_view> pending_op_strings;
|
599
|
+
if (pending_ops & PendingOpMask(PendingOp::kRecvMessage)) {
|
600
|
+
pending_op_strings.push_back("kRecvMessage");
|
601
|
+
}
|
602
|
+
if (pending_ops & PendingOpMask(PendingOp::kRecvInitialMetadata)) {
|
603
|
+
pending_op_strings.push_back("kRecvInitialMetadata");
|
604
|
+
}
|
605
|
+
if (pending_ops & PendingOpMask(PendingOp::kRecvTrailingMetadata)) {
|
606
|
+
pending_op_strings.push_back("kRecvTrailingMetadata");
|
607
|
+
}
|
608
|
+
if (pending_ops & PendingOpMask(PendingOp::kSends)) {
|
609
|
+
pending_op_strings.push_back("kSends");
|
610
|
+
}
|
611
|
+
return absl::StrCat("{", absl::StrJoin(pending_op_strings, ","), "}");
|
612
|
+
}
|
273
613
|
struct BatchControl {
|
274
614
|
FilterStackCall* call_ = nullptr;
|
615
|
+
CallTracerAnnotationInterface* call_tracer_ = nullptr;
|
275
616
|
grpc_transport_stream_op_batch op_;
|
276
|
-
|
277
|
-
|
278
|
-
|
617
|
+
// Share memory for cq_completion and notify_tag as they are never needed
|
618
|
+
// simultaneously. Each byte used in this data structure count as six bytes
|
619
|
+
// per call, so any savings we can make are worthwhile,
|
279
620
|
|
280
|
-
|
281
|
-
|
282
|
-
|
621
|
+
// We use notify_tag to determine whether or not to send notification to the
|
622
|
+
// completion queue. Once we've made that determination, we can reuse the
|
623
|
+
// memory for cq_completion.
|
283
624
|
union {
|
284
625
|
grpc_cq_completion cq_completion;
|
285
626
|
struct {
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
627
|
+
// Any given op indicates completion by either (a) calling a closure or
|
628
|
+
// (b) sending a notification on the call's completion queue. If
|
629
|
+
// \a is_closure is true, \a tag indicates a closure to be invoked;
|
630
|
+
// otherwise, \a tag indicates the tag to be used in the notification to
|
631
|
+
// be sent to the completion queue.
|
291
632
|
void* tag;
|
292
633
|
bool is_closure;
|
293
634
|
} notify_tag;
|
294
635
|
} completion_data_;
|
295
636
|
grpc_closure start_batch_;
|
296
637
|
grpc_closure finish_batch_;
|
297
|
-
std::atomic<intptr_t>
|
638
|
+
std::atomic<intptr_t> ops_pending_{0};
|
298
639
|
AtomicError batch_error_;
|
299
|
-
void
|
300
|
-
|
640
|
+
void set_pending_ops(uintptr_t ops) {
|
641
|
+
ops_pending_.store(ops, std::memory_order_release);
|
301
642
|
}
|
302
|
-
bool completed_batch_step() {
|
303
|
-
|
643
|
+
bool completed_batch_step(PendingOp op) {
|
644
|
+
auto mask = PendingOpMask(op);
|
645
|
+
// Acquire call tracer before ops_pending_.fetch_sub to avoid races with
|
646
|
+
// call_ being set to nullptr in PostCompletion method. Store the
|
647
|
+
// call_tracer_ and call_ variables locally as well because they could be
|
648
|
+
// modified by another thread after the fetch_sub operation.
|
649
|
+
CallTracerAnnotationInterface* call_tracer = call_tracer_;
|
650
|
+
FilterStackCall* call = call_;
|
651
|
+
bool is_call_trace_enabled = grpc_call_trace.enabled();
|
652
|
+
bool is_call_ops_annotate_enabled =
|
653
|
+
(IsTraceRecordCallopsEnabled() && call_tracer != nullptr);
|
654
|
+
if (is_call_ops_annotate_enabled) {
|
655
|
+
call->InternalRef("Call ops annotate");
|
656
|
+
}
|
657
|
+
auto r = ops_pending_.fetch_sub(mask, std::memory_order_acq_rel);
|
658
|
+
if (is_call_trace_enabled || is_call_ops_annotate_enabled) {
|
659
|
+
std::string trace_string = absl::StrFormat(
|
660
|
+
"BATCH:%p COMPLETE:%s REMAINING:%s (tag:%p)", this,
|
661
|
+
PendingOpString(mask).c_str(), PendingOpString(r & ~mask).c_str(),
|
662
|
+
completion_data_.notify_tag.tag);
|
663
|
+
if (is_call_trace_enabled) {
|
664
|
+
gpr_log(GPR_DEBUG, "%s", trace_string.c_str());
|
665
|
+
}
|
666
|
+
if (is_call_ops_annotate_enabled) {
|
667
|
+
call_tracer->RecordAnnotation(trace_string);
|
668
|
+
call->InternalUnref("Call ops annotate");
|
669
|
+
}
|
670
|
+
}
|
671
|
+
GPR_ASSERT((r & mask) != 0);
|
672
|
+
return r == mask;
|
304
673
|
}
|
305
674
|
|
306
675
|
void PostCompletion();
|
307
|
-
void FinishStep();
|
676
|
+
void FinishStep(PendingOp op);
|
308
677
|
void ProcessDataAfterMetadata();
|
309
678
|
void ReceivingStreamReady(grpc_error_handle error);
|
310
|
-
void ValidateFilteredMetadata();
|
311
679
|
void ReceivingInitialMetadataReady(grpc_error_handle error);
|
312
680
|
void ReceivingTrailingMetadataReady(grpc_error_handle error);
|
313
681
|
void FinishBatch(grpc_error_handle error);
|
314
682
|
};
|
315
683
|
|
316
684
|
FilterStackCall(Arena* arena, const grpc_call_create_args& args)
|
317
|
-
: Call(arena, args.server_transport_data == nullptr, args.send_deadline
|
685
|
+
: Call(arena, args.server_transport_data == nullptr, args.send_deadline,
|
686
|
+
args.channel->Ref()),
|
318
687
|
cq_(args.cq),
|
319
|
-
channel_(args.channel->Ref()),
|
320
688
|
stream_op_payload_(context_) {}
|
321
689
|
|
322
690
|
static void ReleaseCall(void* call, grpc_error_handle);
|
@@ -332,10 +700,6 @@ class FilterStackCall final : public Call {
|
|
332
700
|
grpc_closure* start_batch_closure);
|
333
701
|
void SetFinalStatus(grpc_error_handle error);
|
334
702
|
BatchControl* ReuseOrAllocateBatchControl(const grpc_op* ops);
|
335
|
-
void HandleCompressionAlgorithmDisabled(
|
336
|
-
grpc_compression_algorithm compression_algorithm) GPR_ATTRIBUTE_NOINLINE;
|
337
|
-
void HandleCompressionAlgorithmNotAccepted(
|
338
|
-
grpc_compression_algorithm compression_algorithm) GPR_ATTRIBUTE_NOINLINE;
|
339
703
|
bool PrepareApplicationMetadata(size_t count, grpc_metadata* metadata,
|
340
704
|
bool is_trailing);
|
341
705
|
void PublishAppMetadata(grpc_metadata_batch* b, bool is_trailing);
|
@@ -347,14 +711,12 @@ class FilterStackCall final : public Call {
|
|
347
711
|
CallCombiner call_combiner_;
|
348
712
|
grpc_completion_queue* cq_;
|
349
713
|
grpc_polling_entity pollent_;
|
350
|
-
RefCountedPtr<Channel> channel_;
|
351
|
-
gpr_cycle_counter start_time_ = gpr_get_cycle_counter();
|
352
714
|
|
353
|
-
|
715
|
+
/// has grpc_call_unref been called
|
354
716
|
bool destroy_called_ = false;
|
355
717
|
// Trailers-only response status
|
356
718
|
bool is_trailers_only_ = false;
|
357
|
-
|
719
|
+
/// which ops are in-flight
|
358
720
|
bool sent_initial_metadata_ = false;
|
359
721
|
bool sending_message_ = false;
|
360
722
|
bool sent_final_op_ = false;
|
@@ -366,31 +728,21 @@ class FilterStackCall final : public Call {
|
|
366
728
|
BatchControl* active_batches_[kMaxConcurrentBatches] = {};
|
367
729
|
grpc_transport_stream_op_batch_payload stream_op_payload_;
|
368
730
|
|
369
|
-
|
731
|
+
// first idx: is_receiving, second idx: is_trailing
|
370
732
|
grpc_metadata_batch send_initial_metadata_{arena()};
|
371
733
|
grpc_metadata_batch send_trailing_metadata_{arena()};
|
372
734
|
grpc_metadata_batch recv_initial_metadata_{arena()};
|
373
735
|
grpc_metadata_batch recv_trailing_metadata_{arena()};
|
374
736
|
|
375
|
-
|
376
|
-
|
737
|
+
// Buffered read metadata waiting to be returned to the application.
|
738
|
+
// Element 0 is initial metadata, element 1 is trailing metadata.
|
377
739
|
grpc_metadata_array* buffered_metadata_[2] = {};
|
378
740
|
|
379
|
-
//
|
380
|
-
|
381
|
-
|
382
|
-
/* Call data useful used for reporting. Only valid after the call has
|
383
|
-
* completed */
|
741
|
+
// Call data useful used for reporting. Only valid after the call has
|
742
|
+
// completed
|
384
743
|
grpc_call_final_info final_info_;
|
385
744
|
|
386
|
-
|
387
|
-
grpc_compression_algorithm incoming_compression_algorithm_ =
|
388
|
-
GRPC_COMPRESS_NONE;
|
389
|
-
/* Supported encodings (compression algorithms), a bitset.
|
390
|
-
* Always support no compression. */
|
391
|
-
CompressionAlgorithmSet encodings_accepted_by_peer_{GRPC_COMPRESS_NONE};
|
392
|
-
|
393
|
-
/* Contexts for various subsystems (security, tracing, ...). */
|
745
|
+
// Contexts for various subsystems (security, tracing, ...).
|
394
746
|
grpc_call_context_element context_[GRPC_CONTEXT_COUNT] = {};
|
395
747
|
|
396
748
|
SliceBuffer send_slice_buffer_;
|
@@ -403,7 +755,6 @@ class FilterStackCall final : public Call {
|
|
403
755
|
grpc_closure receiving_stream_ready_;
|
404
756
|
grpc_closure receiving_initial_metadata_ready_;
|
405
757
|
grpc_closure receiving_trailing_metadata_ready_;
|
406
|
-
uint32_t test_only_last_message_flags_ = 0;
|
407
758
|
// Status about operation of call
|
408
759
|
bool sent_server_trailing_metadata_ = false;
|
409
760
|
gpr_atm cancelled_with_error_ = 0;
|
@@ -424,114 +775,44 @@ class FilterStackCall final : public Call {
|
|
424
775
|
} final_op_;
|
425
776
|
AtomicError status_error_;
|
426
777
|
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
778
|
+
// recv_state can contain one of the following values:
|
779
|
+
// RECV_NONE : : no initial metadata and messages received
|
780
|
+
// RECV_INITIAL_METADATA_FIRST : received initial metadata first
|
781
|
+
// a batch_control* : received messages first
|
782
|
+
|
783
|
+
// +------1------RECV_NONE------3-----+
|
784
|
+
// | |
|
785
|
+
// | |
|
786
|
+
// v v
|
787
|
+
// RECV_INITIAL_METADATA_FIRST receiving_stream_ready_bctlp
|
788
|
+
// | ^ | ^
|
789
|
+
// | | | |
|
790
|
+
// +-----2-----+ +-----4-----+
|
791
|
+
|
792
|
+
// For 1, 4: See receiving_initial_metadata_ready() function
|
793
|
+
// For 2, 3: See receiving_stream_ready() function
|
443
794
|
gpr_atm recv_state_ = 0;
|
444
795
|
};
|
445
796
|
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
p = expected;
|
456
|
-
}
|
457
|
-
}
|
458
|
-
return p;
|
459
|
-
}
|
460
|
-
|
461
|
-
Call::ParentCall* Call::parent_call() {
|
462
|
-
return parent_call_.load(std::memory_order_acquire);
|
463
|
-
}
|
464
|
-
|
465
|
-
absl::Status Call::InitParent(Call* parent, uint32_t propagation_mask) {
|
466
|
-
child_ = arena()->New<ChildCall>(parent);
|
467
|
-
|
468
|
-
parent->InternalRef("child");
|
469
|
-
GPR_ASSERT(is_client_);
|
470
|
-
GPR_ASSERT(!parent->is_client_);
|
471
|
-
|
472
|
-
if (propagation_mask & GRPC_PROPAGATE_DEADLINE) {
|
473
|
-
send_deadline_ = std::min(send_deadline_, parent->send_deadline_);
|
474
|
-
}
|
475
|
-
/* for now GRPC_PROPAGATE_TRACING_CONTEXT *MUST* be passed with
|
476
|
-
* GRPC_PROPAGATE_STATS_CONTEXT */
|
477
|
-
/* TODO(ctiller): This should change to use the appropriate census start_op
|
478
|
-
* call. */
|
479
|
-
if (propagation_mask & GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT) {
|
480
|
-
if (0 == (propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT)) {
|
481
|
-
return absl::UnknownError(
|
482
|
-
"Census tracing propagation requested without Census context "
|
483
|
-
"propagation");
|
484
|
-
}
|
485
|
-
ContextSet(GRPC_CONTEXT_TRACING, parent->ContextGet(GRPC_CONTEXT_TRACING),
|
486
|
-
nullptr);
|
487
|
-
} else if (propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT) {
|
488
|
-
return absl::UnknownError(
|
489
|
-
"Census context propagation requested without Census tracing "
|
490
|
-
"propagation");
|
491
|
-
}
|
492
|
-
if (propagation_mask & GRPC_PROPAGATE_CANCELLATION) {
|
493
|
-
cancellation_is_inherited_ = true;
|
494
|
-
}
|
495
|
-
return absl::OkStatus();
|
496
|
-
}
|
497
|
-
|
498
|
-
void Call::PublishToParent(Call* parent) {
|
499
|
-
ChildCall* cc = child_;
|
500
|
-
ParentCall* pc = parent->GetOrCreateParentCall();
|
501
|
-
MutexLock lock(&pc->child_list_mu);
|
502
|
-
if (pc->first_child == nullptr) {
|
503
|
-
pc->first_child = this;
|
504
|
-
cc->sibling_next = cc->sibling_prev = this;
|
505
|
-
} else {
|
506
|
-
cc->sibling_next = pc->first_child;
|
507
|
-
cc->sibling_prev = pc->first_child->child_->sibling_prev;
|
508
|
-
cc->sibling_next->child_->sibling_prev =
|
509
|
-
cc->sibling_prev->child_->sibling_next = this;
|
510
|
-
}
|
511
|
-
if (parent->Completed()) {
|
512
|
-
CancelWithError(GRPC_ERROR_CANCELLED);
|
513
|
-
}
|
514
|
-
}
|
515
|
-
|
516
|
-
grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
|
517
|
-
grpc_call** out_call) {
|
518
|
-
Channel* channel = args->channel.get();
|
519
|
-
|
520
|
-
auto add_init_error = [](grpc_error_handle* composite,
|
521
|
-
grpc_error_handle new_err) {
|
522
|
-
if (GRPC_ERROR_IS_NONE(new_err)) return;
|
523
|
-
if (GRPC_ERROR_IS_NONE(*composite)) {
|
524
|
-
*composite = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Call creation failed");
|
797
|
+
grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
|
798
|
+
grpc_call** out_call) {
|
799
|
+
Channel* channel = args->channel.get();
|
800
|
+
|
801
|
+
auto add_init_error = [](grpc_error_handle* composite,
|
802
|
+
grpc_error_handle new_err) {
|
803
|
+
if (new_err.ok()) return;
|
804
|
+
if (composite->ok()) {
|
805
|
+
*composite = GRPC_ERROR_CREATE("Call creation failed");
|
525
806
|
}
|
526
807
|
*composite = grpc_error_add_child(*composite, new_err);
|
527
808
|
};
|
528
809
|
|
529
810
|
Arena* arena;
|
530
811
|
FilterStackCall* call;
|
531
|
-
grpc_error_handle error
|
812
|
+
grpc_error_handle error;
|
532
813
|
grpc_channel_stack* channel_stack = channel->channel_stack();
|
533
814
|
size_t initial_size = channel->CallSizeEstimate();
|
534
|
-
|
815
|
+
global_stats().IncrementCallInitialSize(initial_size);
|
535
816
|
size_t call_alloc_size =
|
536
817
|
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(FilterStackCall)) +
|
537
818
|
channel_stack->call_stack_size;
|
@@ -548,8 +829,8 @@ grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
|
|
548
829
|
call->final_op_.client.status_details = nullptr;
|
549
830
|
call->final_op_.client.status = nullptr;
|
550
831
|
call->final_op_.client.error_string = nullptr;
|
551
|
-
|
552
|
-
path =
|
832
|
+
global_stats().IncrementClientCallsCreated();
|
833
|
+
path = CSliceRef(args->path->c_slice());
|
553
834
|
call->send_initial_metadata_.Set(HttpPathMetadata(),
|
554
835
|
std::move(*args->path));
|
555
836
|
if (args->authority.has_value()) {
|
@@ -557,9 +838,29 @@ grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
|
|
557
838
|
std::move(*args->authority));
|
558
839
|
}
|
559
840
|
} else {
|
560
|
-
|
841
|
+
global_stats().IncrementServerCallsCreated();
|
561
842
|
call->final_op_.server.cancelled = nullptr;
|
562
843
|
call->final_op_.server.core_server = args->server;
|
844
|
+
// TODO(yashykt): In the future, we want to also enable stats and trace
|
845
|
+
// collecting from when the call is created at the transport. The idea is
|
846
|
+
// that the transport would create the call tracer and pass it in as part of
|
847
|
+
// the metadata.
|
848
|
+
auto* server_call_tracer_factory = ServerCallTracerFactory::Get(
|
849
|
+
args->server != nullptr ? args->server->channel_args() : ChannelArgs());
|
850
|
+
if (server_call_tracer_factory != nullptr) {
|
851
|
+
auto* server_call_tracer =
|
852
|
+
server_call_tracer_factory->CreateNewServerCallTracer(arena);
|
853
|
+
if (server_call_tracer != nullptr) {
|
854
|
+
// Note that we are setting both
|
855
|
+
// GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE and
|
856
|
+
// GRPC_CONTEXT_CALL_TRACER as a matter of convenience. In the future
|
857
|
+
// promise-based world, we would just a single tracer object for each
|
858
|
+
// stack (call, subchannel_call, server_call.)
|
859
|
+
call->ContextSet(GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE,
|
860
|
+
server_call_tracer, nullptr);
|
861
|
+
call->ContextSet(GRPC_CONTEXT_CALL_TRACER, server_call_tracer, nullptr);
|
862
|
+
}
|
863
|
+
}
|
563
864
|
}
|
564
865
|
|
565
866
|
Call* parent = Call::FromC(args->parent);
|
@@ -567,11 +868,11 @@ grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
|
|
567
868
|
add_init_error(&error, absl_status_to_grpc_error(call->InitParent(
|
568
869
|
parent, args->propagation_mask)));
|
569
870
|
}
|
570
|
-
|
871
|
+
// initial refcount dropped by grpc_call_unref
|
571
872
|
grpc_call_element_args call_args = {
|
572
873
|
call->call_stack(), args->server_transport_data,
|
573
874
|
call->context_, path,
|
574
|
-
call->
|
875
|
+
call->start_time(), call->send_deadline(),
|
575
876
|
call->arena(), &call->call_combiner_};
|
576
877
|
add_init_error(&error, grpc_call_stack_init(channel_stack, 1, DestroyCall,
|
577
878
|
call, &call_args));
|
@@ -580,8 +881,8 @@ grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
|
|
580
881
|
call->PublishToParent(parent);
|
581
882
|
}
|
582
883
|
|
583
|
-
if (!
|
584
|
-
call->CancelWithError(
|
884
|
+
if (!error.ok()) {
|
885
|
+
call->CancelWithError(error);
|
585
886
|
}
|
586
887
|
if (args->cq != nullptr) {
|
587
888
|
GPR_ASSERT(args->pollset_set_alternative == nullptr &&
|
@@ -613,7 +914,7 @@ grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
|
|
613
914
|
}
|
614
915
|
}
|
615
916
|
|
616
|
-
|
917
|
+
CSliceUnref(path);
|
617
918
|
|
618
919
|
return error;
|
619
920
|
}
|
@@ -622,8 +923,7 @@ void FilterStackCall::SetCompletionQueue(grpc_completion_queue* cq) {
|
|
622
923
|
GPR_ASSERT(cq);
|
623
924
|
|
624
925
|
if (grpc_polling_entity_pollset_set(&pollent_) != nullptr) {
|
625
|
-
|
626
|
-
abort();
|
926
|
+
Crash("A pollset_set is already registered for this call.");
|
627
927
|
}
|
628
928
|
cq_ = cq;
|
629
929
|
GRPC_CQ_INTERNAL_REF(cq, "bind");
|
@@ -632,11 +932,7 @@ void FilterStackCall::SetCompletionQueue(grpc_completion_queue* cq) {
|
|
632
932
|
}
|
633
933
|
|
634
934
|
void FilterStackCall::ReleaseCall(void* call, grpc_error_handle /*error*/) {
|
635
|
-
|
636
|
-
RefCountedPtr<Channel> channel = std::move(c->channel_);
|
637
|
-
Arena* arena = c->arena();
|
638
|
-
c->~FilterStackCall();
|
639
|
-
channel->UpdateCallSizeEstimate(arena->Destroy());
|
935
|
+
static_cast<FilterStackCall*>(call)->DeleteThis();
|
640
936
|
}
|
641
937
|
|
642
938
|
void FilterStackCall::DestroyCall(void* call, grpc_error_handle /*error*/) {
|
@@ -656,33 +952,14 @@ void FilterStackCall::DestroyCall(void* call, grpc_error_handle /*error*/) {
|
|
656
952
|
grpc_error_get_status(status_error, c->send_deadline(),
|
657
953
|
&c->final_info_.final_status, nullptr, nullptr,
|
658
954
|
&(c->final_info_.error_string));
|
659
|
-
c->status_error_.set(
|
955
|
+
c->status_error_.set(absl::OkStatus());
|
660
956
|
c->final_info_.stats.latency =
|
661
|
-
gpr_cycle_counter_sub(gpr_get_cycle_counter(), c->
|
957
|
+
gpr_cycle_counter_sub(gpr_get_cycle_counter(), c->start_time());
|
662
958
|
grpc_call_stack_destroy(c->call_stack(), &c->final_info_,
|
663
959
|
GRPC_CLOSURE_INIT(&c->release_call_, ReleaseCall, c,
|
664
960
|
grpc_schedule_on_exec_ctx));
|
665
961
|
}
|
666
962
|
|
667
|
-
void Call::MaybeUnpublishFromParent() {
|
668
|
-
ChildCall* cc = child_;
|
669
|
-
if (cc == nullptr) return;
|
670
|
-
|
671
|
-
ParentCall* pc = cc->parent->parent_call();
|
672
|
-
{
|
673
|
-
MutexLock lock(&pc->child_list_mu);
|
674
|
-
if (this == pc->first_child) {
|
675
|
-
pc->first_child = cc->sibling_next;
|
676
|
-
if (this == pc->first_child) {
|
677
|
-
pc->first_child = nullptr;
|
678
|
-
}
|
679
|
-
}
|
680
|
-
cc->sibling_prev->child_->sibling_next = cc->sibling_next;
|
681
|
-
cc->sibling_next->child_->sibling_prev = cc->sibling_prev;
|
682
|
-
}
|
683
|
-
cc->parent->InternalUnref("child");
|
684
|
-
}
|
685
|
-
|
686
963
|
void FilterStackCall::ExternalUnref() {
|
687
964
|
if (GPR_LIKELY(!ext_ref_.Unref())) return;
|
688
965
|
|
@@ -697,7 +974,7 @@ void FilterStackCall::ExternalUnref() {
|
|
697
974
|
destroy_called_ = true;
|
698
975
|
bool cancel = gpr_atm_acq_load(&received_final_op_atm_) == 0;
|
699
976
|
if (cancel) {
|
700
|
-
CancelWithError(
|
977
|
+
CancelWithError(absl::CancelledError());
|
701
978
|
} else {
|
702
979
|
// Unset the call combiner cancellation closure. This has the
|
703
980
|
// effect of scheduling the previously set cancellation closure, if
|
@@ -708,14 +985,6 @@ void FilterStackCall::ExternalUnref() {
|
|
708
985
|
InternalUnref("destroy");
|
709
986
|
}
|
710
987
|
|
711
|
-
char* FilterStackCall::GetPeer() {
|
712
|
-
char* peer_string = reinterpret_cast<char*>(gpr_atm_acq_load(&peer_string_));
|
713
|
-
if (peer_string != nullptr) return gpr_strdup(peer_string);
|
714
|
-
peer_string = grpc_channel_get_target(channel_->c_ptr());
|
715
|
-
if (peer_string != nullptr) return peer_string;
|
716
|
-
return gpr_strdup("unknown");
|
717
|
-
}
|
718
|
-
|
719
988
|
// start_batch_closure points to a caller-allocated closure to be used
|
720
989
|
// for entering the call combiner.
|
721
990
|
void FilterStackCall::ExecuteBatch(grpc_transport_stream_op_batch* batch,
|
@@ -735,7 +1004,7 @@ void FilterStackCall::ExecuteBatch(grpc_transport_stream_op_batch* batch,
|
|
735
1004
|
GRPC_CLOSURE_INIT(start_batch_closure, execute_batch_in_call_combiner, batch,
|
736
1005
|
grpc_schedule_on_exec_ctx);
|
737
1006
|
GRPC_CALL_COMBINER_START(call_combiner(), start_batch_closure,
|
738
|
-
|
1007
|
+
absl::OkStatus(), "executing batch");
|
739
1008
|
}
|
740
1009
|
|
741
1010
|
namespace {
|
@@ -758,16 +1027,15 @@ static void done_termination(void* arg, grpc_error_handle /*error*/) {
|
|
758
1027
|
|
759
1028
|
void FilterStackCall::CancelWithError(grpc_error_handle error) {
|
760
1029
|
if (!gpr_atm_rel_cas(&cancelled_with_error_, 0, 1)) {
|
761
|
-
GRPC_ERROR_UNREF(error);
|
762
1030
|
return;
|
763
1031
|
}
|
764
|
-
|
1032
|
+
ClearPeerString();
|
765
1033
|
InternalRef("termination");
|
766
1034
|
// Inform the call combiner of the cancellation, so that it can cancel
|
767
1035
|
// any in-flight asynchronous actions that may be holding the call
|
768
1036
|
// combiner. This ensures that the cancel_stream batch can be sent
|
769
1037
|
// down the filter stack in a timely manner.
|
770
|
-
call_combiner_.Cancel(
|
1038
|
+
call_combiner_.Cancel(error);
|
771
1039
|
CancelState* state = new CancelState;
|
772
1040
|
state->call = this;
|
773
1041
|
GRPC_CLOSURE_INIT(&state->finish_batch, done_termination, state,
|
@@ -779,19 +1047,10 @@ void FilterStackCall::CancelWithError(grpc_error_handle error) {
|
|
779
1047
|
ExecuteBatch(op, &state->start_batch);
|
780
1048
|
}
|
781
1049
|
|
782
|
-
void Call::CancelWithStatus(grpc_status_code status, const char* description) {
|
783
|
-
// copying 'description' is needed to ensure the grpc_call_cancel_with_status
|
784
|
-
// guarantee that can be short-lived.
|
785
|
-
CancelWithError(grpc_error_set_int(
|
786
|
-
grpc_error_set_str(GRPC_ERROR_CREATE_FROM_COPIED_STRING(description),
|
787
|
-
GRPC_ERROR_STR_GRPC_MESSAGE, description),
|
788
|
-
GRPC_ERROR_INT_GRPC_STATUS, status));
|
789
|
-
}
|
790
|
-
|
791
1050
|
void FilterStackCall::SetFinalStatus(grpc_error_handle error) {
|
792
1051
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_call_error_trace)) {
|
793
|
-
gpr_log(GPR_DEBUG, "set_final_status %s", is_client() ? "CLI" : "SVR"
|
794
|
-
|
1052
|
+
gpr_log(GPR_DEBUG, "set_final_status %s %s", is_client() ? "CLI" : "SVR",
|
1053
|
+
StatusToString(error).c_str());
|
795
1054
|
}
|
796
1055
|
if (is_client()) {
|
797
1056
|
std::string status_details;
|
@@ -801,8 +1060,7 @@ void FilterStackCall::SetFinalStatus(grpc_error_handle error) {
|
|
801
1060
|
*final_op_.client.status_details =
|
802
1061
|
grpc_slice_from_cpp_string(std::move(status_details));
|
803
1062
|
status_error_.set(error);
|
804
|
-
|
805
|
-
channelz::ChannelNode* channelz_channel = channel_->channelz_node();
|
1063
|
+
channelz::ChannelNode* channelz_channel = channel()->channelz_node();
|
806
1064
|
if (channelz_channel != nullptr) {
|
807
1065
|
if (*final_op_.client.status != GRPC_STATUS_OK) {
|
808
1066
|
channelz_channel->RecordCallFailed();
|
@@ -812,7 +1070,7 @@ void FilterStackCall::SetFinalStatus(grpc_error_handle error) {
|
|
812
1070
|
}
|
813
1071
|
} else {
|
814
1072
|
*final_op_.server.cancelled =
|
815
|
-
!
|
1073
|
+
!error.ok() || !sent_server_trailing_metadata_;
|
816
1074
|
channelz::ServerNode* channelz_node =
|
817
1075
|
final_op_.server.core_server->channelz_node();
|
818
1076
|
if (channelz_node != nullptr) {
|
@@ -822,7 +1080,6 @@ void FilterStackCall::SetFinalStatus(grpc_error_handle error) {
|
|
822
1080
|
channelz_node->RecordCallSucceeded();
|
823
1081
|
}
|
824
1082
|
}
|
825
|
-
GRPC_ERROR_UNREF(error);
|
826
1083
|
}
|
827
1084
|
}
|
828
1085
|
|
@@ -848,8 +1105,7 @@ bool FilterStackCall::PrepareApplicationMetadata(size_t count,
|
|
848
1105
|
// Filter "content-length metadata"
|
849
1106
|
continue;
|
850
1107
|
}
|
851
|
-
batch->Append(StringViewFromSlice(md->key),
|
852
|
-
Slice(grpc_slice_ref_internal(md->value)),
|
1108
|
+
batch->Append(StringViewFromSlice(md->key), Slice(CSliceRef(md->value)),
|
853
1109
|
[md](absl::string_view error, const Slice& value) {
|
854
1110
|
gpr_log(GPR_DEBUG, "Append error: %s",
|
855
1111
|
absl::StrCat("key=", StringViewFromSlice(md->key),
|
@@ -935,49 +1191,43 @@ void FilterStackCall::PublishAppMetadata(grpc_metadata_batch* b,
|
|
935
1191
|
}
|
936
1192
|
|
937
1193
|
void FilterStackCall::RecvInitialFilter(grpc_metadata_batch* b) {
|
938
|
-
|
939
|
-
b->Take(GrpcEncodingMetadata()).value_or(GRPC_COMPRESS_NONE);
|
940
|
-
encodings_accepted_by_peer_ =
|
941
|
-
b->Take(GrpcAcceptEncodingMetadata())
|
942
|
-
.value_or(CompressionAlgorithmSet{GRPC_COMPRESS_NONE});
|
1194
|
+
ProcessIncomingInitialMetadata(*b);
|
943
1195
|
PublishAppMetadata(b, false);
|
944
1196
|
}
|
945
1197
|
|
946
1198
|
void FilterStackCall::RecvTrailingFilter(grpc_metadata_batch* b,
|
947
1199
|
grpc_error_handle batch_error) {
|
948
|
-
if (!
|
1200
|
+
if (!batch_error.ok()) {
|
949
1201
|
SetFinalStatus(batch_error);
|
950
1202
|
} else {
|
951
1203
|
absl::optional<grpc_status_code> grpc_status =
|
952
1204
|
b->Take(GrpcStatusMetadata());
|
953
1205
|
if (grpc_status.has_value()) {
|
954
1206
|
grpc_status_code status_code = *grpc_status;
|
955
|
-
grpc_error_handle error
|
1207
|
+
grpc_error_handle error;
|
956
1208
|
if (status_code != GRPC_STATUS_OK) {
|
957
|
-
|
1209
|
+
Slice peer = GetPeerString();
|
958
1210
|
error = grpc_error_set_int(
|
959
|
-
|
960
|
-
|
961
|
-
|
962
|
-
gpr_free(peer);
|
1211
|
+
GRPC_ERROR_CREATE(absl::StrCat("Error received from peer ",
|
1212
|
+
peer.as_string_view())),
|
1213
|
+
StatusIntProperty::kRpcStatus, static_cast<intptr_t>(status_code));
|
963
1214
|
}
|
964
1215
|
auto grpc_message = b->Take(GrpcMessageMetadata());
|
965
1216
|
if (grpc_message.has_value()) {
|
966
|
-
error = grpc_error_set_str(error,
|
1217
|
+
error = grpc_error_set_str(error, StatusStrProperty::kGrpcMessage,
|
967
1218
|
grpc_message->as_string_view());
|
968
|
-
} else if (!
|
969
|
-
error = grpc_error_set_str(error,
|
1219
|
+
} else if (!error.ok()) {
|
1220
|
+
error = grpc_error_set_str(error, StatusStrProperty::kGrpcMessage, "");
|
970
1221
|
}
|
971
|
-
SetFinalStatus(
|
972
|
-
GRPC_ERROR_UNREF(error);
|
1222
|
+
SetFinalStatus(error);
|
973
1223
|
} else if (!is_client()) {
|
974
|
-
SetFinalStatus(
|
1224
|
+
SetFinalStatus(absl::OkStatus());
|
975
1225
|
} else {
|
976
1226
|
gpr_log(GPR_DEBUG,
|
977
1227
|
"Received trailing metadata with no error and no status");
|
978
|
-
SetFinalStatus(grpc_error_set_int(
|
979
|
-
|
980
|
-
|
1228
|
+
SetFinalStatus(grpc_error_set_int(GRPC_ERROR_CREATE("No status received"),
|
1229
|
+
StatusIntProperty::kRpcStatus,
|
1230
|
+
GRPC_STATUS_UNKNOWN));
|
981
1231
|
}
|
982
1232
|
}
|
983
1233
|
PublishAppMetadata(b, true);
|
@@ -985,7 +1235,7 @@ void FilterStackCall::RecvTrailingFilter(grpc_metadata_batch* b,
|
|
985
1235
|
|
986
1236
|
namespace {
|
987
1237
|
bool AreWriteFlagsValid(uint32_t flags) {
|
988
|
-
|
1238
|
+
// check that only bits in GRPC_WRITE_(INTERNAL?)_USED_MASK are set
|
989
1239
|
const uint32_t allowed_write_positions =
|
990
1240
|
(GRPC_WRITE_USED_MASK | GRPC_WRITE_INTERNAL_USED_MASK);
|
991
1241
|
const uint32_t invalid_positions = ~allowed_write_positions;
|
@@ -993,7 +1243,7 @@ bool AreWriteFlagsValid(uint32_t flags) {
|
|
993
1243
|
}
|
994
1244
|
|
995
1245
|
bool AreInitialMetadataFlagsValid(uint32_t flags) {
|
996
|
-
|
1246
|
+
// check that only bits in GRPC_WRITE_(INTERNAL?)_USED_MASK are set
|
997
1247
|
uint32_t invalid_positions = ~GRPC_INITIAL_METADATA_USED_MASK;
|
998
1248
|
return !(flags & invalid_positions);
|
999
1249
|
}
|
@@ -1037,42 +1287,28 @@ FilterStackCall::BatchControl* FilterStackCall::ReuseOrAllocateBatchControl(
|
|
1037
1287
|
*pslot = bctl;
|
1038
1288
|
}
|
1039
1289
|
bctl->call_ = this;
|
1290
|
+
bctl->call_tracer_ = static_cast<CallTracerAnnotationInterface*>(
|
1291
|
+
ContextGet(GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE));
|
1040
1292
|
bctl->op_.payload = &stream_op_payload_;
|
1041
1293
|
return bctl;
|
1042
1294
|
}
|
1043
1295
|
|
1044
|
-
void Call::PropagateCancellationToChildren() {
|
1045
|
-
ParentCall* pc = parent_call();
|
1046
|
-
if (pc != nullptr) {
|
1047
|
-
Call* child;
|
1048
|
-
MutexLock lock(&pc->child_list_mu);
|
1049
|
-
child = pc->first_child;
|
1050
|
-
if (child != nullptr) {
|
1051
|
-
do {
|
1052
|
-
Call* next_child_call = child->child_->sibling_next;
|
1053
|
-
if (child->cancellation_is_inherited_) {
|
1054
|
-
child->InternalRef("propagate_cancel");
|
1055
|
-
child->CancelWithError(GRPC_ERROR_CANCELLED);
|
1056
|
-
child->InternalUnref("propagate_cancel");
|
1057
|
-
}
|
1058
|
-
child = next_child_call;
|
1059
|
-
} while (child != pc->first_child);
|
1060
|
-
}
|
1061
|
-
}
|
1062
|
-
}
|
1063
|
-
|
1064
1296
|
void FilterStackCall::BatchControl::PostCompletion() {
|
1065
1297
|
FilterStackCall* call = call_;
|
1066
|
-
grpc_error_handle error =
|
1298
|
+
grpc_error_handle error = batch_error_.get();
|
1299
|
+
if (grpc_call_trace.enabled()) {
|
1300
|
+
gpr_log(GPR_DEBUG, "tag:%p batch_error=%s op:%s",
|
1301
|
+
completion_data_.notify_tag.tag, error.ToString().c_str(),
|
1302
|
+
grpc_transport_stream_op_batch_string(&op_, false).c_str());
|
1303
|
+
}
|
1067
1304
|
|
1068
1305
|
if (op_.send_initial_metadata) {
|
1069
1306
|
call->send_initial_metadata_.Clear();
|
1070
1307
|
}
|
1071
1308
|
if (op_.send_message) {
|
1072
|
-
if (op_.payload->send_message.stream_write_closed &&
|
1073
|
-
GRPC_ERROR_IS_NONE(error)) {
|
1309
|
+
if (op_.payload->send_message.stream_write_closed && error.ok()) {
|
1074
1310
|
error = grpc_error_add_child(
|
1075
|
-
error,
|
1311
|
+
error, GRPC_ERROR_CREATE(
|
1076
1312
|
"Attempt to send message after stream was closed."));
|
1077
1313
|
}
|
1078
1314
|
call->sending_message_ = false;
|
@@ -1081,29 +1317,25 @@ void FilterStackCall::BatchControl::PostCompletion() {
|
|
1081
1317
|
if (op_.send_trailing_metadata) {
|
1082
1318
|
call->send_trailing_metadata_.Clear();
|
1083
1319
|
}
|
1320
|
+
if (!error.ok() && op_.recv_message && *call->receiving_buffer_ != nullptr) {
|
1321
|
+
grpc_byte_buffer_destroy(*call->receiving_buffer_);
|
1322
|
+
*call->receiving_buffer_ = nullptr;
|
1323
|
+
}
|
1084
1324
|
if (op_.recv_trailing_metadata) {
|
1085
|
-
|
1325
|
+
// propagate cancellation to any interested children
|
1086
1326
|
gpr_atm_rel_store(&call->received_final_op_atm_, 1);
|
1087
1327
|
call->PropagateCancellationToChildren();
|
1088
|
-
|
1089
|
-
error = GRPC_ERROR_NONE;
|
1090
|
-
}
|
1091
|
-
if (!GRPC_ERROR_IS_NONE(error) && op_.recv_message &&
|
1092
|
-
*call->receiving_buffer_ != nullptr) {
|
1093
|
-
grpc_byte_buffer_destroy(*call->receiving_buffer_);
|
1094
|
-
*call->receiving_buffer_ = nullptr;
|
1328
|
+
error = absl::OkStatus();
|
1095
1329
|
}
|
1096
|
-
batch_error_.set(
|
1330
|
+
batch_error_.set(absl::OkStatus());
|
1097
1331
|
|
1098
1332
|
if (completion_data_.notify_tag.is_closure) {
|
1099
|
-
/* unrefs error */
|
1100
1333
|
call_ = nullptr;
|
1101
1334
|
Closure::Run(DEBUG_LOCATION,
|
1102
1335
|
static_cast<grpc_closure*>(completion_data_.notify_tag.tag),
|
1103
1336
|
error);
|
1104
1337
|
call->InternalUnref("completion");
|
1105
1338
|
} else {
|
1106
|
-
/* unrefs error */
|
1107
1339
|
grpc_cq_end_op(
|
1108
1340
|
call->cq_, completion_data_.notify_tag.tag, error,
|
1109
1341
|
[](void* user_data, grpc_cq_completion* /*storage*/) {
|
@@ -1116,8 +1348,8 @@ void FilterStackCall::BatchControl::PostCompletion() {
|
|
1116
1348
|
}
|
1117
1349
|
}
|
1118
1350
|
|
1119
|
-
void FilterStackCall::BatchControl::FinishStep() {
|
1120
|
-
if (GPR_UNLIKELY(completed_batch_step())) {
|
1351
|
+
void FilterStackCall::BatchControl::FinishStep(PendingOp op) {
|
1352
|
+
if (GPR_UNLIKELY(completed_batch_step(op))) {
|
1121
1353
|
PostCompletion();
|
1122
1354
|
}
|
1123
1355
|
}
|
@@ -1127,13 +1359,13 @@ void FilterStackCall::BatchControl::ProcessDataAfterMetadata() {
|
|
1127
1359
|
if (!call->receiving_slice_buffer_.has_value()) {
|
1128
1360
|
*call->receiving_buffer_ = nullptr;
|
1129
1361
|
call->receiving_message_ = false;
|
1130
|
-
FinishStep();
|
1362
|
+
FinishStep(PendingOp::kRecvMessage);
|
1131
1363
|
} else {
|
1132
|
-
call->
|
1364
|
+
call->NoteLastMessageFlags(call->receiving_stream_flags_);
|
1133
1365
|
if ((call->receiving_stream_flags_ & GRPC_WRITE_INTERNAL_COMPRESS) &&
|
1134
|
-
(call->
|
1366
|
+
(call->incoming_compression_algorithm() != GRPC_COMPRESS_NONE)) {
|
1135
1367
|
*call->receiving_buffer_ = grpc_raw_compressed_byte_buffer_create(
|
1136
|
-
nullptr, 0, call->
|
1368
|
+
nullptr, 0, call->incoming_compression_algorithm());
|
1137
1369
|
} else {
|
1138
1370
|
*call->receiving_buffer_ = grpc_raw_byte_buffer_create(nullptr, 0);
|
1139
1371
|
}
|
@@ -1142,88 +1374,48 @@ void FilterStackCall::BatchControl::ProcessDataAfterMetadata() {
|
|
1142
1374
|
&(*call->receiving_buffer_)->data.raw.slice_buffer);
|
1143
1375
|
call->receiving_message_ = false;
|
1144
1376
|
call->receiving_slice_buffer_.reset();
|
1145
|
-
FinishStep();
|
1377
|
+
FinishStep(PendingOp::kRecvMessage);
|
1146
1378
|
}
|
1147
1379
|
}
|
1148
1380
|
|
1149
1381
|
void FilterStackCall::BatchControl::ReceivingStreamReady(
|
1150
1382
|
grpc_error_handle error) {
|
1383
|
+
if (grpc_call_trace.enabled()) {
|
1384
|
+
gpr_log(GPR_DEBUG,
|
1385
|
+
"tag:%p ReceivingStreamReady error=%s "
|
1386
|
+
"receiving_slice_buffer.has_value=%d recv_state=%" PRIdPTR,
|
1387
|
+
completion_data_.notify_tag.tag, error.ToString().c_str(),
|
1388
|
+
call_->receiving_slice_buffer_.has_value(),
|
1389
|
+
gpr_atm_no_barrier_load(&call_->recv_state_));
|
1390
|
+
}
|
1151
1391
|
FilterStackCall* call = call_;
|
1152
|
-
if (!
|
1392
|
+
if (!error.ok()) {
|
1153
1393
|
call->receiving_slice_buffer_.reset();
|
1154
1394
|
if (batch_error_.ok()) {
|
1155
1395
|
batch_error_.set(error);
|
1156
1396
|
}
|
1157
|
-
call->CancelWithError(
|
1397
|
+
call->CancelWithError(error);
|
1158
1398
|
}
|
1159
|
-
|
1160
|
-
|
1161
|
-
|
1162
|
-
if (!
|
1163
|
-
!call->receiving_slice_buffer_.has_value() ||
|
1399
|
+
// If recv_state is kRecvNone, we will save the batch_control
|
1400
|
+
// object with rel_cas, and will not use it after the cas. Its corresponding
|
1401
|
+
// acq_load is in receiving_initial_metadata_ready()
|
1402
|
+
if (!error.ok() || !call->receiving_slice_buffer_.has_value() ||
|
1164
1403
|
!gpr_atm_rel_cas(&call->recv_state_, kRecvNone,
|
1165
1404
|
reinterpret_cast<gpr_atm>(this))) {
|
1166
1405
|
ProcessDataAfterMetadata();
|
1167
1406
|
}
|
1168
1407
|
}
|
1169
1408
|
|
1170
|
-
void FilterStackCall::HandleCompressionAlgorithmDisabled(
|
1171
|
-
grpc_compression_algorithm compression_algorithm) {
|
1172
|
-
const char* algo_name = nullptr;
|
1173
|
-
grpc_compression_algorithm_name(compression_algorithm, &algo_name);
|
1174
|
-
std::string error_msg =
|
1175
|
-
absl::StrFormat("Compression algorithm '%s' is disabled.", algo_name);
|
1176
|
-
gpr_log(GPR_ERROR, "%s", error_msg.c_str());
|
1177
|
-
CancelWithStatus(GRPC_STATUS_UNIMPLEMENTED, error_msg.c_str());
|
1178
|
-
}
|
1179
|
-
|
1180
|
-
void FilterStackCall::HandleCompressionAlgorithmNotAccepted(
|
1181
|
-
grpc_compression_algorithm compression_algorithm) {
|
1182
|
-
const char* algo_name = nullptr;
|
1183
|
-
grpc_compression_algorithm_name(compression_algorithm, &algo_name);
|
1184
|
-
gpr_log(GPR_ERROR,
|
1185
|
-
"Compression algorithm ('%s') not present in the "
|
1186
|
-
"accepted encodings (%s)",
|
1187
|
-
algo_name,
|
1188
|
-
std::string(encodings_accepted_by_peer_.ToString()).c_str());
|
1189
|
-
}
|
1190
|
-
|
1191
|
-
void FilterStackCall::BatchControl::ValidateFilteredMetadata() {
|
1192
|
-
FilterStackCall* call = call_;
|
1193
|
-
|
1194
|
-
const grpc_compression_options compression_options =
|
1195
|
-
call->channel_->compression_options();
|
1196
|
-
const grpc_compression_algorithm compression_algorithm =
|
1197
|
-
call->incoming_compression_algorithm_;
|
1198
|
-
if (GPR_UNLIKELY(!CompressionAlgorithmSet::FromUint32(
|
1199
|
-
compression_options.enabled_algorithms_bitset)
|
1200
|
-
.IsSet(compression_algorithm))) {
|
1201
|
-
/* check if algorithm is supported by current channel config */
|
1202
|
-
call->HandleCompressionAlgorithmDisabled(compression_algorithm);
|
1203
|
-
}
|
1204
|
-
/* GRPC_COMPRESS_NONE is always set. */
|
1205
|
-
GPR_DEBUG_ASSERT(call->encodings_accepted_by_peer_.IsSet(GRPC_COMPRESS_NONE));
|
1206
|
-
if (GPR_UNLIKELY(
|
1207
|
-
!call->encodings_accepted_by_peer_.IsSet(compression_algorithm))) {
|
1208
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
|
1209
|
-
call->HandleCompressionAlgorithmNotAccepted(compression_algorithm);
|
1210
|
-
}
|
1211
|
-
}
|
1212
|
-
}
|
1213
|
-
|
1214
1409
|
void FilterStackCall::BatchControl::ReceivingInitialMetadataReady(
|
1215
1410
|
grpc_error_handle error) {
|
1216
1411
|
FilterStackCall* call = call_;
|
1217
1412
|
|
1218
1413
|
GRPC_CALL_COMBINER_STOP(call->call_combiner(), "recv_initial_metadata_ready");
|
1219
1414
|
|
1220
|
-
if (
|
1415
|
+
if (error.ok()) {
|
1221
1416
|
grpc_metadata_batch* md = &call->recv_initial_metadata_;
|
1222
1417
|
call->RecvInitialFilter(md);
|
1223
1418
|
|
1224
|
-
/* TODO(ctiller): this could be moved into recv_initial_filter now */
|
1225
|
-
ValidateFilteredMetadata();
|
1226
|
-
|
1227
1419
|
absl::optional<Timestamp> deadline = md->get(GrpcTimeoutMetadata());
|
1228
1420
|
if (deadline.has_value() && !call->is_client()) {
|
1229
1421
|
call_->set_send_deadline(*deadline);
|
@@ -1232,41 +1424,41 @@ void FilterStackCall::BatchControl::ReceivingInitialMetadataReady(
|
|
1232
1424
|
if (batch_error_.ok()) {
|
1233
1425
|
batch_error_.set(error);
|
1234
1426
|
}
|
1235
|
-
call->CancelWithError(
|
1427
|
+
call->CancelWithError(error);
|
1236
1428
|
}
|
1237
1429
|
|
1238
1430
|
grpc_closure* saved_rsr_closure = nullptr;
|
1239
1431
|
while (true) {
|
1240
1432
|
gpr_atm rsr_bctlp = gpr_atm_acq_load(&call->recv_state_);
|
1241
|
-
|
1433
|
+
// Should only receive initial metadata once
|
1242
1434
|
GPR_ASSERT(rsr_bctlp != 1);
|
1243
1435
|
if (rsr_bctlp == 0) {
|
1244
|
-
|
1245
|
-
|
1246
|
-
|
1247
|
-
|
1248
|
-
|
1436
|
+
// We haven't seen initial metadata and messages before, thus initial
|
1437
|
+
// metadata is received first.
|
1438
|
+
// no_barrier_cas is used, as this function won't access the batch_control
|
1439
|
+
// object saved by receiving_stream_ready() if the initial metadata is
|
1440
|
+
// received first.
|
1249
1441
|
if (gpr_atm_no_barrier_cas(&call->recv_state_, kRecvNone,
|
1250
1442
|
kRecvInitialMetadataFirst)) {
|
1251
1443
|
break;
|
1252
1444
|
}
|
1253
1445
|
} else {
|
1254
|
-
|
1446
|
+
// Already received messages
|
1255
1447
|
saved_rsr_closure = GRPC_CLOSURE_CREATE(
|
1256
1448
|
[](void* bctl, grpc_error_handle error) {
|
1257
1449
|
static_cast<BatchControl*>(bctl)->ReceivingStreamReady(error);
|
1258
1450
|
},
|
1259
1451
|
reinterpret_cast<BatchControl*>(rsr_bctlp),
|
1260
1452
|
grpc_schedule_on_exec_ctx);
|
1261
|
-
|
1453
|
+
// No need to modify recv_state
|
1262
1454
|
break;
|
1263
1455
|
}
|
1264
1456
|
}
|
1265
1457
|
if (saved_rsr_closure != nullptr) {
|
1266
|
-
Closure::Run(DEBUG_LOCATION, saved_rsr_closure,
|
1458
|
+
Closure::Run(DEBUG_LOCATION, saved_rsr_closure, error);
|
1267
1459
|
}
|
1268
1460
|
|
1269
|
-
FinishStep();
|
1461
|
+
FinishStep(PendingOp::kRecvInitialMetadata);
|
1270
1462
|
}
|
1271
1463
|
|
1272
1464
|
void FilterStackCall::BatchControl::ReceivingTrailingMetadataReady(
|
@@ -1274,8 +1466,8 @@ void FilterStackCall::BatchControl::ReceivingTrailingMetadataReady(
|
|
1274
1466
|
GRPC_CALL_COMBINER_STOP(call_->call_combiner(),
|
1275
1467
|
"recv_trailing_metadata_ready");
|
1276
1468
|
grpc_metadata_batch* md = &call_->recv_trailing_metadata_;
|
1277
|
-
call_->RecvTrailingFilter(md,
|
1278
|
-
FinishStep();
|
1469
|
+
call_->RecvTrailingFilter(md, error);
|
1470
|
+
FinishStep(PendingOp::kRecvTrailingMetadata);
|
1279
1471
|
}
|
1280
1472
|
|
1281
1473
|
void FilterStackCall::BatchControl::FinishBatch(grpc_error_handle error) {
|
@@ -1283,11 +1475,29 @@ void FilterStackCall::BatchControl::FinishBatch(grpc_error_handle error) {
|
|
1283
1475
|
if (batch_error_.ok()) {
|
1284
1476
|
batch_error_.set(error);
|
1285
1477
|
}
|
1286
|
-
if (!
|
1287
|
-
call_->CancelWithError(
|
1478
|
+
if (!error.ok()) {
|
1479
|
+
call_->CancelWithError(error);
|
1480
|
+
}
|
1481
|
+
FinishStep(PendingOp::kSends);
|
1482
|
+
}
|
1483
|
+
|
1484
|
+
namespace {
|
1485
|
+
void EndOpImmediately(grpc_completion_queue* cq, void* notify_tag,
|
1486
|
+
bool is_notify_tag_closure) {
|
1487
|
+
if (!is_notify_tag_closure) {
|
1488
|
+
GPR_ASSERT(grpc_cq_begin_op(cq, notify_tag));
|
1489
|
+
grpc_cq_end_op(
|
1490
|
+
cq, notify_tag, absl::OkStatus(),
|
1491
|
+
[](void*, grpc_cq_completion* completion) { gpr_free(completion); },
|
1492
|
+
nullptr,
|
1493
|
+
static_cast<grpc_cq_completion*>(
|
1494
|
+
gpr_malloc(sizeof(grpc_cq_completion))));
|
1495
|
+
} else {
|
1496
|
+
Closure::Run(DEBUG_LOCATION, static_cast<grpc_closure*>(notify_tag),
|
1497
|
+
absl::OkStatus());
|
1288
1498
|
}
|
1289
|
-
FinishStep();
|
1290
1499
|
}
|
1500
|
+
} // namespace
|
1291
1501
|
|
1292
1502
|
grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
1293
1503
|
void* notify_tag,
|
@@ -1295,12 +1505,12 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
|
1295
1505
|
size_t i;
|
1296
1506
|
const grpc_op* op;
|
1297
1507
|
BatchControl* bctl;
|
1298
|
-
bool has_send_ops = false;
|
1299
|
-
int num_recv_ops = 0;
|
1300
1508
|
grpc_call_error error = GRPC_CALL_OK;
|
1301
1509
|
grpc_transport_stream_op_batch* stream_op;
|
1302
1510
|
grpc_transport_stream_op_batch_payload* stream_op_payload;
|
1303
1511
|
uint32_t seen_ops = 0;
|
1512
|
+
intptr_t pending_ops = 0;
|
1513
|
+
CallTracerAnnotationInterface* call_tracer = nullptr;
|
1304
1514
|
|
1305
1515
|
for (i = 0; i < nops; i++) {
|
1306
1516
|
if (seen_ops & (1u << ops[i].op)) {
|
@@ -1309,21 +1519,19 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
|
1309
1519
|
seen_ops |= (1u << ops[i].op);
|
1310
1520
|
}
|
1311
1521
|
|
1522
|
+
if (!is_client() &&
|
1523
|
+
(seen_ops & (1u << GRPC_OP_SEND_STATUS_FROM_SERVER)) != 0 &&
|
1524
|
+
(seen_ops & (1u << GRPC_OP_RECV_MESSAGE)) != 0) {
|
1525
|
+
gpr_log(GPR_ERROR,
|
1526
|
+
"******************* SEND_STATUS WITH RECV_MESSAGE "
|
1527
|
+
"*******************");
|
1528
|
+
return GRPC_CALL_ERROR;
|
1529
|
+
}
|
1530
|
+
|
1312
1531
|
GRPC_CALL_LOG_BATCH(GPR_INFO, ops, nops);
|
1313
1532
|
|
1314
1533
|
if (nops == 0) {
|
1315
|
-
|
1316
|
-
GPR_ASSERT(grpc_cq_begin_op(cq_, notify_tag));
|
1317
|
-
grpc_cq_end_op(
|
1318
|
-
cq_, notify_tag, GRPC_ERROR_NONE,
|
1319
|
-
[](void*, grpc_cq_completion* completion) { gpr_free(completion); },
|
1320
|
-
nullptr,
|
1321
|
-
static_cast<grpc_cq_completion*>(
|
1322
|
-
gpr_malloc(sizeof(grpc_cq_completion))));
|
1323
|
-
} else {
|
1324
|
-
Closure::Run(DEBUG_LOCATION, static_cast<grpc_closure*>(notify_tag),
|
1325
|
-
GRPC_ERROR_NONE);
|
1326
|
-
}
|
1534
|
+
EndOpImmediately(cq_, notify_tag, is_notify_tag_closure);
|
1327
1535
|
error = GRPC_CALL_OK;
|
1328
1536
|
goto done;
|
1329
1537
|
}
|
@@ -1339,7 +1547,7 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
|
1339
1547
|
stream_op = &bctl->op_;
|
1340
1548
|
stream_op_payload = &stream_op_payload_;
|
1341
1549
|
|
1342
|
-
|
1550
|
+
// rewrite batch ops into a transport op
|
1343
1551
|
for (i = 0; i < nops; i++) {
|
1344
1552
|
op = &ops[i];
|
1345
1553
|
if (op->reserved != nullptr) {
|
@@ -1348,7 +1556,7 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
|
1348
1556
|
}
|
1349
1557
|
switch (op->op) {
|
1350
1558
|
case GRPC_OP_SEND_INITIAL_METADATA: {
|
1351
|
-
|
1559
|
+
// Flag validation: currently allow no flags
|
1352
1560
|
if (!AreInitialMetadataFlagsValid(op->flags)) {
|
1353
1561
|
error = GRPC_CALL_ERROR_INVALID_FLAGS;
|
1354
1562
|
goto done_with_error;
|
@@ -1357,36 +1565,6 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
|
1357
1565
|
error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
|
1358
1566
|
goto done_with_error;
|
1359
1567
|
}
|
1360
|
-
// TODO(juanlishen): If the user has already specified a compression
|
1361
|
-
// algorithm by setting the initial metadata with key of
|
1362
|
-
// GRPC_COMPRESSION_REQUEST_ALGORITHM_MD_KEY, we shouldn't override that
|
1363
|
-
// with the compression algorithm mapped from compression level.
|
1364
|
-
/* process compression level */
|
1365
|
-
grpc_compression_level effective_compression_level =
|
1366
|
-
GRPC_COMPRESS_LEVEL_NONE;
|
1367
|
-
bool level_set = false;
|
1368
|
-
if (op->data.send_initial_metadata.maybe_compression_level.is_set) {
|
1369
|
-
effective_compression_level =
|
1370
|
-
op->data.send_initial_metadata.maybe_compression_level.level;
|
1371
|
-
level_set = true;
|
1372
|
-
} else {
|
1373
|
-
const grpc_compression_options copts =
|
1374
|
-
channel_->compression_options();
|
1375
|
-
if (copts.default_level.is_set) {
|
1376
|
-
level_set = true;
|
1377
|
-
effective_compression_level = copts.default_level.level;
|
1378
|
-
}
|
1379
|
-
}
|
1380
|
-
// Currently, only server side supports compression level setting.
|
1381
|
-
if (level_set && !is_client()) {
|
1382
|
-
const grpc_compression_algorithm calgo =
|
1383
|
-
encodings_accepted_by_peer_.CompressionAlgorithmForLevel(
|
1384
|
-
effective_compression_level);
|
1385
|
-
// The following metadata will be checked and removed by the message
|
1386
|
-
// compression filter. It will be used as the call's compression
|
1387
|
-
// algorithm.
|
1388
|
-
send_initial_metadata_.Set(GrpcInternalEncodingRequest(), calgo);
|
1389
|
-
}
|
1390
1568
|
if (op->data.send_initial_metadata.count > INT_MAX) {
|
1391
1569
|
error = GRPC_CALL_ERROR_INVALID_METADATA;
|
1392
1570
|
goto done_with_error;
|
@@ -1399,9 +1577,8 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
|
1399
1577
|
error = GRPC_CALL_ERROR_INVALID_METADATA;
|
1400
1578
|
goto done_with_error;
|
1401
1579
|
}
|
1402
|
-
|
1403
|
-
|
1404
|
-
/* TODO(ctiller): just make these the same variable? */
|
1580
|
+
PrepareOutgoingInitialMetadata(*op, send_initial_metadata_);
|
1581
|
+
// TODO(ctiller): just make these the same variable?
|
1405
1582
|
if (is_client() && send_deadline() != Timestamp::InfFuture()) {
|
1406
1583
|
send_initial_metadata_.Set(GrpcTimeoutMetadata(), send_deadline());
|
1407
1584
|
}
|
@@ -1415,10 +1592,7 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
|
1415
1592
|
}
|
1416
1593
|
stream_op_payload->send_initial_metadata.send_initial_metadata =
|
1417
1594
|
&send_initial_metadata_;
|
1418
|
-
|
1419
|
-
stream_op_payload->send_initial_metadata.peer_string = &peer_string_;
|
1420
|
-
}
|
1421
|
-
has_send_ops = true;
|
1595
|
+
pending_ops |= PendingOpMask(PendingOp::kSends);
|
1422
1596
|
break;
|
1423
1597
|
}
|
1424
1598
|
case GRPC_OP_SEND_MESSAGE: {
|
@@ -1435,9 +1609,9 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
|
1435
1609
|
goto done_with_error;
|
1436
1610
|
}
|
1437
1611
|
uint32_t flags = op->flags;
|
1438
|
-
|
1439
|
-
|
1440
|
-
|
1612
|
+
// If the outgoing buffer is already compressed, mark it as so in the
|
1613
|
+
// flags. These will be picked up by the compression filter and further
|
1614
|
+
// (wasteful) attempts at compression skipped.
|
1441
1615
|
if (op->data.send_message.send_message->data.raw.compression >
|
1442
1616
|
GRPC_COMPRESS_NONE) {
|
1443
1617
|
flags |= GRPC_WRITE_INTERNAL_COMPRESS;
|
@@ -1450,11 +1624,11 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
|
1450
1624
|
send_slice_buffer_.c_slice_buffer());
|
1451
1625
|
stream_op_payload->send_message.flags = flags;
|
1452
1626
|
stream_op_payload->send_message.send_message = &send_slice_buffer_;
|
1453
|
-
|
1627
|
+
pending_ops |= PendingOpMask(PendingOp::kSends);
|
1454
1628
|
break;
|
1455
1629
|
}
|
1456
1630
|
case GRPC_OP_SEND_CLOSE_FROM_CLIENT: {
|
1457
|
-
|
1631
|
+
// Flag validation: currently allow no flags
|
1458
1632
|
if (op->flags != 0) {
|
1459
1633
|
error = GRPC_CALL_ERROR_INVALID_FLAGS;
|
1460
1634
|
goto done_with_error;
|
@@ -1471,11 +1645,11 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
|
1471
1645
|
sent_final_op_ = true;
|
1472
1646
|
stream_op_payload->send_trailing_metadata.send_trailing_metadata =
|
1473
1647
|
&send_trailing_metadata_;
|
1474
|
-
|
1648
|
+
pending_ops |= PendingOpMask(PendingOp::kSends);
|
1475
1649
|
break;
|
1476
1650
|
}
|
1477
1651
|
case GRPC_OP_SEND_STATUS_FROM_SERVER: {
|
1478
|
-
|
1652
|
+
// Flag validation: currently allow no flags
|
1479
1653
|
if (op->flags != 0) {
|
1480
1654
|
error = GRPC_CALL_ERROR_INVALID_FLAGS;
|
1481
1655
|
goto done_with_error;
|
@@ -1505,11 +1679,10 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
|
1505
1679
|
|
1506
1680
|
grpc_error_handle status_error =
|
1507
1681
|
op->data.send_status_from_server.status == GRPC_STATUS_OK
|
1508
|
-
?
|
1682
|
+
? absl::OkStatus()
|
1509
1683
|
: grpc_error_set_int(
|
1510
|
-
|
1511
|
-
|
1512
|
-
GRPC_ERROR_INT_GRPC_STATUS,
|
1684
|
+
GRPC_ERROR_CREATE("Server returned error"),
|
1685
|
+
StatusIntProperty::kRpcStatus,
|
1513
1686
|
static_cast<intptr_t>(
|
1514
1687
|
op->data.send_status_from_server.status));
|
1515
1688
|
if (op->data.send_status_from_server.status_details != nullptr) {
|
@@ -1517,16 +1690,15 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
|
1517
1690
|
GrpcMessageMetadata(),
|
1518
1691
|
Slice(grpc_slice_copy(
|
1519
1692
|
*op->data.send_status_from_server.status_details)));
|
1520
|
-
if (!
|
1693
|
+
if (!status_error.ok()) {
|
1521
1694
|
status_error = grpc_error_set_str(
|
1522
|
-
status_error,
|
1695
|
+
status_error, StatusStrProperty::kGrpcMessage,
|
1523
1696
|
StringViewFromSlice(
|
1524
1697
|
*op->data.send_status_from_server.status_details));
|
1525
1698
|
}
|
1526
1699
|
}
|
1527
1700
|
|
1528
1701
|
status_error_.set(status_error);
|
1529
|
-
GRPC_ERROR_UNREF(status_error);
|
1530
1702
|
|
1531
1703
|
send_trailing_metadata_.Set(GrpcStatusMetadata(),
|
1532
1704
|
op->data.send_status_from_server.status);
|
@@ -1537,11 +1709,11 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
|
1537
1709
|
&send_trailing_metadata_;
|
1538
1710
|
stream_op_payload->send_trailing_metadata.sent =
|
1539
1711
|
&sent_server_trailing_metadata_;
|
1540
|
-
|
1712
|
+
pending_ops |= PendingOpMask(PendingOp::kSends);
|
1541
1713
|
break;
|
1542
1714
|
}
|
1543
1715
|
case GRPC_OP_RECV_INITIAL_METADATA: {
|
1544
|
-
|
1716
|
+
// Flag validation: currently allow no flags
|
1545
1717
|
if (op->flags != 0) {
|
1546
1718
|
error = GRPC_CALL_ERROR_INVALID_FLAGS;
|
1547
1719
|
goto done_with_error;
|
@@ -1568,14 +1740,12 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
|
1568
1740
|
if (is_client()) {
|
1569
1741
|
stream_op_payload->recv_initial_metadata.trailing_metadata_available =
|
1570
1742
|
&is_trailers_only_;
|
1571
|
-
} else {
|
1572
|
-
stream_op_payload->recv_initial_metadata.peer_string = &peer_string_;
|
1573
1743
|
}
|
1574
|
-
|
1744
|
+
pending_ops |= PendingOpMask(PendingOp::kRecvInitialMetadata);
|
1575
1745
|
break;
|
1576
1746
|
}
|
1577
1747
|
case GRPC_OP_RECV_MESSAGE: {
|
1578
|
-
|
1748
|
+
// Flag validation: currently allow no flags
|
1579
1749
|
if (op->flags != 0) {
|
1580
1750
|
error = GRPC_CALL_ERROR_INVALID_FLAGS;
|
1581
1751
|
goto done_with_error;
|
@@ -1607,11 +1777,11 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
|
1607
1777
|
bctl, grpc_schedule_on_exec_ctx);
|
1608
1778
|
stream_op_payload->recv_message.recv_message_ready =
|
1609
1779
|
&receiving_stream_ready_;
|
1610
|
-
|
1780
|
+
pending_ops |= PendingOpMask(PendingOp::kRecvMessage);
|
1611
1781
|
break;
|
1612
1782
|
}
|
1613
1783
|
case GRPC_OP_RECV_STATUS_ON_CLIENT: {
|
1614
|
-
|
1784
|
+
// Flag validation: currently allow no flags
|
1615
1785
|
if (op->flags != 0) {
|
1616
1786
|
error = GRPC_CALL_ERROR_INVALID_FLAGS;
|
1617
1787
|
goto done_with_error;
|
@@ -1646,11 +1816,11 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
|
1646
1816
|
bctl, grpc_schedule_on_exec_ctx);
|
1647
1817
|
stream_op_payload->recv_trailing_metadata.recv_trailing_metadata_ready =
|
1648
1818
|
&receiving_trailing_metadata_ready_;
|
1649
|
-
|
1819
|
+
pending_ops |= PendingOpMask(PendingOp::kRecvTrailingMetadata);
|
1650
1820
|
break;
|
1651
1821
|
}
|
1652
1822
|
case GRPC_OP_RECV_CLOSE_ON_SERVER: {
|
1653
|
-
|
1823
|
+
// Flag validation: currently allow no flags
|
1654
1824
|
if (op->flags != 0) {
|
1655
1825
|
error = GRPC_CALL_ERROR_INVALID_FLAGS;
|
1656
1826
|
goto done_with_error;
|
@@ -1679,7 +1849,7 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
|
1679
1849
|
bctl, grpc_schedule_on_exec_ctx);
|
1680
1850
|
stream_op_payload->recv_trailing_metadata.recv_trailing_metadata_ready =
|
1681
1851
|
&receiving_trailing_metadata_ready_;
|
1682
|
-
|
1852
|
+
pending_ops |= PendingOpMask(PendingOp::kRecvTrailingMetadata);
|
1683
1853
|
break;
|
1684
1854
|
}
|
1685
1855
|
}
|
@@ -1689,9 +1859,9 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
|
1689
1859
|
if (!is_notify_tag_closure) {
|
1690
1860
|
GPR_ASSERT(grpc_cq_begin_op(cq_, notify_tag));
|
1691
1861
|
}
|
1692
|
-
bctl->
|
1862
|
+
bctl->set_pending_ops(pending_ops);
|
1693
1863
|
|
1694
|
-
if (
|
1864
|
+
if (pending_ops & PendingOpMask(PendingOp::kSends)) {
|
1695
1865
|
GRPC_CLOSURE_INIT(
|
1696
1866
|
&bctl->finish_batch_,
|
1697
1867
|
[](void* bctl, grpc_error_handle error) {
|
@@ -1701,13 +1871,28 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
|
1701
1871
|
stream_op->on_complete = &bctl->finish_batch_;
|
1702
1872
|
}
|
1703
1873
|
|
1874
|
+
call_tracer = static_cast<CallTracerAnnotationInterface*>(
|
1875
|
+
ContextGet(GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE));
|
1876
|
+
if ((IsTraceRecordCallopsEnabled() && call_tracer != nullptr)) {
|
1877
|
+
call_tracer->RecordAnnotation(absl::StrFormat(
|
1878
|
+
"BATCH:%p START:%s BATCH:%s (tag:%p)", bctl,
|
1879
|
+
PendingOpString(pending_ops).c_str(),
|
1880
|
+
grpc_transport_stream_op_batch_string(stream_op, true).c_str(),
|
1881
|
+
bctl->completion_data_.notify_tag.tag));
|
1882
|
+
}
|
1883
|
+
if (grpc_call_trace.enabled()) {
|
1884
|
+
gpr_log(GPR_DEBUG, "BATCH:%p START:%s BATCH:%s (tag:%p)", bctl,
|
1885
|
+
PendingOpString(pending_ops).c_str(),
|
1886
|
+
grpc_transport_stream_op_batch_string(stream_op, false).c_str(),
|
1887
|
+
bctl->completion_data_.notify_tag.tag);
|
1888
|
+
}
|
1704
1889
|
ExecuteBatch(stream_op, &bctl->start_batch_);
|
1705
1890
|
|
1706
1891
|
done:
|
1707
1892
|
return error;
|
1708
1893
|
|
1709
1894
|
done_with_error:
|
1710
|
-
|
1895
|
+
// reverse any mutations that occurred
|
1711
1896
|
if (stream_op->send_initial_metadata) {
|
1712
1897
|
sent_initial_metadata_ = false;
|
1713
1898
|
send_initial_metadata_.Clear();
|
@@ -1740,59 +1925,1632 @@ void FilterStackCall::ContextSet(grpc_context_index elem, void* value,
|
|
1740
1925
|
context_[elem].destroy = destroy;
|
1741
1926
|
}
|
1742
1927
|
|
1743
|
-
|
1928
|
+
///////////////////////////////////////////////////////////////////////////////
|
1929
|
+
// Metadata validation helpers
|
1744
1930
|
|
1745
|
-
|
1746
|
-
|
1747
|
-
|
1931
|
+
namespace {
|
1932
|
+
bool ValidateMetadata(size_t count, grpc_metadata* metadata) {
|
1933
|
+
for (size_t i = 0; i < count; i++) {
|
1934
|
+
grpc_metadata* md = &metadata[i];
|
1935
|
+
if (!GRPC_LOG_IF_ERROR("validate_metadata",
|
1936
|
+
grpc_validate_header_key_is_legal(md->key))) {
|
1937
|
+
return false;
|
1938
|
+
} else if (!grpc_is_binary_header_internal(md->key) &&
|
1939
|
+
!GRPC_LOG_IF_ERROR(
|
1940
|
+
"validate_metadata",
|
1941
|
+
grpc_validate_header_nonbin_value_is_legal(md->value))) {
|
1942
|
+
return false;
|
1943
|
+
} else if (GRPC_SLICE_LENGTH(md->value) >= UINT32_MAX) {
|
1944
|
+
// HTTP2 hpack encoding has a maximum limit.
|
1945
|
+
return false;
|
1946
|
+
}
|
1947
|
+
}
|
1948
|
+
return true;
|
1748
1949
|
}
|
1950
|
+
} // namespace
|
1749
1951
|
|
1750
|
-
|
1751
|
-
|
1752
|
-
|
1952
|
+
///////////////////////////////////////////////////////////////////////////////
|
1953
|
+
// PromiseBasedCall
|
1954
|
+
// Will be folded into Call once the promise conversion is done
|
1753
1955
|
|
1754
|
-
|
1755
|
-
|
1756
|
-
|
1757
|
-
|
1956
|
+
class PromiseBasedCall : public Call,
|
1957
|
+
public Party,
|
1958
|
+
public grpc_event_engine::experimental::EventEngine::
|
1959
|
+
Closure /* for deadlines */ {
|
1960
|
+
public:
|
1961
|
+
PromiseBasedCall(Arena* arena, uint32_t initial_external_refs,
|
1962
|
+
const grpc_call_create_args& args);
|
1758
1963
|
|
1759
|
-
void
|
1760
|
-
|
1761
|
-
|
1762
|
-
|
1964
|
+
void ContextSet(grpc_context_index elem, void* value,
|
1965
|
+
void (*destroy)(void* value)) override;
|
1966
|
+
void* ContextGet(grpc_context_index elem) const override;
|
1967
|
+
void SetCompletionQueue(grpc_completion_queue* cq) override;
|
1968
|
+
bool Completed() final { return finished_.IsSet(); }
|
1969
|
+
|
1970
|
+
// Implementation of call refcounting: move this to DualRefCounted once we
|
1971
|
+
// don't need to maintain FilterStackCall compatibility
|
1972
|
+
void ExternalRef() final { InternalRef("external"); }
|
1973
|
+
void ExternalUnref() final { InternalUnref("external"); }
|
1974
|
+
void InternalRef(const char* reason) final {
|
1975
|
+
if (grpc_call_refcount_trace.enabled()) {
|
1976
|
+
gpr_log(GPR_DEBUG, "INTERNAL_REF:%p:%s", this, reason);
|
1977
|
+
}
|
1978
|
+
Party::IncrementRefCount();
|
1979
|
+
}
|
1980
|
+
void InternalUnref(const char* reason) final {
|
1981
|
+
if (grpc_call_refcount_trace.enabled()) {
|
1982
|
+
gpr_log(GPR_DEBUG, "INTERNAL_UNREF:%p:%s", this, reason);
|
1983
|
+
}
|
1984
|
+
Party::Unref();
|
1985
|
+
}
|
1763
1986
|
|
1764
|
-
void
|
1987
|
+
void RunInContext(absl::AnyInvocable<void()> fn) {
|
1988
|
+
Spawn(
|
1989
|
+
"run_in_context",
|
1990
|
+
[fn = std::move(fn)]() mutable {
|
1991
|
+
fn();
|
1992
|
+
return Empty{};
|
1993
|
+
},
|
1994
|
+
[](Empty) {});
|
1995
|
+
}
|
1765
1996
|
|
1766
|
-
|
1767
|
-
|
1768
|
-
}
|
1997
|
+
// This should return nullptr for the promise stack (and alternative means
|
1998
|
+
// for that functionality be invented)
|
1999
|
+
grpc_call_stack* call_stack() override { return nullptr; }
|
1769
2000
|
|
1770
|
-
|
1771
|
-
|
1772
|
-
|
2001
|
+
void UpdateDeadline(Timestamp deadline) ABSL_LOCKS_EXCLUDED(deadline_mu_);
|
2002
|
+
void ResetDeadline() ABSL_LOCKS_EXCLUDED(deadline_mu_);
|
2003
|
+
Timestamp deadline() {
|
2004
|
+
MutexLock lock(&deadline_mu_);
|
2005
|
+
return deadline_;
|
2006
|
+
}
|
1773
2007
|
|
1774
|
-
|
1775
|
-
|
1776
|
-
}
|
2008
|
+
// Implementation of EventEngine::Closure, called when deadline expires
|
2009
|
+
void Run() override;
|
1777
2010
|
|
1778
|
-
|
1779
|
-
|
1780
|
-
|
1781
|
-
|
1782
|
-
grpc_core::ExecCtx exec_ctx;
|
1783
|
-
grpc_core::Call::FromC(call)->CancelWithError(GRPC_ERROR_CANCELLED);
|
1784
|
-
return GRPC_CALL_OK;
|
1785
|
-
}
|
2011
|
+
virtual ServerCallContext* server_call_context() { return nullptr; }
|
2012
|
+
bool failed_before_recv_message() const final {
|
2013
|
+
return failed_before_recv_message_.load(std::memory_order_relaxed);
|
2014
|
+
}
|
1786
2015
|
|
1787
|
-
|
1788
|
-
|
1789
|
-
|
1790
|
-
|
1791
|
-
|
1792
|
-
|
1793
|
-
|
1794
|
-
|
1795
|
-
|
2016
|
+
grpc_event_engine::experimental::EventEngine* event_engine() const final {
|
2017
|
+
return channel()->event_engine();
|
2018
|
+
}
|
2019
|
+
|
2020
|
+
using Call::arena;
|
2021
|
+
|
2022
|
+
protected:
|
2023
|
+
class ScopedContext
|
2024
|
+
: public ScopedActivity,
|
2025
|
+
public BatchBuilder,
|
2026
|
+
public promise_detail::Context<BatchBuilder>,
|
2027
|
+
public promise_detail::Context<Arena>,
|
2028
|
+
public promise_detail::Context<grpc_call_context_element>,
|
2029
|
+
public promise_detail::Context<CallContext>,
|
2030
|
+
public promise_detail::Context<CallFinalization> {
|
2031
|
+
public:
|
2032
|
+
explicit ScopedContext(PromiseBasedCall* call)
|
2033
|
+
: ScopedActivity(call),
|
2034
|
+
BatchBuilder(&call->batch_payload_),
|
2035
|
+
promise_detail::Context<BatchBuilder>(this),
|
2036
|
+
promise_detail::Context<Arena>(call->arena()),
|
2037
|
+
promise_detail::Context<grpc_call_context_element>(call->context_),
|
2038
|
+
promise_detail::Context<CallContext>(&call->call_context_),
|
2039
|
+
promise_detail::Context<CallFinalization>(&call->finalization_) {}
|
2040
|
+
};
|
2041
|
+
|
2042
|
+
class Completion {
|
2043
|
+
public:
|
2044
|
+
Completion() : index_(kNullIndex) {}
|
2045
|
+
~Completion() { GPR_ASSERT(index_ == kNullIndex); }
|
2046
|
+
explicit Completion(uint8_t index) : index_(index) {}
|
2047
|
+
Completion(const Completion& other) = delete;
|
2048
|
+
Completion& operator=(const Completion& other) = delete;
|
2049
|
+
Completion(Completion&& other) noexcept : index_(other.index_) {
|
2050
|
+
other.index_ = kNullIndex;
|
2051
|
+
}
|
2052
|
+
Completion& operator=(Completion&& other) noexcept {
|
2053
|
+
GPR_ASSERT(index_ == kNullIndex);
|
2054
|
+
index_ = other.index_;
|
2055
|
+
other.index_ = kNullIndex;
|
2056
|
+
return *this;
|
2057
|
+
}
|
2058
|
+
|
2059
|
+
uint8_t index() const { return index_; }
|
2060
|
+
uint8_t TakeIndex() { return std::exchange(index_, kNullIndex); }
|
2061
|
+
bool has_value() const { return index_ != kNullIndex; }
|
2062
|
+
|
2063
|
+
private:
|
2064
|
+
enum : uint8_t { kNullIndex = 0xff };
|
2065
|
+
uint8_t index_;
|
2066
|
+
};
|
2067
|
+
|
2068
|
+
~PromiseBasedCall() override {
|
2069
|
+
if (cq_) GRPC_CQ_INTERNAL_UNREF(cq_, "bind");
|
2070
|
+
for (int i = 0; i < GRPC_CONTEXT_COUNT; i++) {
|
2071
|
+
if (context_[i].destroy) {
|
2072
|
+
context_[i].destroy(context_[i].value);
|
2073
|
+
}
|
2074
|
+
}
|
2075
|
+
}
|
2076
|
+
|
2077
|
+
// Enumerates why a Completion is still pending
|
2078
|
+
enum class PendingOp {
|
2079
|
+
// We're in the midst of starting a batch of operations
|
2080
|
+
kStartingBatch = 0,
|
2081
|
+
// The following correspond with the batch operations from above
|
2082
|
+
kSendInitialMetadata,
|
2083
|
+
kReceiveInitialMetadata,
|
2084
|
+
kReceiveStatusOnClient,
|
2085
|
+
kReceiveCloseOnServer = kReceiveStatusOnClient,
|
2086
|
+
kSendMessage,
|
2087
|
+
kReceiveMessage,
|
2088
|
+
kSendStatusFromServer,
|
2089
|
+
kSendCloseFromClient = kSendStatusFromServer,
|
2090
|
+
};
|
2091
|
+
|
2092
|
+
bool RunParty() override {
|
2093
|
+
ScopedContext ctx(this);
|
2094
|
+
return Party::RunParty();
|
2095
|
+
}
|
2096
|
+
|
2097
|
+
const char* PendingOpString(PendingOp reason) const {
|
2098
|
+
switch (reason) {
|
2099
|
+
case PendingOp::kStartingBatch:
|
2100
|
+
return "StartingBatch";
|
2101
|
+
case PendingOp::kSendInitialMetadata:
|
2102
|
+
return "SendInitialMetadata";
|
2103
|
+
case PendingOp::kReceiveInitialMetadata:
|
2104
|
+
return "ReceiveInitialMetadata";
|
2105
|
+
case PendingOp::kReceiveStatusOnClient:
|
2106
|
+
return is_client() ? "ReceiveStatusOnClient" : "ReceiveCloseOnServer";
|
2107
|
+
case PendingOp::kSendMessage:
|
2108
|
+
return "SendMessage";
|
2109
|
+
case PendingOp::kReceiveMessage:
|
2110
|
+
return "ReceiveMessage";
|
2111
|
+
case PendingOp::kSendStatusFromServer:
|
2112
|
+
return is_client() ? "SendCloseFromClient" : "SendStatusFromServer";
|
2113
|
+
}
|
2114
|
+
return "Unknown";
|
2115
|
+
}
|
2116
|
+
|
2117
|
+
static constexpr uint32_t PendingOpBit(PendingOp reason) {
|
2118
|
+
return 1 << static_cast<int>(reason);
|
2119
|
+
}
|
2120
|
+
|
2121
|
+
// Begin work on a completion, recording the tag/closure to notify.
|
2122
|
+
// Use the op selected in \a ops to determine the index to allocate into.
|
2123
|
+
// Starts the "StartingBatch" PendingOp immediately.
|
2124
|
+
// Assumes at least one operation in \a ops.
|
2125
|
+
Completion StartCompletion(void* tag, bool is_closure, const grpc_op* ops);
|
2126
|
+
// Add one pending op to the completion, and return it.
|
2127
|
+
Completion AddOpToCompletion(const Completion& completion, PendingOp reason);
|
2128
|
+
// Stringify a completion
|
2129
|
+
std::string CompletionString(const Completion& completion) const {
|
2130
|
+
return completion.has_value()
|
2131
|
+
? completion_info_[completion.index()].pending.ToString(this)
|
2132
|
+
: "no-completion";
|
2133
|
+
}
|
2134
|
+
// Finish one op on the completion. Must have been previously been added.
|
2135
|
+
// The completion as a whole finishes when all pending ops finish.
|
2136
|
+
void FinishOpOnCompletion(Completion* completion, PendingOp reason);
|
2137
|
+
// Mark the completion as failed. Does not finish it.
|
2138
|
+
void FailCompletion(const Completion& completion,
|
2139
|
+
SourceLocation source_location = {});
|
2140
|
+
// Mark the completion as infallible. Overrides FailCompletion to report
|
2141
|
+
// success always.
|
2142
|
+
void ForceCompletionSuccess(const Completion& completion);
|
2143
|
+
// Accept the stats from the context (call once we have proof the transport is
|
2144
|
+
// done with them).
|
2145
|
+
// Right now this means that promise based calls do not record correct stats
|
2146
|
+
// with census if they are cancelled.
|
2147
|
+
// TODO(ctiller): this should be remedied before promise based calls are
|
2148
|
+
// dexperimentalized.
|
2149
|
+
void AcceptTransportStatsFromContext() {
|
2150
|
+
final_stats_ = *call_context_.call_stats();
|
2151
|
+
}
|
2152
|
+
|
2153
|
+
grpc_completion_queue* cq() { return cq_; }
|
2154
|
+
|
2155
|
+
void CToMetadata(grpc_metadata* metadata, size_t count,
|
2156
|
+
grpc_metadata_batch* batch);
|
2157
|
+
|
2158
|
+
// At the end of the call run any finalization actions.
|
2159
|
+
void RunFinalization(grpc_status_code status, const char* status_details) {
|
2160
|
+
grpc_call_final_info final_info;
|
2161
|
+
final_info.stats = final_stats_;
|
2162
|
+
final_info.final_status = status;
|
2163
|
+
final_info.error_string = status_details;
|
2164
|
+
final_info.stats.latency =
|
2165
|
+
gpr_cycle_counter_sub(gpr_get_cycle_counter(), start_time());
|
2166
|
+
finalization_.Run(&final_info);
|
2167
|
+
}
|
2168
|
+
|
2169
|
+
std::string PresentAndCompletionText(const char* caption, bool has,
|
2170
|
+
const Completion& completion) const {
|
2171
|
+
if (has) {
|
2172
|
+
if (completion.has_value()) {
|
2173
|
+
return absl::StrCat(caption, ":", CompletionString(completion), " ");
|
2174
|
+
} else {
|
2175
|
+
return absl::StrCat(caption,
|
2176
|
+
":!!BUG:operation is present, no completion!! ");
|
2177
|
+
}
|
2178
|
+
} else {
|
2179
|
+
if (!completion.has_value()) {
|
2180
|
+
return "";
|
2181
|
+
} else {
|
2182
|
+
return absl::StrCat(caption, ":no-op:", CompletionString(completion),
|
2183
|
+
" ");
|
2184
|
+
}
|
2185
|
+
}
|
2186
|
+
}
|
2187
|
+
|
2188
|
+
// Spawn a job that will first do FirstPromise then receive a message
|
2189
|
+
template <typename FirstPromise>
|
2190
|
+
void StartRecvMessage(const grpc_op& op, const Completion& completion,
|
2191
|
+
FirstPromise first,
|
2192
|
+
PipeReceiver<MessageHandle>* receiver,
|
2193
|
+
bool cancel_on_error, Party::BulkSpawner& spawner);
|
2194
|
+
void StartSendMessage(const grpc_op& op, const Completion& completion,
|
2195
|
+
PipeSender<MessageHandle>* sender,
|
2196
|
+
Party::BulkSpawner& spawner);
|
2197
|
+
|
2198
|
+
void set_completed() { finished_.Set(); }
|
2199
|
+
|
2200
|
+
// Returns a promise that resolves to Empty whenever the call is completed.
|
2201
|
+
auto finished() { return finished_.Wait(); }
|
2202
|
+
|
2203
|
+
// Returns a promise that resolves to Empty whenever there is no outstanding
|
2204
|
+
// send operation
|
2205
|
+
auto WaitForSendingStarted() {
|
2206
|
+
return [this]() -> Poll<Empty> {
|
2207
|
+
int n = sends_queued_.load(std::memory_order_relaxed);
|
2208
|
+
if (grpc_call_trace.enabled()) {
|
2209
|
+
gpr_log(GPR_DEBUG, "%s[call] WaitForSendingStarted n=%d",
|
2210
|
+
DebugTag().c_str(), n);
|
2211
|
+
}
|
2212
|
+
if (n != 0) return waiting_for_queued_sends_.pending();
|
2213
|
+
return Empty{};
|
2214
|
+
};
|
2215
|
+
}
|
2216
|
+
|
2217
|
+
// Mark that a send has been queued - blocks sending trailing metadata.
|
2218
|
+
void QueueSend() {
|
2219
|
+
if (grpc_call_trace.enabled()) {
|
2220
|
+
gpr_log(GPR_DEBUG, "%s[call] QueueSend", DebugTag().c_str());
|
2221
|
+
}
|
2222
|
+
sends_queued_.fetch_add(1, std::memory_order_relaxed);
|
2223
|
+
}
|
2224
|
+
// Mark that a send has been dequeued - allows sending trailing metadata once
|
2225
|
+
// zero sends are queued.
|
2226
|
+
void EnactSend() {
|
2227
|
+
if (grpc_call_trace.enabled()) {
|
2228
|
+
gpr_log(GPR_DEBUG, "%s[call] EnactSend", DebugTag().c_str());
|
2229
|
+
}
|
2230
|
+
if (1 == sends_queued_.fetch_sub(1, std::memory_order_relaxed)) {
|
2231
|
+
waiting_for_queued_sends_.Wake();
|
2232
|
+
}
|
2233
|
+
}
|
2234
|
+
|
2235
|
+
private:
|
2236
|
+
union CompletionInfo {
|
2237
|
+
static constexpr uint32_t kOpFailed = 0x8000'0000u;
|
2238
|
+
static constexpr uint32_t kOpForceSuccess = 0x4000'0000u;
|
2239
|
+
CompletionInfo() {}
|
2240
|
+
enum CompletionState {
|
2241
|
+
kPending,
|
2242
|
+
kSuccess,
|
2243
|
+
kFailure,
|
2244
|
+
};
|
2245
|
+
struct Pending {
|
2246
|
+
// Bitmask of PendingOps at the bottom, and kOpFailed, kOpForceSuccess at
|
2247
|
+
// the top.
|
2248
|
+
std::atomic<uint32_t> state;
|
2249
|
+
bool is_closure;
|
2250
|
+
// True if this completion was for a recv_message op.
|
2251
|
+
// In that case if the completion as a whole fails we need to cleanup the
|
2252
|
+
// returned message.
|
2253
|
+
bool is_recv_message;
|
2254
|
+
void* tag;
|
2255
|
+
|
2256
|
+
void Start(bool is_closure, void* tag) {
|
2257
|
+
this->is_closure = is_closure;
|
2258
|
+
this->is_recv_message = false;
|
2259
|
+
this->tag = tag;
|
2260
|
+
state.store(PendingOpBit(PendingOp::kStartingBatch),
|
2261
|
+
std::memory_order_release);
|
2262
|
+
}
|
2263
|
+
|
2264
|
+
void AddPendingBit(PendingOp reason) {
|
2265
|
+
if (reason == PendingOp::kReceiveMessage) is_recv_message = true;
|
2266
|
+
auto prev =
|
2267
|
+
state.fetch_or(PendingOpBit(reason), std::memory_order_relaxed);
|
2268
|
+
GPR_ASSERT((prev & PendingOpBit(reason)) == 0);
|
2269
|
+
}
|
2270
|
+
|
2271
|
+
CompletionState RemovePendingBit(PendingOp reason) {
|
2272
|
+
const uint32_t mask = ~PendingOpBit(reason);
|
2273
|
+
auto prev = state.fetch_and(mask, std::memory_order_acq_rel);
|
2274
|
+
GPR_ASSERT((prev & PendingOpBit(reason)) != 0);
|
2275
|
+
switch (prev & mask) {
|
2276
|
+
case kOpFailed:
|
2277
|
+
return kFailure;
|
2278
|
+
case kOpFailed | kOpForceSuccess:
|
2279
|
+
case kOpForceSuccess:
|
2280
|
+
case 0:
|
2281
|
+
return kSuccess;
|
2282
|
+
default:
|
2283
|
+
return kPending;
|
2284
|
+
}
|
2285
|
+
}
|
2286
|
+
|
2287
|
+
void MarkFailed() {
|
2288
|
+
state.fetch_or(kOpFailed, std::memory_order_relaxed);
|
2289
|
+
}
|
2290
|
+
|
2291
|
+
void MarkForceSuccess() {
|
2292
|
+
state.fetch_or(kOpForceSuccess, std::memory_order_relaxed);
|
2293
|
+
}
|
2294
|
+
|
2295
|
+
std::string ToString(const PromiseBasedCall* call) const {
|
2296
|
+
auto state = this->state.load(std::memory_order_relaxed);
|
2297
|
+
std::vector<absl::string_view> pending_ops;
|
2298
|
+
for (size_t i = 0; i < 24; i++) {
|
2299
|
+
if (state & (1u << i)) {
|
2300
|
+
pending_ops.push_back(
|
2301
|
+
call->PendingOpString(static_cast<PendingOp>(i)));
|
2302
|
+
}
|
2303
|
+
}
|
2304
|
+
return absl::StrFormat("{%s}%s:tag=%p", absl::StrJoin(pending_ops, ","),
|
2305
|
+
(state & kOpForceSuccess) ? ":force-success"
|
2306
|
+
: (state & kOpFailed) ? ":failed"
|
2307
|
+
: ":success",
|
2308
|
+
tag);
|
2309
|
+
}
|
2310
|
+
} pending;
|
2311
|
+
grpc_cq_completion completion;
|
2312
|
+
};
|
2313
|
+
|
2314
|
+
void PartyOver() override {
|
2315
|
+
{
|
2316
|
+
ScopedContext ctx(this);
|
2317
|
+
CancelRemainingParticipants();
|
2318
|
+
arena()->DestroyManagedNewObjects();
|
2319
|
+
}
|
2320
|
+
DeleteThis();
|
2321
|
+
}
|
2322
|
+
|
2323
|
+
CallContext call_context_{this};
|
2324
|
+
|
2325
|
+
// Contexts for various subsystems (security, tracing, ...).
|
2326
|
+
grpc_call_context_element context_[GRPC_CONTEXT_COUNT] = {};
|
2327
|
+
grpc_completion_queue* cq_;
|
2328
|
+
CompletionInfo completion_info_[6];
|
2329
|
+
grpc_call_stats final_stats_{};
|
2330
|
+
CallFinalization finalization_;
|
2331
|
+
// Current deadline.
|
2332
|
+
Mutex deadline_mu_;
|
2333
|
+
Timestamp deadline_ ABSL_GUARDED_BY(deadline_mu_) = Timestamp::InfFuture();
|
2334
|
+
grpc_event_engine::experimental::EventEngine::TaskHandle ABSL_GUARDED_BY(
|
2335
|
+
deadline_mu_) deadline_task_;
|
2336
|
+
ExternallyObservableLatch<void> finished_;
|
2337
|
+
// Non-zero with an outstanding GRPC_OP_SEND_INITIAL_METADATA or
|
2338
|
+
// GRPC_OP_SEND_MESSAGE (one count each), and 0 once those payloads have been
|
2339
|
+
// pushed onto the outgoing pipe.
|
2340
|
+
std::atomic<uint8_t> sends_queued_{0};
|
2341
|
+
std::atomic<bool> failed_before_recv_message_{false};
|
2342
|
+
// Waiter for when sends_queued_ becomes 0.
|
2343
|
+
IntraActivityWaiter waiting_for_queued_sends_;
|
2344
|
+
grpc_byte_buffer** recv_message_ = nullptr;
|
2345
|
+
grpc_transport_stream_op_batch_payload batch_payload_{context_};
|
2346
|
+
};
|
2347
|
+
|
2348
|
+
template <typename T>
|
2349
|
+
grpc_error_handle MakePromiseBasedCall(grpc_call_create_args* args,
|
2350
|
+
grpc_call** out_call) {
|
2351
|
+
Channel* channel = args->channel.get();
|
2352
|
+
|
2353
|
+
auto alloc = Arena::CreateWithAlloc(channel->CallSizeEstimate(), sizeof(T),
|
2354
|
+
channel->allocator());
|
2355
|
+
PromiseBasedCall* call = new (alloc.second) T(alloc.first, args);
|
2356
|
+
*out_call = call->c_ptr();
|
2357
|
+
GPR_DEBUG_ASSERT(Call::FromC(*out_call) == call);
|
2358
|
+
return absl::OkStatus();
|
2359
|
+
}
|
2360
|
+
|
2361
|
+
PromiseBasedCall::PromiseBasedCall(Arena* arena, uint32_t initial_external_refs,
|
2362
|
+
const grpc_call_create_args& args)
|
2363
|
+
: Call(arena, args.server_transport_data == nullptr, args.send_deadline,
|
2364
|
+
args.channel->Ref()),
|
2365
|
+
Party(arena, initial_external_refs),
|
2366
|
+
cq_(args.cq) {
|
2367
|
+
if (args.cq != nullptr) {
|
2368
|
+
GRPC_CQ_INTERNAL_REF(args.cq, "bind");
|
2369
|
+
}
|
2370
|
+
}
|
2371
|
+
|
2372
|
+
void PromiseBasedCall::CToMetadata(grpc_metadata* metadata, size_t count,
|
2373
|
+
grpc_metadata_batch* b) {
|
2374
|
+
for (size_t i = 0; i < count; i++) {
|
2375
|
+
grpc_metadata* md = &metadata[i];
|
2376
|
+
auto key = StringViewFromSlice(md->key);
|
2377
|
+
// Filter "content-length metadata"
|
2378
|
+
if (key == "content-length") continue;
|
2379
|
+
b->Append(key, Slice(CSliceRef(md->value)),
|
2380
|
+
[md](absl::string_view error, const Slice& value) {
|
2381
|
+
gpr_log(GPR_DEBUG, "Append error: %s",
|
2382
|
+
absl::StrCat("key=", StringViewFromSlice(md->key),
|
2383
|
+
" error=", error,
|
2384
|
+
" value=", value.as_string_view())
|
2385
|
+
.c_str());
|
2386
|
+
});
|
2387
|
+
}
|
2388
|
+
}
|
2389
|
+
|
2390
|
+
void PromiseBasedCall::ContextSet(grpc_context_index elem, void* value,
|
2391
|
+
void (*destroy)(void*)) {
|
2392
|
+
if (context_[elem].destroy != nullptr) {
|
2393
|
+
context_[elem].destroy(context_[elem].value);
|
2394
|
+
}
|
2395
|
+
context_[elem].value = value;
|
2396
|
+
context_[elem].destroy = destroy;
|
2397
|
+
}
|
2398
|
+
|
2399
|
+
void* PromiseBasedCall::ContextGet(grpc_context_index elem) const {
|
2400
|
+
return context_[elem].value;
|
2401
|
+
}
|
2402
|
+
|
2403
|
+
PromiseBasedCall::Completion PromiseBasedCall::StartCompletion(
|
2404
|
+
void* tag, bool is_closure, const grpc_op* ops) {
|
2405
|
+
Completion c(BatchSlotForOp(ops[0].op));
|
2406
|
+
if (!is_closure) {
|
2407
|
+
grpc_cq_begin_op(cq(), tag);
|
2408
|
+
}
|
2409
|
+
completion_info_[c.index()].pending.Start(is_closure, tag);
|
2410
|
+
if (grpc_call_trace.enabled()) {
|
2411
|
+
gpr_log(GPR_INFO, "%s[call] StartCompletion %s", DebugTag().c_str(),
|
2412
|
+
CompletionString(c).c_str());
|
2413
|
+
}
|
2414
|
+
return c;
|
2415
|
+
}
|
2416
|
+
|
2417
|
+
PromiseBasedCall::Completion PromiseBasedCall::AddOpToCompletion(
|
2418
|
+
const Completion& completion, PendingOp reason) {
|
2419
|
+
if (grpc_call_trace.enabled()) {
|
2420
|
+
gpr_log(GPR_INFO, "%s[call] AddOpToCompletion %s %s", DebugTag().c_str(),
|
2421
|
+
CompletionString(completion).c_str(), PendingOpString(reason));
|
2422
|
+
}
|
2423
|
+
GPR_ASSERT(completion.has_value());
|
2424
|
+
completion_info_[completion.index()].pending.AddPendingBit(reason);
|
2425
|
+
return Completion(completion.index());
|
2426
|
+
}
|
2427
|
+
|
2428
|
+
void PromiseBasedCall::FailCompletion(const Completion& completion,
|
2429
|
+
SourceLocation location) {
|
2430
|
+
if (grpc_call_trace.enabled()) {
|
2431
|
+
gpr_log(location.file(), location.line(), GPR_LOG_SEVERITY_ERROR,
|
2432
|
+
"%s[call] FailCompletion %s", DebugTag().c_str(),
|
2433
|
+
CompletionString(completion).c_str());
|
2434
|
+
}
|
2435
|
+
completion_info_[completion.index()].pending.MarkFailed();
|
2436
|
+
}
|
2437
|
+
|
2438
|
+
void PromiseBasedCall::ForceCompletionSuccess(const Completion& completion) {
|
2439
|
+
completion_info_[completion.index()].pending.MarkForceSuccess();
|
2440
|
+
}
|
2441
|
+
|
2442
|
+
void PromiseBasedCall::FinishOpOnCompletion(Completion* completion,
|
2443
|
+
PendingOp reason) {
|
2444
|
+
if (grpc_call_trace.enabled()) {
|
2445
|
+
gpr_log(GPR_INFO, "%s[call] FinishOpOnCompletion completion:%s finish:%s",
|
2446
|
+
DebugTag().c_str(), CompletionString(*completion).c_str(),
|
2447
|
+
PendingOpString(reason));
|
2448
|
+
}
|
2449
|
+
const uint8_t i = completion->TakeIndex();
|
2450
|
+
GPR_ASSERT(i < GPR_ARRAY_SIZE(completion_info_));
|
2451
|
+
CompletionInfo::Pending& pending = completion_info_[i].pending;
|
2452
|
+
bool success;
|
2453
|
+
switch (pending.RemovePendingBit(reason)) {
|
2454
|
+
case CompletionInfo::kPending:
|
2455
|
+
return; // Early out
|
2456
|
+
case CompletionInfo::kSuccess:
|
2457
|
+
success = true;
|
2458
|
+
break;
|
2459
|
+
case CompletionInfo::kFailure:
|
2460
|
+
success = false;
|
2461
|
+
break;
|
2462
|
+
}
|
2463
|
+
if (pending.is_recv_message && !success && *recv_message_ != nullptr) {
|
2464
|
+
grpc_byte_buffer_destroy(*recv_message_);
|
2465
|
+
*recv_message_ = nullptr;
|
2466
|
+
}
|
2467
|
+
auto error = success ? absl::OkStatus() : absl::CancelledError();
|
2468
|
+
if (pending.is_closure) {
|
2469
|
+
ExecCtx::Run(DEBUG_LOCATION, static_cast<grpc_closure*>(pending.tag),
|
2470
|
+
error);
|
2471
|
+
} else {
|
2472
|
+
grpc_cq_end_op(
|
2473
|
+
cq(), pending.tag, error, [](void*, grpc_cq_completion*) {}, nullptr,
|
2474
|
+
&completion_info_[i].completion);
|
2475
|
+
}
|
2476
|
+
}
|
2477
|
+
|
2478
|
+
void PromiseBasedCall::SetCompletionQueue(grpc_completion_queue* cq) {
|
2479
|
+
cq_ = cq;
|
2480
|
+
GRPC_CQ_INTERNAL_REF(cq, "bind");
|
2481
|
+
}
|
2482
|
+
|
2483
|
+
void PromiseBasedCall::UpdateDeadline(Timestamp deadline) {
|
2484
|
+
MutexLock lock(&deadline_mu_);
|
2485
|
+
if (grpc_call_trace.enabled()) {
|
2486
|
+
gpr_log(GPR_DEBUG, "%s[call] UpdateDeadline from=%s to=%s",
|
2487
|
+
DebugTag().c_str(), deadline_.ToString().c_str(),
|
2488
|
+
deadline.ToString().c_str());
|
2489
|
+
}
|
2490
|
+
if (deadline >= deadline_) return;
|
2491
|
+
auto* const event_engine = channel()->event_engine();
|
2492
|
+
if (deadline_ != Timestamp::InfFuture()) {
|
2493
|
+
if (!event_engine->Cancel(deadline_task_)) return;
|
2494
|
+
} else {
|
2495
|
+
InternalRef("deadline");
|
2496
|
+
}
|
2497
|
+
deadline_ = deadline;
|
2498
|
+
deadline_task_ = event_engine->RunAfter(deadline - Timestamp::Now(), this);
|
2499
|
+
}
|
2500
|
+
|
2501
|
+
void PromiseBasedCall::ResetDeadline() {
|
2502
|
+
MutexLock lock(&deadline_mu_);
|
2503
|
+
if (deadline_ == Timestamp::InfFuture()) return;
|
2504
|
+
auto* const event_engine = channel()->event_engine();
|
2505
|
+
if (!event_engine->Cancel(deadline_task_)) return;
|
2506
|
+
deadline_ = Timestamp::InfFuture();
|
2507
|
+
InternalUnref("deadline");
|
2508
|
+
}
|
2509
|
+
|
2510
|
+
void PromiseBasedCall::Run() {
|
2511
|
+
ApplicationCallbackExecCtx callback_exec_ctx;
|
2512
|
+
ExecCtx exec_ctx;
|
2513
|
+
CancelWithError(absl::DeadlineExceededError("Deadline exceeded"));
|
2514
|
+
InternalUnref("deadline");
|
2515
|
+
}
|
2516
|
+
|
2517
|
+
void PromiseBasedCall::StartSendMessage(const grpc_op& op,
|
2518
|
+
const Completion& completion,
|
2519
|
+
PipeSender<MessageHandle>* sender,
|
2520
|
+
Party::BulkSpawner& spawner) {
|
2521
|
+
QueueSend();
|
2522
|
+
SliceBuffer send;
|
2523
|
+
grpc_slice_buffer_swap(
|
2524
|
+
&op.data.send_message.send_message->data.raw.slice_buffer,
|
2525
|
+
send.c_slice_buffer());
|
2526
|
+
auto msg = arena()->MakePooled<Message>(std::move(send), op.flags);
|
2527
|
+
spawner.Spawn(
|
2528
|
+
"call_send_message",
|
2529
|
+
[this, sender, msg = std::move(msg)]() mutable {
|
2530
|
+
EnactSend();
|
2531
|
+
return sender->Push(std::move(msg));
|
2532
|
+
},
|
2533
|
+
[this, completion = AddOpToCompletion(
|
2534
|
+
completion, PendingOp::kSendMessage)](bool result) mutable {
|
2535
|
+
if (grpc_call_trace.enabled()) {
|
2536
|
+
gpr_log(GPR_DEBUG, "%sSendMessage completes %s", DebugTag().c_str(),
|
2537
|
+
result ? "successfully" : "with failure");
|
2538
|
+
}
|
2539
|
+
if (!result) FailCompletion(completion);
|
2540
|
+
FinishOpOnCompletion(&completion, PendingOp::kSendMessage);
|
2541
|
+
});
|
2542
|
+
}
|
2543
|
+
|
2544
|
+
template <typename FirstPromiseFactory>
|
2545
|
+
void PromiseBasedCall::StartRecvMessage(
|
2546
|
+
const grpc_op& op, const Completion& completion,
|
2547
|
+
FirstPromiseFactory first_promise_factory,
|
2548
|
+
PipeReceiver<MessageHandle>* receiver, bool cancel_on_error,
|
2549
|
+
Party::BulkSpawner& spawner) {
|
2550
|
+
if (grpc_call_trace.enabled()) {
|
2551
|
+
gpr_log(GPR_INFO, "%s[call] Start RecvMessage: %s", DebugTag().c_str(),
|
2552
|
+
CompletionString(completion).c_str());
|
2553
|
+
}
|
2554
|
+
recv_message_ = op.data.recv_message.recv_message;
|
2555
|
+
spawner.Spawn(
|
2556
|
+
"call_recv_message",
|
2557
|
+
[first_promise_factory = std::move(first_promise_factory), receiver]() {
|
2558
|
+
return Seq(first_promise_factory(), receiver->Next());
|
2559
|
+
},
|
2560
|
+
[this, cancel_on_error,
|
2561
|
+
completion = AddOpToCompletion(completion, PendingOp::kReceiveMessage)](
|
2562
|
+
NextResult<MessageHandle> result) mutable {
|
2563
|
+
if (result.has_value()) {
|
2564
|
+
MessageHandle& message = *result;
|
2565
|
+
NoteLastMessageFlags(message->flags());
|
2566
|
+
if ((message->flags() & GRPC_WRITE_INTERNAL_COMPRESS) &&
|
2567
|
+
(incoming_compression_algorithm() != GRPC_COMPRESS_NONE)) {
|
2568
|
+
*recv_message_ = grpc_raw_compressed_byte_buffer_create(
|
2569
|
+
nullptr, 0, incoming_compression_algorithm());
|
2570
|
+
} else {
|
2571
|
+
*recv_message_ = grpc_raw_byte_buffer_create(nullptr, 0);
|
2572
|
+
}
|
2573
|
+
grpc_slice_buffer_move_into(message->payload()->c_slice_buffer(),
|
2574
|
+
&(*recv_message_)->data.raw.slice_buffer);
|
2575
|
+
if (grpc_call_trace.enabled()) {
|
2576
|
+
gpr_log(GPR_INFO,
|
2577
|
+
"%s[call] RecvMessage: outstanding_recv "
|
2578
|
+
"finishes: received %" PRIdPTR " byte message",
|
2579
|
+
DebugTag().c_str(),
|
2580
|
+
(*recv_message_)->data.raw.slice_buffer.length);
|
2581
|
+
}
|
2582
|
+
} else if (result.cancelled()) {
|
2583
|
+
if (grpc_call_trace.enabled()) {
|
2584
|
+
gpr_log(GPR_INFO,
|
2585
|
+
"%s[call] RecvMessage: outstanding_recv "
|
2586
|
+
"finishes: received end-of-stream with error",
|
2587
|
+
DebugTag().c_str());
|
2588
|
+
}
|
2589
|
+
failed_before_recv_message_.store(true);
|
2590
|
+
FailCompletion(completion);
|
2591
|
+
if (cancel_on_error) CancelWithError(absl::CancelledError());
|
2592
|
+
*recv_message_ = nullptr;
|
2593
|
+
} else {
|
2594
|
+
if (grpc_call_trace.enabled()) {
|
2595
|
+
gpr_log(GPR_INFO,
|
2596
|
+
"%s[call] RecvMessage: outstanding_recv "
|
2597
|
+
"finishes: received end-of-stream",
|
2598
|
+
DebugTag().c_str());
|
2599
|
+
}
|
2600
|
+
*recv_message_ = nullptr;
|
2601
|
+
}
|
2602
|
+
FinishOpOnCompletion(&completion, PendingOp::kReceiveMessage);
|
2603
|
+
});
|
2604
|
+
}
|
2605
|
+
|
2606
|
+
///////////////////////////////////////////////////////////////////////////////
|
2607
|
+
// CallContext
|
2608
|
+
|
2609
|
+
void CallContext::RunInContext(absl::AnyInvocable<void()> fn) {
|
2610
|
+
call_->RunInContext(std::move(fn));
|
2611
|
+
}
|
2612
|
+
|
2613
|
+
void CallContext::IncrementRefCount(const char* reason) {
|
2614
|
+
call_->InternalRef(reason);
|
2615
|
+
}
|
2616
|
+
|
2617
|
+
void CallContext::Unref(const char* reason) { call_->InternalUnref(reason); }
|
2618
|
+
|
2619
|
+
void CallContext::UpdateDeadline(Timestamp deadline) {
|
2620
|
+
call_->UpdateDeadline(deadline);
|
2621
|
+
}
|
2622
|
+
|
2623
|
+
Timestamp CallContext::deadline() const { return call_->deadline(); }
|
2624
|
+
|
2625
|
+
ServerCallContext* CallContext::server_call_context() {
|
2626
|
+
return call_->server_call_context();
|
2627
|
+
}
|
2628
|
+
|
2629
|
+
///////////////////////////////////////////////////////////////////////////////
|
2630
|
+
// PublishMetadataArray
|
2631
|
+
|
2632
|
+
namespace {
|
2633
|
+
void PublishMetadataArray(grpc_metadata_batch* md, grpc_metadata_array* array) {
|
2634
|
+
const auto md_count = md->count();
|
2635
|
+
if (md_count > array->capacity) {
|
2636
|
+
array->capacity =
|
2637
|
+
std::max(array->capacity + md->count(), array->capacity * 3 / 2);
|
2638
|
+
array->metadata = static_cast<grpc_metadata*>(
|
2639
|
+
gpr_realloc(array->metadata, sizeof(grpc_metadata) * array->capacity));
|
2640
|
+
}
|
2641
|
+
PublishToAppEncoder encoder(array);
|
2642
|
+
md->Encode(&encoder);
|
2643
|
+
}
|
2644
|
+
} // namespace
|
2645
|
+
|
2646
|
+
///////////////////////////////////////////////////////////////////////////////
|
2647
|
+
// ClientPromiseBasedCall
|
2648
|
+
|
2649
|
+
#ifdef GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_CLIENT_CALL
|
2650
|
+
class ClientPromiseBasedCall final : public PromiseBasedCall {
|
2651
|
+
public:
|
2652
|
+
ClientPromiseBasedCall(Arena* arena, grpc_call_create_args* args)
|
2653
|
+
: PromiseBasedCall(arena, 1, *args) {
|
2654
|
+
global_stats().IncrementClientCallsCreated();
|
2655
|
+
if (args->cq != nullptr) {
|
2656
|
+
GPR_ASSERT(args->pollset_set_alternative == nullptr &&
|
2657
|
+
"Only one of 'cq' and 'pollset_set_alternative' should be "
|
2658
|
+
"non-nullptr.");
|
2659
|
+
polling_entity_.Set(
|
2660
|
+
grpc_polling_entity_create_from_pollset(grpc_cq_pollset(args->cq)));
|
2661
|
+
}
|
2662
|
+
if (args->pollset_set_alternative != nullptr) {
|
2663
|
+
polling_entity_.Set(grpc_polling_entity_create_from_pollset_set(
|
2664
|
+
args->pollset_set_alternative));
|
2665
|
+
}
|
2666
|
+
ScopedContext context(this);
|
2667
|
+
send_initial_metadata_ =
|
2668
|
+
GetContext<Arena>()->MakePooled<ClientMetadata>(GetContext<Arena>());
|
2669
|
+
send_initial_metadata_->Set(HttpPathMetadata(), std::move(*args->path));
|
2670
|
+
if (args->authority.has_value()) {
|
2671
|
+
send_initial_metadata_->Set(HttpAuthorityMetadata(),
|
2672
|
+
std::move(*args->authority));
|
2673
|
+
}
|
2674
|
+
if (auto* channelz_channel = channel()->channelz_node()) {
|
2675
|
+
channelz_channel->RecordCallStarted();
|
2676
|
+
}
|
2677
|
+
if (args->send_deadline != Timestamp::InfFuture()) {
|
2678
|
+
UpdateDeadline(args->send_deadline);
|
2679
|
+
}
|
2680
|
+
}
|
2681
|
+
|
2682
|
+
~ClientPromiseBasedCall() override {
|
2683
|
+
ScopedContext context(this);
|
2684
|
+
send_initial_metadata_.reset();
|
2685
|
+
// Need to destroy the pipes under the ScopedContext above, so we
|
2686
|
+
// move them out here and then allow the destructors to run at
|
2687
|
+
// end of scope, but before context.
|
2688
|
+
auto c2s = std::move(client_to_server_messages_);
|
2689
|
+
auto s2c = std::move(server_to_client_messages_);
|
2690
|
+
auto sim = std::move(server_initial_metadata_);
|
2691
|
+
}
|
2692
|
+
|
2693
|
+
void CancelWithError(absl::Status error) override {
|
2694
|
+
if (!started_.exchange(true, std::memory_order_relaxed)) {
|
2695
|
+
// Initial metadata not sent yet, so we can just fail the call.
|
2696
|
+
Spawn(
|
2697
|
+
"cancel_before_initial_metadata",
|
2698
|
+
[error = std::move(error), this]() {
|
2699
|
+
server_to_client_messages_.sender.Close();
|
2700
|
+
Finish(ServerMetadataFromStatus(error));
|
2701
|
+
return Empty{};
|
2702
|
+
},
|
2703
|
+
[](Empty) {});
|
2704
|
+
} else {
|
2705
|
+
Spawn(
|
2706
|
+
"cancel_with_error",
|
2707
|
+
[error = std::move(error), this]() {
|
2708
|
+
if (!cancel_error_.is_set()) {
|
2709
|
+
cancel_error_.Set(ServerMetadataFromStatus(error));
|
2710
|
+
}
|
2711
|
+
return Empty{};
|
2712
|
+
},
|
2713
|
+
[](Empty) {});
|
2714
|
+
}
|
2715
|
+
}
|
2716
|
+
absl::string_view GetServerAuthority() const override { abort(); }
|
2717
|
+
bool is_trailers_only() const override { return is_trailers_only_; }
|
2718
|
+
|
2719
|
+
grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
|
2720
|
+
bool is_notify_tag_closure) override;
|
2721
|
+
|
2722
|
+
std::string DebugTag() const override {
|
2723
|
+
return absl::StrFormat("CLIENT_CALL[%p]: ", this);
|
2724
|
+
}
|
2725
|
+
|
2726
|
+
private:
|
2727
|
+
// Finish the call with the given status/trailing metadata.
|
2728
|
+
void Finish(ServerMetadataHandle trailing_metadata);
|
2729
|
+
// Validate that a set of ops is valid for a client call.
|
2730
|
+
grpc_call_error ValidateBatch(const grpc_op* ops, size_t nops) const;
|
2731
|
+
// Commit a valid batch of operations to be executed.
|
2732
|
+
void CommitBatch(const grpc_op* ops, size_t nops,
|
2733
|
+
const Completion& completion);
|
2734
|
+
// Start the underlying promise.
|
2735
|
+
void StartPromise(ClientMetadataHandle client_initial_metadata,
|
2736
|
+
const Completion& completion, Party::BulkSpawner& spawner);
|
2737
|
+
// Start receiving initial metadata
|
2738
|
+
void StartRecvInitialMetadata(grpc_metadata_array* array,
|
2739
|
+
const Completion& completion,
|
2740
|
+
Party::BulkSpawner& spawner);
|
2741
|
+
void StartRecvStatusOnClient(
|
2742
|
+
const Completion& completion,
|
2743
|
+
grpc_op::grpc_op_data::grpc_op_recv_status_on_client op_args,
|
2744
|
+
Party::BulkSpawner& spawner);
|
2745
|
+
// Publish status out to the application.
|
2746
|
+
void PublishStatus(
|
2747
|
+
grpc_op::grpc_op_data::grpc_op_recv_status_on_client op_args,
|
2748
|
+
ServerMetadataHandle trailing_metadata);
|
2749
|
+
// Publish server initial metadata out to the application.
|
2750
|
+
void PublishInitialMetadata(ServerMetadata* metadata);
|
2751
|
+
|
2752
|
+
ClientMetadataHandle send_initial_metadata_;
|
2753
|
+
Pipe<ServerMetadataHandle> server_initial_metadata_{arena()};
|
2754
|
+
Latch<ServerMetadataHandle> server_trailing_metadata_;
|
2755
|
+
Latch<ServerMetadataHandle> cancel_error_;
|
2756
|
+
Latch<grpc_polling_entity> polling_entity_;
|
2757
|
+
Pipe<MessageHandle> client_to_server_messages_{arena()};
|
2758
|
+
Pipe<MessageHandle> server_to_client_messages_{arena()};
|
2759
|
+
bool is_trailers_only_;
|
2760
|
+
// True once the promise for the call is started.
|
2761
|
+
// This corresponds to sending initial metadata, or cancelling before doing
|
2762
|
+
// so.
|
2763
|
+
// In the latter case real world code sometimes does not sent the initial
|
2764
|
+
// metadata, and so gating based upon that does not work out.
|
2765
|
+
std::atomic<bool> started_{false};
|
2766
|
+
// TODO(ctiller): delete when we remove the filter based API (may require some
|
2767
|
+
// cleanup in wrapped languages: they depend on this to hold slice refs)
|
2768
|
+
ServerMetadataHandle recv_initial_metadata_;
|
2769
|
+
ServerMetadataHandle recv_trailing_metadata_;
|
2770
|
+
};
|
2771
|
+
|
2772
|
+
void ClientPromiseBasedCall::StartPromise(
|
2773
|
+
ClientMetadataHandle client_initial_metadata, const Completion& completion,
|
2774
|
+
Party::BulkSpawner& spawner) {
|
2775
|
+
auto token = ClientInitialMetadataOutstandingToken::New(arena());
|
2776
|
+
spawner.Spawn(
|
2777
|
+
"call_send_initial_metadata", token.Wait(),
|
2778
|
+
[this,
|
2779
|
+
completion = AddOpToCompletion(
|
2780
|
+
completion, PendingOp::kSendInitialMetadata)](bool result) mutable {
|
2781
|
+
if (!result) FailCompletion(completion);
|
2782
|
+
FinishOpOnCompletion(&completion, PendingOp::kSendInitialMetadata);
|
2783
|
+
});
|
2784
|
+
spawner.Spawn(
|
2785
|
+
"client_promise",
|
2786
|
+
[this, client_initial_metadata = std::move(client_initial_metadata),
|
2787
|
+
token = std::move(token)]() mutable {
|
2788
|
+
return Race(
|
2789
|
+
cancel_error_.Wait(),
|
2790
|
+
Map(channel()->channel_stack()->MakeClientCallPromise(CallArgs{
|
2791
|
+
std::move(client_initial_metadata), std::move(token),
|
2792
|
+
&polling_entity_, &server_initial_metadata_.sender,
|
2793
|
+
&client_to_server_messages_.receiver,
|
2794
|
+
&server_to_client_messages_.sender}),
|
2795
|
+
[this](ServerMetadataHandle trailing_metadata) {
|
2796
|
+
// If we're cancelled the transport doesn't get to return
|
2797
|
+
// stats.
|
2798
|
+
AcceptTransportStatsFromContext();
|
2799
|
+
return trailing_metadata;
|
2800
|
+
}));
|
2801
|
+
},
|
2802
|
+
[this](ServerMetadataHandle trailing_metadata) {
|
2803
|
+
Finish(std::move(trailing_metadata));
|
2804
|
+
});
|
2805
|
+
}
|
2806
|
+
|
2807
|
+
grpc_call_error ClientPromiseBasedCall::ValidateBatch(const grpc_op* ops,
|
2808
|
+
size_t nops) const {
|
2809
|
+
BitSet<8> got_ops;
|
2810
|
+
for (size_t op_idx = 0; op_idx < nops; op_idx++) {
|
2811
|
+
const grpc_op& op = ops[op_idx];
|
2812
|
+
switch (op.op) {
|
2813
|
+
case GRPC_OP_SEND_INITIAL_METADATA:
|
2814
|
+
if (!AreInitialMetadataFlagsValid(op.flags)) {
|
2815
|
+
return GRPC_CALL_ERROR_INVALID_FLAGS;
|
2816
|
+
}
|
2817
|
+
if (!ValidateMetadata(op.data.send_initial_metadata.count,
|
2818
|
+
op.data.send_initial_metadata.metadata)) {
|
2819
|
+
return GRPC_CALL_ERROR_INVALID_METADATA;
|
2820
|
+
}
|
2821
|
+
break;
|
2822
|
+
case GRPC_OP_SEND_MESSAGE:
|
2823
|
+
if (!AreWriteFlagsValid(op.flags)) {
|
2824
|
+
return GRPC_CALL_ERROR_INVALID_FLAGS;
|
2825
|
+
}
|
2826
|
+
break;
|
2827
|
+
case GRPC_OP_RECV_INITIAL_METADATA:
|
2828
|
+
case GRPC_OP_RECV_MESSAGE:
|
2829
|
+
case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
|
2830
|
+
case GRPC_OP_RECV_STATUS_ON_CLIENT:
|
2831
|
+
if (op.flags != 0) return GRPC_CALL_ERROR_INVALID_FLAGS;
|
2832
|
+
break;
|
2833
|
+
case GRPC_OP_RECV_CLOSE_ON_SERVER:
|
2834
|
+
case GRPC_OP_SEND_STATUS_FROM_SERVER:
|
2835
|
+
return GRPC_CALL_ERROR_NOT_ON_CLIENT;
|
2836
|
+
}
|
2837
|
+
if (got_ops.is_set(op.op)) return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
|
2838
|
+
got_ops.set(op.op);
|
2839
|
+
}
|
2840
|
+
return GRPC_CALL_OK;
|
2841
|
+
}
|
2842
|
+
|
2843
|
+
void ClientPromiseBasedCall::CommitBatch(const grpc_op* ops, size_t nops,
|
2844
|
+
const Completion& completion) {
|
2845
|
+
Party::BulkSpawner spawner(this);
|
2846
|
+
for (size_t op_idx = 0; op_idx < nops; op_idx++) {
|
2847
|
+
const grpc_op& op = ops[op_idx];
|
2848
|
+
switch (op.op) {
|
2849
|
+
case GRPC_OP_SEND_INITIAL_METADATA: {
|
2850
|
+
if (started_.exchange(true, std::memory_order_relaxed)) break;
|
2851
|
+
CToMetadata(op.data.send_initial_metadata.metadata,
|
2852
|
+
op.data.send_initial_metadata.count,
|
2853
|
+
send_initial_metadata_.get());
|
2854
|
+
PrepareOutgoingInitialMetadata(op, *send_initial_metadata_);
|
2855
|
+
if (send_deadline() != Timestamp::InfFuture()) {
|
2856
|
+
send_initial_metadata_->Set(GrpcTimeoutMetadata(), send_deadline());
|
2857
|
+
}
|
2858
|
+
send_initial_metadata_->Set(
|
2859
|
+
WaitForReady(),
|
2860
|
+
WaitForReady::ValueType{
|
2861
|
+
(op.flags & GRPC_INITIAL_METADATA_WAIT_FOR_READY) != 0,
|
2862
|
+
(op.flags &
|
2863
|
+
GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET) != 0});
|
2864
|
+
StartPromise(std::move(send_initial_metadata_), completion, spawner);
|
2865
|
+
} break;
|
2866
|
+
case GRPC_OP_RECV_INITIAL_METADATA: {
|
2867
|
+
StartRecvInitialMetadata(
|
2868
|
+
op.data.recv_initial_metadata.recv_initial_metadata, completion,
|
2869
|
+
spawner);
|
2870
|
+
} break;
|
2871
|
+
case GRPC_OP_RECV_STATUS_ON_CLIENT: {
|
2872
|
+
StartRecvStatusOnClient(completion, op.data.recv_status_on_client,
|
2873
|
+
spawner);
|
2874
|
+
} break;
|
2875
|
+
case GRPC_OP_SEND_MESSAGE:
|
2876
|
+
StartSendMessage(op, completion, &client_to_server_messages_.sender,
|
2877
|
+
spawner);
|
2878
|
+
break;
|
2879
|
+
case GRPC_OP_RECV_MESSAGE:
|
2880
|
+
StartRecvMessage(
|
2881
|
+
op, completion,
|
2882
|
+
[this]() {
|
2883
|
+
return server_initial_metadata_.receiver.AwaitClosed();
|
2884
|
+
},
|
2885
|
+
&server_to_client_messages_.receiver, false, spawner);
|
2886
|
+
break;
|
2887
|
+
case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
|
2888
|
+
spawner.Spawn(
|
2889
|
+
"send_close_from_client",
|
2890
|
+
[this]() {
|
2891
|
+
client_to_server_messages_.sender.Close();
|
2892
|
+
return Empty{};
|
2893
|
+
},
|
2894
|
+
[this,
|
2895
|
+
completion = AddOpToCompletion(
|
2896
|
+
completion, PendingOp::kSendCloseFromClient)](Empty) mutable {
|
2897
|
+
FinishOpOnCompletion(&completion,
|
2898
|
+
PendingOp::kSendCloseFromClient);
|
2899
|
+
});
|
2900
|
+
break;
|
2901
|
+
case GRPC_OP_SEND_STATUS_FROM_SERVER:
|
2902
|
+
case GRPC_OP_RECV_CLOSE_ON_SERVER:
|
2903
|
+
abort(); // unreachable
|
2904
|
+
}
|
2905
|
+
}
|
2906
|
+
}
|
2907
|
+
|
2908
|
+
grpc_call_error ClientPromiseBasedCall::StartBatch(const grpc_op* ops,
|
2909
|
+
size_t nops,
|
2910
|
+
void* notify_tag,
|
2911
|
+
bool is_notify_tag_closure) {
|
2912
|
+
if (nops == 0) {
|
2913
|
+
EndOpImmediately(cq(), notify_tag, is_notify_tag_closure);
|
2914
|
+
return GRPC_CALL_OK;
|
2915
|
+
}
|
2916
|
+
const grpc_call_error validation_result = ValidateBatch(ops, nops);
|
2917
|
+
if (validation_result != GRPC_CALL_OK) {
|
2918
|
+
return validation_result;
|
2919
|
+
}
|
2920
|
+
Completion completion =
|
2921
|
+
StartCompletion(notify_tag, is_notify_tag_closure, ops);
|
2922
|
+
CommitBatch(ops, nops, completion);
|
2923
|
+
FinishOpOnCompletion(&completion, PendingOp::kStartingBatch);
|
2924
|
+
return GRPC_CALL_OK;
|
2925
|
+
}
|
2926
|
+
|
2927
|
+
void ClientPromiseBasedCall::StartRecvInitialMetadata(
|
2928
|
+
grpc_metadata_array* array, const Completion& completion,
|
2929
|
+
Party::BulkSpawner& spawner) {
|
2930
|
+
spawner.Spawn(
|
2931
|
+
"recv_initial_metadata",
|
2932
|
+
Race(server_initial_metadata_.receiver.Next(),
|
2933
|
+
Map(finished(),
|
2934
|
+
[](Empty) { return NextResult<ServerMetadataHandle>(true); })),
|
2935
|
+
[this, array,
|
2936
|
+
completion =
|
2937
|
+
AddOpToCompletion(completion, PendingOp::kReceiveInitialMetadata)](
|
2938
|
+
NextResult<ServerMetadataHandle> next_metadata) mutable {
|
2939
|
+
server_initial_metadata_.sender.Close();
|
2940
|
+
ServerMetadataHandle metadata;
|
2941
|
+
if (next_metadata.has_value()) {
|
2942
|
+
is_trailers_only_ = false;
|
2943
|
+
metadata = std::move(next_metadata.value());
|
2944
|
+
} else {
|
2945
|
+
is_trailers_only_ = true;
|
2946
|
+
metadata = arena()->MakePooled<ServerMetadata>(arena());
|
2947
|
+
}
|
2948
|
+
ProcessIncomingInitialMetadata(*metadata);
|
2949
|
+
PublishMetadataArray(metadata.get(), array);
|
2950
|
+
recv_initial_metadata_ = std::move(metadata);
|
2951
|
+
FinishOpOnCompletion(&completion, PendingOp::kReceiveInitialMetadata);
|
2952
|
+
});
|
2953
|
+
}
|
2954
|
+
|
2955
|
+
void ClientPromiseBasedCall::Finish(ServerMetadataHandle trailing_metadata) {
|
2956
|
+
if (grpc_call_trace.enabled()) {
|
2957
|
+
gpr_log(GPR_INFO, "%s[call] Finish: %s", DebugTag().c_str(),
|
2958
|
+
trailing_metadata->DebugString().c_str());
|
2959
|
+
}
|
2960
|
+
ResetDeadline();
|
2961
|
+
set_completed();
|
2962
|
+
client_to_server_messages_.sender.Close();
|
2963
|
+
if (auto* channelz_channel = channel()->channelz_node()) {
|
2964
|
+
if (trailing_metadata->get(GrpcStatusMetadata())
|
2965
|
+
.value_or(GRPC_STATUS_UNKNOWN) == GRPC_STATUS_OK) {
|
2966
|
+
channelz_channel->RecordCallSucceeded();
|
2967
|
+
} else {
|
2968
|
+
channelz_channel->RecordCallFailed();
|
2969
|
+
}
|
2970
|
+
}
|
2971
|
+
server_trailing_metadata_.Set(std::move(trailing_metadata));
|
2972
|
+
}
|
2973
|
+
|
2974
|
+
namespace {
|
2975
|
+
std::string MakeErrorString(const ServerMetadata* trailing_metadata) {
|
2976
|
+
std::string out = absl::StrCat(
|
2977
|
+
trailing_metadata->get(GrpcStatusFromWire()).value_or(false)
|
2978
|
+
? "Error received from peer"
|
2979
|
+
: "Error generated by client",
|
2980
|
+
"grpc_status: ",
|
2981
|
+
grpc_status_code_to_string(trailing_metadata->get(GrpcStatusMetadata())
|
2982
|
+
.value_or(GRPC_STATUS_UNKNOWN)));
|
2983
|
+
if (const Slice* message =
|
2984
|
+
trailing_metadata->get_pointer(GrpcMessageMetadata())) {
|
2985
|
+
absl::StrAppend(&out, "\ngrpc_message: ", message->as_string_view());
|
2986
|
+
}
|
2987
|
+
if (auto annotations = trailing_metadata->get_pointer(GrpcStatusContext())) {
|
2988
|
+
absl::StrAppend(&out, "\nStatus Context:");
|
2989
|
+
for (const std::string& annotation : *annotations) {
|
2990
|
+
absl::StrAppend(&out, "\n ", annotation);
|
2991
|
+
}
|
2992
|
+
}
|
2993
|
+
return out;
|
2994
|
+
}
|
2995
|
+
} // namespace
|
2996
|
+
|
2997
|
+
void ClientPromiseBasedCall::StartRecvStatusOnClient(
|
2998
|
+
const Completion& completion,
|
2999
|
+
grpc_op::grpc_op_data::grpc_op_recv_status_on_client op_args,
|
3000
|
+
Party::BulkSpawner& spawner) {
|
3001
|
+
ForceCompletionSuccess(completion);
|
3002
|
+
spawner.Spawn(
|
3003
|
+
"recv_status_on_client", server_trailing_metadata_.Wait(),
|
3004
|
+
[this, op_args,
|
3005
|
+
completion =
|
3006
|
+
AddOpToCompletion(completion, PendingOp::kReceiveStatusOnClient)](
|
3007
|
+
ServerMetadataHandle trailing_metadata) mutable {
|
3008
|
+
const grpc_status_code status =
|
3009
|
+
trailing_metadata->get(GrpcStatusMetadata())
|
3010
|
+
.value_or(GRPC_STATUS_UNKNOWN);
|
3011
|
+
*op_args.status = status;
|
3012
|
+
absl::string_view message_string;
|
3013
|
+
if (Slice* message =
|
3014
|
+
trailing_metadata->get_pointer(GrpcMessageMetadata())) {
|
3015
|
+
message_string = message->as_string_view();
|
3016
|
+
*op_args.status_details = message->Ref().TakeCSlice();
|
3017
|
+
} else {
|
3018
|
+
*op_args.status_details = grpc_empty_slice();
|
3019
|
+
}
|
3020
|
+
if (message_string.empty()) {
|
3021
|
+
RunFinalization(status, nullptr);
|
3022
|
+
} else {
|
3023
|
+
std::string error_string(message_string);
|
3024
|
+
RunFinalization(status, error_string.c_str());
|
3025
|
+
}
|
3026
|
+
if (op_args.error_string != nullptr && status != GRPC_STATUS_OK) {
|
3027
|
+
*op_args.error_string =
|
3028
|
+
gpr_strdup(MakeErrorString(trailing_metadata.get()).c_str());
|
3029
|
+
}
|
3030
|
+
PublishMetadataArray(trailing_metadata.get(),
|
3031
|
+
op_args.trailing_metadata);
|
3032
|
+
recv_trailing_metadata_ = std::move(trailing_metadata);
|
3033
|
+
FinishOpOnCompletion(&completion, PendingOp::kReceiveStatusOnClient);
|
3034
|
+
});
|
3035
|
+
}
|
3036
|
+
#endif
|
3037
|
+
|
3038
|
+
///////////////////////////////////////////////////////////////////////////////
|
3039
|
+
// ServerPromiseBasedCall
|
3040
|
+
|
3041
|
+
#ifdef GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_SERVER_CALL
|
3042
|
+
|
3043
|
+
class ServerPromiseBasedCall final : public PromiseBasedCall {
|
3044
|
+
public:
|
3045
|
+
ServerPromiseBasedCall(Arena* arena, grpc_call_create_args* args);
|
3046
|
+
|
3047
|
+
void CancelWithError(grpc_error_handle) override;
|
3048
|
+
grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
|
3049
|
+
bool is_notify_tag_closure) override;
|
3050
|
+
bool is_trailers_only() const override { abort(); }
|
3051
|
+
absl::string_view GetServerAuthority() const override {
|
3052
|
+
const Slice* authority_metadata =
|
3053
|
+
client_initial_metadata_->get_pointer(HttpAuthorityMetadata());
|
3054
|
+
if (authority_metadata == nullptr) return "";
|
3055
|
+
return authority_metadata->as_string_view();
|
3056
|
+
}
|
3057
|
+
|
3058
|
+
// Polling order for the server promise stack:
|
3059
|
+
//
|
3060
|
+
// │ ┌───────────────────────────────────────┐
|
3061
|
+
// │ │ ServerPromiseBasedCall ├──► Lifetime management
|
3062
|
+
// │ ├───────────────────────────────────────┤
|
3063
|
+
// │ │ ConnectedChannel ├─┐
|
3064
|
+
// │ ├───────────────────────────────────────┤ └► Interactions with the
|
3065
|
+
// │ │ ... closest to transport filter │ transport - send/recv msgs
|
3066
|
+
// │ ├───────────────────────────────────────┤ and metadata, call phase
|
3067
|
+
// │ │ ... │ ordering
|
3068
|
+
// │ ├───────────────────────────────────────┤
|
3069
|
+
// │ │ ... closest to app filter │ ┌► Request matching, initial
|
3070
|
+
// │ ├───────────────────────────────────────┤ │ setup, publishing call to
|
3071
|
+
// │ │ Server::ChannelData::MakeCallPromise ├─┘ application
|
3072
|
+
// │ ├───────────────────────────────────────┤
|
3073
|
+
// │ │ MakeTopOfServerCallPromise ├──► Send trailing metadata
|
3074
|
+
// ▼ └───────────────────────────────────────┘
|
3075
|
+
// Polling &
|
3076
|
+
// instantiation
|
3077
|
+
// order
|
3078
|
+
|
3079
|
+
std::string DebugTag() const override {
|
3080
|
+
return absl::StrFormat("SERVER_CALL[%p]: ", this);
|
3081
|
+
}
|
3082
|
+
|
3083
|
+
ServerCallContext* server_call_context() override { return &call_context_; }
|
3084
|
+
|
3085
|
+
private:
|
3086
|
+
class RecvCloseOpCancelState {
|
3087
|
+
public:
|
3088
|
+
// Request that receiver be filled in per
|
3089
|
+
// grpc_op_recv_close_on_server. Returns true if the request can
|
3090
|
+
// be fulfilled immediately. Returns false if the request will be
|
3091
|
+
// fulfilled later.
|
3092
|
+
bool ReceiveCloseOnServerOpStarted(int* receiver) {
|
3093
|
+
uintptr_t state = state_.load(std::memory_order_acquire);
|
3094
|
+
uintptr_t new_state;
|
3095
|
+
do {
|
3096
|
+
switch (state) {
|
3097
|
+
case kUnset:
|
3098
|
+
new_state = reinterpret_cast<uintptr_t>(receiver);
|
3099
|
+
break;
|
3100
|
+
case kFinishedWithFailure:
|
3101
|
+
*receiver = 1;
|
3102
|
+
return true;
|
3103
|
+
case kFinishedWithSuccess:
|
3104
|
+
*receiver = 0;
|
3105
|
+
return true;
|
3106
|
+
default:
|
3107
|
+
Crash("Two threads offered ReceiveCloseOnServerOpStarted");
|
3108
|
+
}
|
3109
|
+
} while (!state_.compare_exchange_weak(state, new_state,
|
3110
|
+
std::memory_order_acq_rel,
|
3111
|
+
std::memory_order_acquire));
|
3112
|
+
return false;
|
3113
|
+
}
|
3114
|
+
|
3115
|
+
// Mark the call as having completed.
|
3116
|
+
// Returns true if this finishes a previous
|
3117
|
+
// RequestReceiveCloseOnServer.
|
3118
|
+
bool CompleteCallWithCancelledSetTo(bool cancelled) {
|
3119
|
+
uintptr_t state = state_.load(std::memory_order_acquire);
|
3120
|
+
uintptr_t new_state;
|
3121
|
+
bool r;
|
3122
|
+
do {
|
3123
|
+
switch (state) {
|
3124
|
+
case kUnset:
|
3125
|
+
new_state = cancelled ? kFinishedWithFailure : kFinishedWithSuccess;
|
3126
|
+
r = false;
|
3127
|
+
break;
|
3128
|
+
case kFinishedWithFailure:
|
3129
|
+
return false;
|
3130
|
+
case kFinishedWithSuccess:
|
3131
|
+
Crash("unreachable");
|
3132
|
+
default:
|
3133
|
+
new_state = cancelled ? kFinishedWithFailure : kFinishedWithSuccess;
|
3134
|
+
r = true;
|
3135
|
+
}
|
3136
|
+
} while (!state_.compare_exchange_weak(state, new_state,
|
3137
|
+
std::memory_order_acq_rel,
|
3138
|
+
std::memory_order_acquire));
|
3139
|
+
if (r) *reinterpret_cast<int*>(state) = cancelled ? 1 : 0;
|
3140
|
+
return r;
|
3141
|
+
}
|
3142
|
+
|
3143
|
+
std::string ToString() const {
|
3144
|
+
auto state = state_.load(std::memory_order_relaxed);
|
3145
|
+
switch (state) {
|
3146
|
+
case kUnset:
|
3147
|
+
return "Unset";
|
3148
|
+
case kFinishedWithFailure:
|
3149
|
+
return "FinishedWithFailure";
|
3150
|
+
case kFinishedWithSuccess:
|
3151
|
+
return "FinishedWithSuccess";
|
3152
|
+
default:
|
3153
|
+
return absl::StrFormat("WaitingForReceiver(%p)",
|
3154
|
+
reinterpret_cast<void*>(state));
|
3155
|
+
}
|
3156
|
+
}
|
3157
|
+
|
3158
|
+
private:
|
3159
|
+
static constexpr uintptr_t kUnset = 0;
|
3160
|
+
static constexpr uintptr_t kFinishedWithFailure = 1;
|
3161
|
+
static constexpr uintptr_t kFinishedWithSuccess = 2;
|
3162
|
+
// Holds one of kUnset, kFinishedWithFailure, or
|
3163
|
+
// kFinishedWithSuccess OR an int* that wants to receive the
|
3164
|
+
// final status.
|
3165
|
+
std::atomic<uintptr_t> state_{kUnset};
|
3166
|
+
};
|
3167
|
+
|
3168
|
+
grpc_call_error ValidateBatch(const grpc_op* ops, size_t nops) const;
|
3169
|
+
void CommitBatch(const grpc_op* ops, size_t nops,
|
3170
|
+
const Completion& completion);
|
3171
|
+
void Finish(ServerMetadataHandle result);
|
3172
|
+
|
3173
|
+
friend class ServerCallContext;
|
3174
|
+
ServerCallContext call_context_;
|
3175
|
+
Server* const server_;
|
3176
|
+
PipeSender<ServerMetadataHandle>* server_initial_metadata_ = nullptr;
|
3177
|
+
PipeSender<MessageHandle>* server_to_client_messages_ = nullptr;
|
3178
|
+
PipeReceiver<MessageHandle>* client_to_server_messages_ = nullptr;
|
3179
|
+
Latch<ServerMetadataHandle> send_trailing_metadata_;
|
3180
|
+
RecvCloseOpCancelState recv_close_op_cancel_state_;
|
3181
|
+
ClientMetadataHandle client_initial_metadata_;
|
3182
|
+
Completion recv_close_completion_;
|
3183
|
+
std::atomic<bool> cancelled_{false};
|
3184
|
+
};
|
3185
|
+
|
3186
|
+
ServerPromiseBasedCall::ServerPromiseBasedCall(Arena* arena,
|
3187
|
+
grpc_call_create_args* args)
|
3188
|
+
: PromiseBasedCall(arena, 0, *args),
|
3189
|
+
call_context_(this, args->server_transport_data),
|
3190
|
+
server_(args->server) {
|
3191
|
+
global_stats().IncrementServerCallsCreated();
|
3192
|
+
channelz::ServerNode* channelz_node = server_->channelz_node();
|
3193
|
+
if (channelz_node != nullptr) {
|
3194
|
+
channelz_node->RecordCallStarted();
|
3195
|
+
}
|
3196
|
+
// TODO(yashykt): In the future, we want to also enable stats and trace
|
3197
|
+
// collecting from when the call is created at the transport. The idea is that
|
3198
|
+
// the transport would create the call tracer and pass it in as part of the
|
3199
|
+
// metadata.
|
3200
|
+
auto* server_call_tracer_factory =
|
3201
|
+
ServerCallTracerFactory::Get(args->server->channel_args());
|
3202
|
+
if (server_call_tracer_factory != nullptr) {
|
3203
|
+
auto* server_call_tracer =
|
3204
|
+
server_call_tracer_factory->CreateNewServerCallTracer(arena);
|
3205
|
+
if (server_call_tracer != nullptr) {
|
3206
|
+
// Note that we are setting both
|
3207
|
+
// GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE and
|
3208
|
+
// GRPC_CONTEXT_CALL_TRACER as a matter of convenience. In the future
|
3209
|
+
// promise-based world, we would just a single tracer object for each
|
3210
|
+
// stack (call, subchannel_call, server_call.)
|
3211
|
+
ContextSet(GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE,
|
3212
|
+
server_call_tracer, nullptr);
|
3213
|
+
ContextSet(GRPC_CONTEXT_CALL_TRACER, server_call_tracer, nullptr);
|
3214
|
+
}
|
3215
|
+
}
|
3216
|
+
ScopedContext activity_context(this);
|
3217
|
+
Spawn("server_promise",
|
3218
|
+
channel()->channel_stack()->MakeServerCallPromise(
|
3219
|
+
CallArgs{nullptr, ClientInitialMetadataOutstandingToken::Empty(),
|
3220
|
+
nullptr, nullptr, nullptr, nullptr}),
|
3221
|
+
[this](ServerMetadataHandle result) { Finish(std::move(result)); });
|
3222
|
+
}
|
3223
|
+
|
3224
|
+
void ServerPromiseBasedCall::Finish(ServerMetadataHandle result) {
|
3225
|
+
if (grpc_call_trace.enabled()) {
|
3226
|
+
gpr_log(GPR_INFO, "%s[call] Finish: recv_close_state:%s result:%s",
|
3227
|
+
DebugTag().c_str(), recv_close_op_cancel_state_.ToString().c_str(),
|
3228
|
+
result->DebugString().c_str());
|
3229
|
+
}
|
3230
|
+
const auto status =
|
3231
|
+
result->get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN);
|
3232
|
+
channelz::ServerNode* channelz_node = server_->channelz_node();
|
3233
|
+
if (channelz_node != nullptr) {
|
3234
|
+
if (status == GRPC_STATUS_OK) {
|
3235
|
+
channelz_node->RecordCallSucceeded();
|
3236
|
+
} else {
|
3237
|
+
channelz_node->RecordCallFailed();
|
3238
|
+
}
|
3239
|
+
}
|
3240
|
+
if (recv_close_op_cancel_state_.CompleteCallWithCancelledSetTo(
|
3241
|
+
result->get(GrpcCallWasCancelled()).value_or(true))) {
|
3242
|
+
FinishOpOnCompletion(&recv_close_completion_,
|
3243
|
+
PendingOp::kReceiveCloseOnServer);
|
3244
|
+
}
|
3245
|
+
if (server_initial_metadata_ != nullptr) {
|
3246
|
+
server_initial_metadata_->Close();
|
3247
|
+
}
|
3248
|
+
absl::string_view message_string;
|
3249
|
+
if (Slice* message = result->get_pointer(GrpcMessageMetadata())) {
|
3250
|
+
message_string = message->as_string_view();
|
3251
|
+
}
|
3252
|
+
AcceptTransportStatsFromContext();
|
3253
|
+
if (message_string.empty()) {
|
3254
|
+
RunFinalization(status, nullptr);
|
3255
|
+
} else {
|
3256
|
+
std::string error_string(message_string);
|
3257
|
+
RunFinalization(status, error_string.c_str());
|
3258
|
+
}
|
3259
|
+
set_completed();
|
3260
|
+
ResetDeadline();
|
3261
|
+
PropagateCancellationToChildren();
|
3262
|
+
}
|
3263
|
+
|
3264
|
+
grpc_call_error ServerPromiseBasedCall::ValidateBatch(const grpc_op* ops,
|
3265
|
+
size_t nops) const {
|
3266
|
+
BitSet<8> got_ops;
|
3267
|
+
for (size_t op_idx = 0; op_idx < nops; op_idx++) {
|
3268
|
+
const grpc_op& op = ops[op_idx];
|
3269
|
+
switch (op.op) {
|
3270
|
+
case GRPC_OP_SEND_INITIAL_METADATA:
|
3271
|
+
if (!AreInitialMetadataFlagsValid(op.flags)) {
|
3272
|
+
return GRPC_CALL_ERROR_INVALID_FLAGS;
|
3273
|
+
}
|
3274
|
+
if (!ValidateMetadata(op.data.send_initial_metadata.count,
|
3275
|
+
op.data.send_initial_metadata.metadata)) {
|
3276
|
+
return GRPC_CALL_ERROR_INVALID_METADATA;
|
3277
|
+
}
|
3278
|
+
break;
|
3279
|
+
case GRPC_OP_SEND_MESSAGE:
|
3280
|
+
if (!AreWriteFlagsValid(op.flags)) {
|
3281
|
+
return GRPC_CALL_ERROR_INVALID_FLAGS;
|
3282
|
+
}
|
3283
|
+
break;
|
3284
|
+
case GRPC_OP_RECV_MESSAGE:
|
3285
|
+
case GRPC_OP_RECV_CLOSE_ON_SERVER:
|
3286
|
+
case GRPC_OP_SEND_STATUS_FROM_SERVER:
|
3287
|
+
if (op.flags != 0) return GRPC_CALL_ERROR_INVALID_FLAGS;
|
3288
|
+
break;
|
3289
|
+
case GRPC_OP_RECV_INITIAL_METADATA:
|
3290
|
+
case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
|
3291
|
+
case GRPC_OP_RECV_STATUS_ON_CLIENT:
|
3292
|
+
return GRPC_CALL_ERROR_NOT_ON_SERVER;
|
3293
|
+
}
|
3294
|
+
if (got_ops.is_set(op.op)) return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
|
3295
|
+
got_ops.set(op.op);
|
3296
|
+
}
|
3297
|
+
return GRPC_CALL_OK;
|
3298
|
+
}
|
3299
|
+
|
3300
|
+
void ServerPromiseBasedCall::CommitBatch(const grpc_op* ops, size_t nops,
|
3301
|
+
const Completion& completion) {
|
3302
|
+
Party::BulkSpawner spawner(this);
|
3303
|
+
for (size_t op_idx = 0; op_idx < nops; op_idx++) {
|
3304
|
+
const grpc_op& op = ops[op_idx];
|
3305
|
+
switch (op.op) {
|
3306
|
+
case GRPC_OP_SEND_INITIAL_METADATA: {
|
3307
|
+
auto metadata = arena()->MakePooled<ServerMetadata>(arena());
|
3308
|
+
PrepareOutgoingInitialMetadata(op, *metadata);
|
3309
|
+
CToMetadata(op.data.send_initial_metadata.metadata,
|
3310
|
+
op.data.send_initial_metadata.count, metadata.get());
|
3311
|
+
if (grpc_call_trace.enabled()) {
|
3312
|
+
gpr_log(GPR_INFO, "%s[call] Send initial metadata",
|
3313
|
+
DebugTag().c_str());
|
3314
|
+
}
|
3315
|
+
QueueSend();
|
3316
|
+
spawner.Spawn(
|
3317
|
+
"call_send_initial_metadata",
|
3318
|
+
[this, metadata = std::move(metadata)]() mutable {
|
3319
|
+
EnactSend();
|
3320
|
+
return server_initial_metadata_->Push(std::move(metadata));
|
3321
|
+
},
|
3322
|
+
[this,
|
3323
|
+
completion = AddOpToCompletion(
|
3324
|
+
completion, PendingOp::kSendInitialMetadata)](bool r) mutable {
|
3325
|
+
if (!r) FailCompletion(completion);
|
3326
|
+
FinishOpOnCompletion(&completion,
|
3327
|
+
PendingOp::kSendInitialMetadata);
|
3328
|
+
});
|
3329
|
+
} break;
|
3330
|
+
case GRPC_OP_SEND_MESSAGE:
|
3331
|
+
StartSendMessage(op, completion, server_to_client_messages_, spawner);
|
3332
|
+
break;
|
3333
|
+
case GRPC_OP_RECV_MESSAGE:
|
3334
|
+
if (cancelled_.load(std::memory_order_relaxed)) {
|
3335
|
+
FailCompletion(completion);
|
3336
|
+
break;
|
3337
|
+
}
|
3338
|
+
StartRecvMessage(
|
3339
|
+
op, completion, []() { return []() { return Empty{}; }; },
|
3340
|
+
client_to_server_messages_, true, spawner);
|
3341
|
+
break;
|
3342
|
+
case GRPC_OP_SEND_STATUS_FROM_SERVER: {
|
3343
|
+
auto metadata = arena()->MakePooled<ServerMetadata>(arena());
|
3344
|
+
CToMetadata(op.data.send_status_from_server.trailing_metadata,
|
3345
|
+
op.data.send_status_from_server.trailing_metadata_count,
|
3346
|
+
metadata.get());
|
3347
|
+
metadata->Set(GrpcStatusMetadata(),
|
3348
|
+
op.data.send_status_from_server.status);
|
3349
|
+
if (auto* details = op.data.send_status_from_server.status_details) {
|
3350
|
+
// TODO(ctiller): this should not be a copy, but we have callers that
|
3351
|
+
// allocate and pass in a slice created with
|
3352
|
+
// grpc_slice_from_static_string and then delete the string after
|
3353
|
+
// passing it in, which shouldn't be a supported API.
|
3354
|
+
metadata->Set(GrpcMessageMetadata(),
|
3355
|
+
Slice(grpc_slice_copy(*details)));
|
3356
|
+
}
|
3357
|
+
spawner.Spawn(
|
3358
|
+
"call_send_status_from_server",
|
3359
|
+
[this, metadata = std::move(metadata)]() mutable {
|
3360
|
+
bool r = true;
|
3361
|
+
if (send_trailing_metadata_.is_set()) {
|
3362
|
+
r = false;
|
3363
|
+
} else {
|
3364
|
+
send_trailing_metadata_.Set(std::move(metadata));
|
3365
|
+
}
|
3366
|
+
return Map(WaitForSendingStarted(), [this, r](Empty) {
|
3367
|
+
server_initial_metadata_->Close();
|
3368
|
+
server_to_client_messages_->Close();
|
3369
|
+
return r;
|
3370
|
+
});
|
3371
|
+
},
|
3372
|
+
[this, completion = AddOpToCompletion(
|
3373
|
+
completion, PendingOp::kSendStatusFromServer)](
|
3374
|
+
bool ok) mutable {
|
3375
|
+
if (!ok) FailCompletion(completion);
|
3376
|
+
FinishOpOnCompletion(&completion,
|
3377
|
+
PendingOp::kSendStatusFromServer);
|
3378
|
+
});
|
3379
|
+
} break;
|
3380
|
+
case GRPC_OP_RECV_CLOSE_ON_SERVER:
|
3381
|
+
if (grpc_call_trace.enabled()) {
|
3382
|
+
gpr_log(GPR_INFO, "%s[call] StartBatch: RecvClose %s",
|
3383
|
+
DebugTag().c_str(),
|
3384
|
+
recv_close_op_cancel_state_.ToString().c_str());
|
3385
|
+
}
|
3386
|
+
ForceCompletionSuccess(completion);
|
3387
|
+
recv_close_completion_ =
|
3388
|
+
AddOpToCompletion(completion, PendingOp::kReceiveCloseOnServer);
|
3389
|
+
if (recv_close_op_cancel_state_.ReceiveCloseOnServerOpStarted(
|
3390
|
+
op.data.recv_close_on_server.cancelled)) {
|
3391
|
+
FinishOpOnCompletion(&recv_close_completion_,
|
3392
|
+
PendingOp::kReceiveCloseOnServer);
|
3393
|
+
}
|
3394
|
+
break;
|
3395
|
+
case GRPC_OP_RECV_STATUS_ON_CLIENT:
|
3396
|
+
case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
|
3397
|
+
case GRPC_OP_RECV_INITIAL_METADATA:
|
3398
|
+
abort(); // unreachable
|
3399
|
+
}
|
3400
|
+
}
|
3401
|
+
}
|
3402
|
+
|
3403
|
+
grpc_call_error ServerPromiseBasedCall::StartBatch(const grpc_op* ops,
|
3404
|
+
size_t nops,
|
3405
|
+
void* notify_tag,
|
3406
|
+
bool is_notify_tag_closure) {
|
3407
|
+
if (nops == 0) {
|
3408
|
+
EndOpImmediately(cq(), notify_tag, is_notify_tag_closure);
|
3409
|
+
return GRPC_CALL_OK;
|
3410
|
+
}
|
3411
|
+
const grpc_call_error validation_result = ValidateBatch(ops, nops);
|
3412
|
+
if (validation_result != GRPC_CALL_OK) {
|
3413
|
+
return validation_result;
|
3414
|
+
}
|
3415
|
+
Completion completion =
|
3416
|
+
StartCompletion(notify_tag, is_notify_tag_closure, ops);
|
3417
|
+
CommitBatch(ops, nops, completion);
|
3418
|
+
FinishOpOnCompletion(&completion, PendingOp::kStartingBatch);
|
3419
|
+
return GRPC_CALL_OK;
|
3420
|
+
}
|
3421
|
+
|
3422
|
+
void ServerPromiseBasedCall::CancelWithError(absl::Status error) {
|
3423
|
+
cancelled_.store(true, std::memory_order_relaxed);
|
3424
|
+
Spawn(
|
3425
|
+
"cancel_with_error",
|
3426
|
+
[this, error = std::move(error)]() {
|
3427
|
+
if (!send_trailing_metadata_.is_set()) {
|
3428
|
+
auto md = ServerMetadataFromStatus(error);
|
3429
|
+
md->Set(GrpcCallWasCancelled(), true);
|
3430
|
+
send_trailing_metadata_.Set(std::move(md));
|
3431
|
+
}
|
3432
|
+
if (server_to_client_messages_ != nullptr) {
|
3433
|
+
server_to_client_messages_->Close();
|
3434
|
+
}
|
3435
|
+
if (server_initial_metadata_ != nullptr) {
|
3436
|
+
server_initial_metadata_->Close();
|
3437
|
+
}
|
3438
|
+
return Empty{};
|
3439
|
+
},
|
3440
|
+
[](Empty) {});
|
3441
|
+
}
|
3442
|
+
#endif
|
3443
|
+
|
3444
|
+
#ifdef GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_SERVER_CALL
|
3445
|
+
ArenaPromise<ServerMetadataHandle>
|
3446
|
+
ServerCallContext::MakeTopOfServerCallPromise(
|
3447
|
+
CallArgs call_args, grpc_completion_queue* cq,
|
3448
|
+
grpc_metadata_array* publish_initial_metadata,
|
3449
|
+
absl::FunctionRef<void(grpc_call* call)> publish) {
|
3450
|
+
call_->SetCompletionQueue(cq);
|
3451
|
+
call_args.polling_entity->Set(
|
3452
|
+
grpc_polling_entity_create_from_pollset(grpc_cq_pollset(cq)));
|
3453
|
+
call_->server_to_client_messages_ = call_args.server_to_client_messages;
|
3454
|
+
call_->client_to_server_messages_ = call_args.client_to_server_messages;
|
3455
|
+
call_->server_initial_metadata_ = call_args.server_initial_metadata;
|
3456
|
+
call_->client_initial_metadata_ =
|
3457
|
+
std::move(call_args.client_initial_metadata);
|
3458
|
+
call_->set_send_deadline(call_->deadline());
|
3459
|
+
call_->ProcessIncomingInitialMetadata(*call_->client_initial_metadata_);
|
3460
|
+
PublishMetadataArray(call_->client_initial_metadata_.get(),
|
3461
|
+
publish_initial_metadata);
|
3462
|
+
call_->ExternalRef();
|
3463
|
+
publish(call_->c_ptr());
|
3464
|
+
return Seq(call_->server_to_client_messages_->AwaitClosed(),
|
3465
|
+
call_->send_trailing_metadata_.Wait());
|
3466
|
+
}
|
3467
|
+
#else
|
3468
|
+
ArenaPromise<ServerMetadataHandle>
|
3469
|
+
ServerCallContext::MakeTopOfServerCallPromise(
|
3470
|
+
CallArgs, grpc_completion_queue*, grpc_metadata_array*,
|
3471
|
+
absl::FunctionRef<void(grpc_call*)>) {
|
3472
|
+
(void)call_;
|
3473
|
+
Crash("Promise-based server call is not enabled");
|
3474
|
+
}
|
3475
|
+
#endif
|
3476
|
+
|
3477
|
+
} // namespace grpc_core
|
3478
|
+
|
3479
|
+
///////////////////////////////////////////////////////////////////////////////
|
3480
|
+
// C-based API
|
3481
|
+
|
3482
|
+
void* grpc_call_arena_alloc(grpc_call* call, size_t size) {
|
3483
|
+
grpc_core::ExecCtx exec_ctx;
|
3484
|
+
return grpc_core::Call::FromC(call)->arena()->Alloc(size);
|
3485
|
+
}
|
3486
|
+
|
3487
|
+
size_t grpc_call_get_initial_size_estimate() {
|
3488
|
+
return grpc_core::FilterStackCall::InitialSizeEstimate();
|
3489
|
+
}
|
3490
|
+
|
3491
|
+
grpc_error_handle grpc_call_create(grpc_call_create_args* args,
|
3492
|
+
grpc_call** out_call) {
|
3493
|
+
#ifdef GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_CLIENT_CALL
|
3494
|
+
if (grpc_core::IsPromiseBasedClientCallEnabled() &&
|
3495
|
+
args->server_transport_data == nullptr && args->channel->is_promising()) {
|
3496
|
+
return grpc_core::MakePromiseBasedCall<grpc_core::ClientPromiseBasedCall>(
|
3497
|
+
args, out_call);
|
3498
|
+
}
|
3499
|
+
#endif
|
3500
|
+
#ifdef GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_SERVER_CALL
|
3501
|
+
if (grpc_core::IsPromiseBasedServerCallEnabled() &&
|
3502
|
+
args->server_transport_data != nullptr && args->channel->is_promising()) {
|
3503
|
+
return grpc_core::MakePromiseBasedCall<grpc_core::ServerPromiseBasedCall>(
|
3504
|
+
args, out_call);
|
3505
|
+
}
|
3506
|
+
#endif
|
3507
|
+
return grpc_core::FilterStackCall::Create(args, out_call);
|
3508
|
+
}
|
3509
|
+
|
3510
|
+
void grpc_call_set_completion_queue(grpc_call* call,
|
3511
|
+
grpc_completion_queue* cq) {
|
3512
|
+
grpc_core::Call::FromC(call)->SetCompletionQueue(cq);
|
3513
|
+
}
|
3514
|
+
|
3515
|
+
void grpc_call_ref(grpc_call* c) { grpc_core::Call::FromC(c)->ExternalRef(); }
|
3516
|
+
|
3517
|
+
void grpc_call_unref(grpc_call* c) {
|
3518
|
+
grpc_core::ExecCtx exec_ctx;
|
3519
|
+
grpc_core::Call::FromC(c)->ExternalUnref();
|
3520
|
+
}
|
3521
|
+
|
3522
|
+
char* grpc_call_get_peer(grpc_call* call) {
|
3523
|
+
return grpc_core::Call::FromC(call)->GetPeer();
|
3524
|
+
}
|
3525
|
+
|
3526
|
+
grpc_call* grpc_call_from_top_element(grpc_call_element* surface_element) {
|
3527
|
+
return grpc_core::FilterStackCall::FromTopElem(surface_element)->c_ptr();
|
3528
|
+
}
|
3529
|
+
|
3530
|
+
grpc_call_error grpc_call_cancel(grpc_call* call, void* reserved) {
|
3531
|
+
GRPC_API_TRACE("grpc_call_cancel(call=%p, reserved=%p)", 2, (call, reserved));
|
3532
|
+
GPR_ASSERT(reserved == nullptr);
|
3533
|
+
if (call == nullptr) {
|
3534
|
+
return GRPC_CALL_ERROR;
|
3535
|
+
}
|
3536
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
3537
|
+
grpc_core::ExecCtx exec_ctx;
|
3538
|
+
grpc_core::Call::FromC(call)->CancelWithError(absl::CancelledError());
|
3539
|
+
return GRPC_CALL_OK;
|
3540
|
+
}
|
3541
|
+
|
3542
|
+
grpc_call_error grpc_call_cancel_with_status(grpc_call* c,
|
3543
|
+
grpc_status_code status,
|
3544
|
+
const char* description,
|
3545
|
+
void* reserved) {
|
3546
|
+
GRPC_API_TRACE(
|
3547
|
+
"grpc_call_cancel_with_status("
|
3548
|
+
"c=%p, status=%d, description=%s, reserved=%p)",
|
3549
|
+
4, (c, (int)status, description, reserved));
|
3550
|
+
GPR_ASSERT(reserved == nullptr);
|
3551
|
+
if (c == nullptr) {
|
3552
|
+
return GRPC_CALL_ERROR;
|
3553
|
+
}
|
1796
3554
|
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
1797
3555
|
grpc_core::ExecCtx exec_ctx;
|
1798
3556
|
grpc_core::Call::FromC(c)->CancelWithStatus(status, description);
|
@@ -1800,7 +3558,7 @@ grpc_call_error grpc_call_cancel_with_status(grpc_call* c,
|
|
1800
3558
|
}
|
1801
3559
|
|
1802
3560
|
void grpc_call_cancel_internal(grpc_call* call) {
|
1803
|
-
grpc_core::Call::FromC(call)->CancelWithError(
|
3561
|
+
grpc_core::Call::FromC(call)->CancelWithError(absl::CancelledError());
|
1804
3562
|
}
|
1805
3563
|
|
1806
3564
|
grpc_compression_algorithm grpc_call_test_only_get_compression_algorithm(
|
@@ -1813,7 +3571,9 @@ uint32_t grpc_call_test_only_get_message_flags(grpc_call* call) {
|
|
1813
3571
|
}
|
1814
3572
|
|
1815
3573
|
uint32_t grpc_call_test_only_get_encodings_accepted_by_peer(grpc_call* call) {
|
1816
|
-
return grpc_core::Call::FromC(call)
|
3574
|
+
return grpc_core::Call::FromC(call)
|
3575
|
+
->encodings_accepted_by_peer()
|
3576
|
+
.ToLegacyBitmask();
|
1817
3577
|
}
|
1818
3578
|
|
1819
3579
|
grpc_core::Arena* grpc_call_get_arena(grpc_call* call) {
|
@@ -1831,7 +3591,7 @@ grpc_call_error grpc_call_start_batch(grpc_call* call, const grpc_op* ops,
|
|
1831
3591
|
"reserved=%p)",
|
1832
3592
|
5, (call, ops, (unsigned long)nops, tag, reserved));
|
1833
3593
|
|
1834
|
-
if (reserved != nullptr) {
|
3594
|
+
if (reserved != nullptr || call == nullptr) {
|
1835
3595
|
return GRPC_CALL_ERROR;
|
1836
3596
|
} else {
|
1837
3597
|
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
@@ -1862,7 +3622,9 @@ uint8_t grpc_call_is_client(grpc_call* call) {
|
|
1862
3622
|
|
1863
3623
|
grpc_compression_algorithm grpc_call_compression_for_level(
|
1864
3624
|
grpc_call* call, grpc_compression_level level) {
|
1865
|
-
return grpc_core::Call::FromC(call)
|
3625
|
+
return grpc_core::Call::FromC(call)
|
3626
|
+
->encodings_accepted_by_peer()
|
3627
|
+
.CompressionAlgorithmForLevel(level);
|
1866
3628
|
}
|
1867
3629
|
|
1868
3630
|
bool grpc_call_is_trailers_only(const grpc_call* call) {
|