grpc 1.53.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.

Files changed (1668) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +218 -143
  3. data/include/grpc/event_engine/event_engine.h +34 -17
  4. data/include/grpc/grpc_audit_logging.h +96 -0
  5. data/include/grpc/grpc_security.h +4 -0
  6. data/include/grpc/impl/grpc_types.h +13 -2
  7. data/include/grpc/module.modulemap +2 -0
  8. data/include/grpc/support/json.h +218 -0
  9. data/include/grpc/support/port_platform.h +4 -4
  10. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +17 -1
  11. data/src/core/ext/filters/client_channel/backend_metric.cc +10 -1
  12. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -11
  13. data/src/core/ext/filters/client_channel/backup_poller.h +0 -3
  14. data/src/core/ext/filters/client_channel/channel_connectivity.cc +4 -4
  15. data/src/core/ext/filters/client_channel/client_channel.cc +911 -898
  16. data/src/core/ext/filters/client_channel/client_channel.h +145 -177
  17. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +20 -19
  18. data/src/core/ext/filters/client_channel/client_channel_internal.h +77 -0
  19. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +2 -2
  20. data/src/core/ext/filters/client_channel/config_selector.h +13 -39
  21. data/src/core/ext/filters/client_channel/http_proxy.cc +35 -2
  22. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +9 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +24 -24
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  26. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
  28. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +2 -7
  30. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +56 -24
  31. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +23 -2
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -6
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +3 -11
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +150 -158
  35. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +18 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +54 -66
  37. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +20 -14
  38. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +36 -13
  39. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +76 -6
  40. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +83 -53
  41. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +17 -15
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +54 -49
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +12 -13
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +18 -23
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +48 -51
  46. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +12 -17
  47. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +16 -22
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +46 -153
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.h +30 -0
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +4 -4
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +35 -33
  52. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.cc +60 -0
  53. data/src/core/ext/filters/client_channel/resolver/dns/{dns_resolver_selection.h → dns_resolver_plugin.h} +10 -12
  54. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +549 -0
  55. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.h +35 -0
  56. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +97 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.h +32 -0
  58. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +19 -36
  59. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.h +24 -0
  60. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +61 -207
  61. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -2
  62. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +1 -2
  63. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +160 -68
  64. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +16 -1
  65. data/src/core/ext/filters/client_channel/retry_filter.cc +117 -156
  66. data/src/core/ext/filters/client_channel/retry_service_config.cc +9 -8
  67. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +10 -40
  68. data/src/core/ext/filters/client_channel/subchannel.cc +12 -200
  69. data/src/core/ext/filters/client_channel/subchannel.h +3 -43
  70. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +26 -27
  71. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +8 -5
  72. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +1 -1
  73. data/src/core/ext/filters/http/client/http_client_filter.cc +3 -3
  74. data/src/core/ext/filters/http/http_filters_plugin.cc +1 -12
  75. data/src/core/ext/filters/http/message_compress/compression_filter.cc +30 -14
  76. data/src/core/ext/filters/message_size/message_size_filter.cc +141 -224
  77. data/src/core/ext/filters/message_size/message_size_filter.h +48 -3
  78. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +168 -75
  79. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -8
  80. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +10 -9
  81. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +16 -1
  82. data/src/core/ext/gcp/metadata_query.cc +137 -0
  83. data/src/core/ext/gcp/metadata_query.h +87 -0
  84. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +70 -55
  85. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +12 -8
  86. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +5 -1
  87. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +226 -82
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +21 -0
  89. data/src/core/ext/transport/chttp2/transport/context_list_entry.h +70 -0
  90. data/src/core/ext/transport/chttp2/transport/flow_control.cc +51 -97
  91. data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -1
  92. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +1 -7
  93. data/src/core/ext/transport/chttp2/transport/frame_ping.h +0 -3
  94. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +4 -1
  95. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +118 -222
  96. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +296 -113
  97. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -0
  98. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
  99. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +466 -273
  100. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +7 -3
  101. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +15 -12
  102. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +9 -1
  103. data/src/core/ext/transport/chttp2/transport/internal.h +21 -21
  104. data/src/core/ext/transport/chttp2/transport/parsing.cc +9 -2
  105. data/src/core/ext/transport/chttp2/transport/writing.cc +24 -8
  106. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -14
  107. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +87 -52
  108. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +414 -181
  109. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -60
  110. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +481 -224
  111. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +90 -55
  112. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +415 -188
  113. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +357 -210
  114. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1572 -729
  115. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +30 -17
  116. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +144 -47
  117. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +34 -21
  118. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +160 -62
  119. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +27 -14
  120. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +78 -38
  121. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +20 -11
  122. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +48 -26
  123. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +20 -11
  124. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +48 -26
  125. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +109 -62
  126. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +566 -244
  127. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +21 -12
  128. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +45 -30
  129. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +22 -19
  130. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +82 -29
  131. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +23 -16
  132. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +45 -30
  133. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +230 -143
  134. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +733 -404
  135. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +417 -262
  136. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1850 -888
  137. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -41
  138. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +286 -148
  139. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +531 -334
  140. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +2017 -1131
  141. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +21 -12
  142. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +45 -30
  143. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +89 -52
  144. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +347 -232
  145. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +264 -165
  146. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +888 -476
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +139 -80
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +527 -274
  149. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +22 -13
  150. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +50 -36
  151. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +380 -221
  152. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1168 -611
  153. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +166 -94
  154. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +666 -292
  155. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +18 -11
  156. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +37 -26
  157. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +21 -12
  158. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +45 -30
  159. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +30 -17
  160. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +144 -47
  161. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +274 -167
  162. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +789 -440
  163. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +228 -137
  164. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +1100 -501
  165. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +22 -13
  166. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +60 -37
  167. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +350 -209
  168. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1083 -635
  169. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +44 -11
  170. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +175 -18
  171. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +34 -19
  172. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +118 -56
  173. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +38 -21
  174. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +148 -64
  175. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +31 -18
  176. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +143 -65
  177. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +22 -13
  178. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +51 -37
  179. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +78 -43
  180. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +265 -127
  181. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +145 -88
  182. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +438 -241
  183. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +115 -62
  184. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +559 -227
  185. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +18 -11
  186. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +35 -26
  187. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +187 -109
  188. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +956 -421
  189. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +172 -95
  190. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +864 -374
  191. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +49 -25
  192. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +171 -100
  193. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +39 -18
  194. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +74 -56
  195. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +28 -15
  196. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +71 -45
  197. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +131 -74
  198. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +489 -249
  199. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +135 -80
  200. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +505 -245
  201. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +256 -129
  202. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +996 -397
  203. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +80 -49
  204. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +616 -201
  205. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +1283 -774
  206. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +5430 -2509
  207. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +49 -28
  208. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +164 -84
  209. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +228 -141
  210. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +738 -399
  211. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +20 -11
  212. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +48 -26
  213. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +21 -12
  214. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +45 -30
  215. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +32 -19
  216. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +70 -49
  217. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +27 -14
  218. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +110 -43
  219. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +46 -25
  220. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +259 -100
  221. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +21 -13
  222. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +45 -30
  223. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +18 -11
  224. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +35 -26
  225. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +42 -23
  226. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +108 -70
  227. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +7 -4
  228. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +21 -16
  229. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +43 -24
  230. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +110 -75
  231. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +30 -17
  232. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +95 -50
  233. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +16 -9
  234. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +73 -23
  235. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +60 -37
  236. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +150 -108
  237. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +74 -43
  238. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +357 -167
  239. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +44 -25
  240. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +114 -80
  241. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -20
  242. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +245 -82
  243. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +32 -19
  244. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +73 -51
  245. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +474 -292
  246. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2144 -1055
  247. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +18 -11
  248. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +35 -26
  249. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +34 -19
  250. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +125 -67
  251. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +72 -45
  252. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +193 -138
  253. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +34 -19
  254. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +131 -66
  255. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +18 -11
  256. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +35 -26
  257. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +7 -4
  258. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +15 -10
  259. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +184 -96
  260. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +907 -360
  261. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +56 -33
  262. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +150 -101
  263. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +188 -111
  264. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +816 -419
  265. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +32 -19
  266. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +109 -53
  267. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +10 -7
  268. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +18 -14
  269. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +300 -177
  270. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +1284 -522
  271. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +42 -23
  272. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +188 -75
  273. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +130 -83
  274. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +510 -238
  275. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +22 -13
  276. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +55 -34
  277. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +39 -26
  278. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +124 -68
  279. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +21 -12
  280. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +47 -30
  281. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +60 -26
  282. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +130 -51
  283. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +37 -20
  284. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +133 -63
  285. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +22 -13
  286. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +91 -40
  287. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +21 -12
  288. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +50 -32
  289. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +18 -11
  290. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +37 -26
  291. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +46 -27
  292. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +101 -70
  293. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +13 -10
  294. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +25 -22
  295. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +40 -23
  296. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +161 -75
  297. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +31 -18
  298. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +114 -56
  299. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +46 -29
  300. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +139 -91
  301. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +65 -42
  302. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +200 -121
  303. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +80 -45
  304. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +208 -131
  305. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +34 -21
  306. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +74 -53
  307. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +7 -4
  308. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +13 -8
  309. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +16 -9
  310. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +28 -18
  311. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +28 -15
  312. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +55 -34
  313. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +43 -22
  314. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +91 -53
  315. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +35 -20
  316. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +92 -57
  317. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +7 -4
  318. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +13 -8
  319. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +20 -11
  320. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +48 -26
  321. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +23 -14
  322. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +61 -41
  323. data/src/core/ext/upb-generated/google/api/annotations.upb.c +14 -11
  324. data/src/core/ext/upb-generated/google/api/annotations.upb.h +30 -20
  325. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +255 -154
  326. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +934 -450
  327. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +299 -180
  328. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +946 -483
  329. data/src/core/ext/upb-generated/google/api/http.upb.c +68 -35
  330. data/src/core/ext/upb-generated/google/api/http.upb.h +284 -120
  331. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +22 -13
  332. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +95 -37
  333. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +19 -10
  334. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +38 -22
  335. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +1018 -424
  336. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +3851 -1412
  337. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +19 -10
  338. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +38 -22
  339. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +10 -7
  340. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +18 -14
  341. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +62 -39
  342. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +207 -102
  343. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +19 -10
  344. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +38 -22
  345. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +90 -51
  346. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +157 -107
  347. data/src/core/ext/upb-generated/google/rpc/status.upb.c +22 -13
  348. data/src/core/ext/upb-generated/google/rpc/status.upb.h +95 -37
  349. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +59 -34
  350. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +154 -92
  351. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +43 -24
  352. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +118 -60
  353. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +250 -145
  354. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +919 -415
  355. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +34 -19
  356. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +76 -51
  357. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +25 -14
  358. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +45 -30
  359. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +144 -81
  360. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +405 -217
  361. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +51 -26
  362. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +153 -61
  363. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +173 -102
  364. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +855 -298
  365. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +68 -49
  366. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +155 -104
  367. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +26 -17
  368. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +55 -34
  369. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +12 -9
  370. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +31 -14
  371. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +26 -17
  372. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +55 -34
  373. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +23 -16
  374. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +45 -30
  375. data/src/core/ext/upb-generated/validate/validate.upb.c +845 -455
  376. data/src/core/ext/upb-generated/validate/validate.upb.h +4347 -1908
  377. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +68 -49
  378. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +155 -104
  379. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +26 -17
  380. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +55 -34
  381. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +12 -9
  382. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +31 -14
  383. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +65 -44
  384. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +137 -91
  385. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +23 -16
  386. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +45 -30
  387. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +16 -9
  388. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +28 -18
  389. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +21 -12
  390. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +45 -30
  391. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +37 -22
  392. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +96 -63
  393. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +26 -17
  394. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +52 -29
  395. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +21 -12
  396. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +45 -30
  397. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +23 -14
  398. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +62 -42
  399. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +44 -25
  400. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +169 -79
  401. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +27 -14
  402. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +65 -38
  403. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +86 -31
  404. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +218 -58
  405. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +21 -12
  406. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +89 -34
  407. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +18 -11
  408. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +35 -26
  409. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +32 -19
  410. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +150 -54
  411. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +10 -7
  412. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +18 -14
  413. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +34 -21
  414. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +161 -63
  415. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +162 -101
  416. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +501 -293
  417. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +85 -52
  418. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +430 -164
  419. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +24 -15
  420. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +53 -37
  421. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +40 -23
  422. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +161 -75
  423. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +37 -22
  424. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +92 -66
  425. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +43 -22
  426. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +91 -53
  427. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +21 -12
  428. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +45 -30
  429. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +1 -1
  430. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +6 -5
  431. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +1 -1
  432. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +6 -5
  433. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +1 -1
  434. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +6 -5
  435. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +1 -1
  436. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +6 -5
  437. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +1 -1
  438. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +6 -5
  439. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +1 -1
  440. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +6 -5
  441. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +1 -1
  442. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +6 -5
  443. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +1 -1
  444. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +6 -5
  445. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +1 -1
  446. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +6 -5
  447. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +1 -1
  448. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +6 -5
  449. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +1 -1
  450. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +6 -5
  451. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +1 -1
  452. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +6 -5
  453. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +1 -1
  454. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +6 -5
  455. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +1 -1
  456. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +6 -5
  457. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +251 -248
  458. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +6 -5
  459. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +1 -1
  460. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +6 -5
  461. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +1 -1
  462. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +6 -5
  463. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +1 -1
  464. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +6 -5
  465. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +1 -1
  466. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +6 -5
  467. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +1 -1
  468. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +6 -5
  469. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +1 -1
  470. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +6 -5
  471. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +1 -1
  472. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +6 -5
  473. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +1 -1
  474. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +6 -5
  475. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +13 -12
  476. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +11 -5
  477. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +1 -1
  478. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +6 -5
  479. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +1 -1
  480. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +6 -5
  481. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +1 -1
  482. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +6 -5
  483. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +1 -1
  484. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +6 -5
  485. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +1 -1
  486. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +6 -5
  487. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +1 -1
  488. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +6 -5
  489. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +140 -137
  490. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +6 -5
  491. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +32 -16
  492. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +11 -5
  493. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +1 -1
  494. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +6 -5
  495. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +1 -1
  496. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +6 -5
  497. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +1 -1
  498. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +6 -5
  499. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +1 -1
  500. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +6 -5
  501. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +1 -1
  502. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +6 -5
  503. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +1 -1
  504. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +6 -5
  505. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +1 -1
  506. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +6 -5
  507. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +1 -1
  508. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +6 -5
  509. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +13 -10
  510. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +21 -5
  511. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +1 -1
  512. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +6 -5
  513. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +55 -46
  514. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +6 -5
  515. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +1 -1
  516. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +6 -5
  517. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +1 -1
  518. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +6 -5
  519. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +1 -1
  520. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +6 -5
  521. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +1 -1
  522. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +6 -5
  523. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +142 -120
  524. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +16 -5
  525. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +1 -1
  526. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +6 -5
  527. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +101 -98
  528. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +6 -5
  529. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +1 -1
  530. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +6 -5
  531. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +1 -1
  532. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +6 -5
  533. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +1 -1
  534. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +6 -5
  535. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +1 -1
  536. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +6 -5
  537. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +1 -1
  538. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +6 -5
  539. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +1 -1
  540. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +6 -5
  541. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +1 -1
  542. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +6 -5
  543. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +16 -19
  544. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +6 -5
  545. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +1 -1
  546. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +6 -5
  547. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +1 -1
  548. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +6 -5
  549. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +1 -1
  550. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +6 -5
  551. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +1 -1
  552. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +6 -5
  553. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +1 -1
  554. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +6 -5
  555. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +1 -1
  556. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +6 -5
  557. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +1 -1
  558. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +6 -5
  559. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +1 -1
  560. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +6 -5
  561. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +1 -1
  562. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +6 -5
  563. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +1 -1
  564. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +6 -5
  565. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +1 -1
  566. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +6 -5
  567. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +126 -115
  568. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +6 -5
  569. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +1 -1
  570. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +6 -5
  571. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +1 -1
  572. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +6 -5
  573. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +138 -136
  574. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +6 -5
  575. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +1 -1
  576. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +6 -5
  577. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +118 -118
  578. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +6 -5
  579. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +1 -1
  580. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +6 -5
  581. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +6 -6
  582. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +6 -5
  583. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +1 -1
  584. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +6 -5
  585. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +6 -6
  586. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +6 -5
  587. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +12 -13
  588. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +6 -5
  589. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +1 -1
  590. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +6 -5
  591. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +1 -1
  592. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +6 -5
  593. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +1 -1
  594. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +6 -5
  595. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +13 -10
  596. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +11 -5
  597. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +1 -1
  598. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +6 -5
  599. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +1 -1
  600. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +6 -5
  601. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +1 -1
  602. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +6 -5
  603. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +1 -1
  604. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +6 -5
  605. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +1 -1
  606. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +6 -5
  607. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +1 -1
  608. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +6 -5
  609. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +1 -1
  610. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +6 -5
  611. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +1 -1
  612. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +6 -5
  613. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +1 -1
  614. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +6 -5
  615. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +1 -1
  616. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +6 -5
  617. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +1 -1
  618. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +6 -5
  619. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +1 -1
  620. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +6 -5
  621. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +1 -1
  622. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +6 -5
  623. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +1 -1
  624. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +6 -5
  625. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +1 -1
  626. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +6 -5
  627. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +1 -1
  628. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +6 -5
  629. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +1 -1
  630. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +6 -5
  631. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +1 -1
  632. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +6 -5
  633. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +1 -1
  634. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +6 -5
  635. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +1 -1
  636. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +6 -5
  637. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +1 -1
  638. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +6 -5
  639. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +1 -1
  640. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +6 -5
  641. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +1 -1
  642. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +6 -5
  643. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +1 -1
  644. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +6 -5
  645. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +1 -1
  646. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +6 -5
  647. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +1 -1
  648. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +6 -5
  649. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +329 -273
  650. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +11 -5
  651. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +1 -1
  652. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +6 -5
  653. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +1 -1
  654. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +6 -5
  655. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +1 -1
  656. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +6 -5
  657. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +1 -1
  658. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +6 -5
  659. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +1 -1
  660. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +6 -5
  661. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +1 -1
  662. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +6 -5
  663. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +1 -1
  664. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +6 -5
  665. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +1 -1
  666. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +6 -5
  667. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +1 -1
  668. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +6 -5
  669. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +1 -1
  670. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +6 -5
  671. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +1 -1
  672. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +6 -5
  673. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +1 -1
  674. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +6 -5
  675. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +1 -1
  676. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +6 -5
  677. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +1 -1
  678. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +6 -5
  679. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +1 -1
  680. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +6 -5
  681. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +1 -1
  682. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +6 -5
  683. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +1 -1
  684. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +6 -5
  685. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +1 -1
  686. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +6 -5
  687. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +1 -1
  688. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +6 -5
  689. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +1 -1
  690. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +6 -5
  691. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +1 -1
  692. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +6 -5
  693. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +1 -1
  694. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +6 -5
  695. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +1 -1
  696. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +6 -5
  697. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +1 -1
  698. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +6 -5
  699. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +1 -1
  700. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +6 -5
  701. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +1 -1
  702. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +6 -5
  703. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +1 -1
  704. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +6 -5
  705. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +1 -1
  706. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +6 -5
  707. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +1 -1
  708. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +6 -5
  709. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +1 -1
  710. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +6 -5
  711. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +1 -1
  712. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +6 -5
  713. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +1 -1
  714. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +6 -5
  715. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +1 -1
  716. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +6 -5
  717. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +1 -1
  718. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +6 -5
  719. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +1 -1
  720. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +6 -5
  721. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +1 -1
  722. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +6 -5
  723. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +1 -1
  724. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +6 -5
  725. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +1 -1
  726. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +6 -5
  727. data/src/core/ext/xds/certificate_provider_store.cc +8 -13
  728. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  729. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
  730. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
  731. data/src/core/ext/xds/upb_utils.h +1 -1
  732. data/src/core/ext/xds/xds_api.cc +41 -18
  733. data/src/core/ext/xds/xds_api.h +5 -4
  734. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  735. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  736. data/src/core/ext/xds/xds_bootstrap.cc +3 -3
  737. data/src/core/ext/xds/xds_bootstrap_grpc.cc +35 -23
  738. data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
  739. data/src/core/ext/xds/xds_channel_stack_modifier.cc +1 -2
  740. data/src/core/ext/xds/xds_client.cc +29 -7
  741. data/src/core/ext/xds/xds_client.h +1 -1
  742. data/src/core/ext/xds/xds_client_stats.cc +29 -15
  743. data/src/core/ext/xds/xds_client_stats.h +24 -20
  744. data/src/core/ext/xds/xds_cluster.cc +44 -51
  745. data/src/core/ext/xds/xds_cluster.h +1 -2
  746. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +15 -11
  747. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +2 -2
  748. data/src/core/ext/xds/xds_common_types.cc +8 -5
  749. data/src/core/ext/xds/xds_endpoint.cc +10 -4
  750. data/src/core/ext/xds/xds_endpoint.h +10 -2
  751. data/src/core/ext/xds/xds_http_fault_filter.cc +18 -15
  752. data/src/core/ext/xds/xds_http_fault_filter.h +3 -2
  753. data/src/core/ext/xds/xds_http_filters.h +7 -4
  754. data/src/core/ext/xds/xds_http_rbac_filter.cc +159 -74
  755. data/src/core/ext/xds/xds_http_rbac_filter.h +3 -2
  756. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +17 -13
  757. data/src/core/ext/xds/xds_http_stateful_session_filter.h +3 -2
  758. data/src/core/ext/xds/xds_lb_policy_registry.cc +36 -35
  759. data/src/core/ext/xds/xds_listener.cc +11 -4
  760. data/src/core/ext/xds/xds_listener.h +1 -1
  761. data/src/core/ext/xds/xds_resource_type.h +2 -2
  762. data/src/core/ext/xds/xds_route_config.cc +48 -8
  763. data/src/core/ext/xds/xds_route_config.h +1 -1
  764. data/src/core/ext/xds/xds_routing.cc +2 -2
  765. data/src/core/ext/xds/xds_transport_grpc.cc +4 -2
  766. data/src/core/lib/avl/avl.h +5 -0
  767. data/src/core/lib/backoff/random_early_detection.cc +31 -0
  768. data/src/core/lib/backoff/random_early_detection.h +59 -0
  769. data/src/core/lib/channel/call_finalization.h +1 -1
  770. data/src/core/lib/channel/call_tracer.cc +51 -0
  771. data/src/core/lib/channel/call_tracer.h +101 -38
  772. data/src/core/lib/channel/channel_args.cc +80 -22
  773. data/src/core/lib/channel/channel_args.h +34 -1
  774. data/src/core/lib/channel/channel_trace.cc +16 -12
  775. data/src/core/lib/channel/channelz.cc +163 -135
  776. data/src/core/lib/channel/channelz.h +42 -35
  777. data/src/core/lib/channel/channelz_registry.cc +24 -20
  778. data/src/core/lib/channel/connected_channel.cc +542 -1043
  779. data/src/core/lib/channel/context.h +8 -1
  780. data/src/core/lib/channel/promise_based_filter.cc +100 -46
  781. data/src/core/lib/channel/promise_based_filter.h +29 -13
  782. data/src/core/lib/channel/server_call_tracer_filter.cc +110 -0
  783. data/src/core/lib/compression/compression_internal.cc +2 -5
  784. data/src/core/lib/config/config_vars.cc +153 -0
  785. data/src/core/lib/config/config_vars.h +127 -0
  786. data/src/core/lib/config/config_vars_non_generated.cc +51 -0
  787. data/src/core/lib/config/load_config.cc +79 -0
  788. data/src/core/lib/config/load_config.h +55 -0
  789. data/src/core/lib/debug/event_log.h +1 -1
  790. data/src/core/lib/debug/stats_data.h +1 -1
  791. data/src/core/lib/debug/trace.cc +38 -61
  792. data/src/core/lib/debug/trace.h +14 -9
  793. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  794. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  795. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  796. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  797. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  798. data/src/core/lib/event_engine/default_event_engine.cc +13 -1
  799. data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
  800. data/src/core/lib/event_engine/event_engine.cc +37 -2
  801. data/src/core/lib/event_engine/handle_containers.h +7 -22
  802. data/src/core/lib/event_engine/memory_allocator_factory.h +47 -0
  803. data/src/core/lib/event_engine/poller.h +2 -2
  804. data/src/core/lib/event_engine/posix.h +4 -0
  805. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
  806. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +0 -4
  807. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +3 -9
  808. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
  809. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +48 -15
  810. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +17 -8
  811. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +47 -50
  812. data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -1
  813. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +9 -6
  814. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -8
  815. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +33 -19
  816. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +3 -3
  817. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  818. data/src/core/lib/event_engine/resolved_address.cc +2 -1
  819. data/src/core/lib/event_engine/shim.cc +9 -1
  820. data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
  821. data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
  822. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  823. data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
  824. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  825. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  826. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  827. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
  828. data/src/core/lib/event_engine/trace.cc +1 -0
  829. data/src/core/lib/event_engine/trace.h +6 -0
  830. data/src/core/lib/event_engine/windows/iocp.cc +4 -3
  831. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  832. data/src/core/lib/event_engine/windows/win_socket.cc +6 -7
  833. data/src/core/lib/event_engine/windows/win_socket.h +4 -4
  834. data/src/core/lib/event_engine/windows/windows_endpoint.cc +135 -87
  835. data/src/core/lib/event_engine/windows/windows_endpoint.h +23 -6
  836. data/src/core/lib/event_engine/windows/windows_engine.cc +55 -32
  837. data/src/core/lib/event_engine/windows/windows_engine.h +8 -7
  838. data/src/core/lib/event_engine/windows/windows_listener.cc +370 -0
  839. data/src/core/lib/event_engine/windows/windows_listener.h +156 -0
  840. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  841. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  842. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  843. data/src/core/lib/experiments/config.cc +41 -17
  844. data/src/core/lib/experiments/config.h +16 -0
  845. data/src/core/lib/experiments/experiments.cc +74 -17
  846. data/src/core/lib/experiments/experiments.h +35 -18
  847. data/src/core/lib/gpr/log.cc +15 -28
  848. data/src/core/lib/gpr/log_internal.h +55 -0
  849. data/src/core/lib/gpr/{time_posix.cc → posix/time.cc} +5 -0
  850. data/src/core/lib/gprpp/crash.cc +10 -0
  851. data/src/core/lib/gprpp/crash.h +3 -0
  852. data/src/core/lib/gprpp/fork.cc +8 -14
  853. data/src/core/lib/gprpp/orphanable.h +4 -3
  854. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  855. data/src/core/lib/gprpp/per_cpu.h +33 -4
  856. data/src/core/lib/gprpp/{thd_posix.cc → posix/thd.cc} +49 -37
  857. data/src/core/lib/gprpp/ref_counted.h +33 -34
  858. data/src/core/lib/gprpp/status_helper.cc +2 -2
  859. data/src/core/lib/gprpp/thd.h +16 -0
  860. data/src/core/lib/gprpp/time.cc +2 -0
  861. data/src/core/lib/gprpp/time.h +4 -4
  862. data/src/core/lib/gprpp/validation_errors.cc +8 -3
  863. data/src/core/lib/gprpp/validation_errors.h +16 -9
  864. data/src/core/lib/gprpp/{thd_windows.cc → windows/thd.cc} +2 -2
  865. data/src/core/lib/iomgr/buffer_list.h +0 -1
  866. data/src/core/lib/iomgr/call_combiner.h +2 -2
  867. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  868. data/src/core/lib/iomgr/endpoint_cfstream.cc +14 -10
  869. data/src/core/lib/iomgr/endpoint_pair.h +2 -2
  870. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
  871. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  872. data/src/core/lib/iomgr/ev_apple.cc +12 -12
  873. data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
  874. data/src/core/lib/iomgr/ev_posix.cc +13 -53
  875. data/src/core/lib/iomgr/ev_posix.h +0 -3
  876. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +118 -77
  877. data/src/core/lib/iomgr/iocp_windows.cc +24 -3
  878. data/src/core/lib/iomgr/iocp_windows.h +11 -0
  879. data/src/core/lib/iomgr/iomgr.cc +4 -8
  880. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
  881. data/src/core/lib/iomgr/iomgr_windows.cc +8 -2
  882. data/src/core/lib/iomgr/pollset_set_windows.cc +9 -9
  883. data/src/core/lib/iomgr/pollset_windows.cc +1 -1
  884. data/src/core/lib/iomgr/socket_utils_common_posix.cc +20 -5
  885. data/src/core/lib/iomgr/socket_utils_posix.cc +3 -0
  886. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  887. data/src/core/lib/iomgr/socket_windows.cc +61 -7
  888. data/src/core/lib/iomgr/socket_windows.h +9 -2
  889. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
  890. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -0
  891. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -2
  892. data/src/core/lib/iomgr/tcp_posix.cc +0 -1
  893. data/src/core/lib/iomgr/tcp_server_posix.cc +150 -120
  894. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  895. data/src/core/lib/iomgr/tcp_server_windows.cc +176 -9
  896. data/src/core/lib/iomgr/tcp_windows.cc +12 -8
  897. data/src/core/lib/iomgr/timer_generic.cc +17 -16
  898. data/src/core/lib/json/json.h +2 -218
  899. data/src/core/lib/json/json_object_loader.cc +24 -25
  900. data/src/core/lib/json/json_object_loader.h +30 -18
  901. data/src/core/lib/json/json_reader.cc +69 -42
  902. data/src/core/{ext/filters/client_channel/lb_call_state_internal.h → lib/json/json_reader.h} +7 -12
  903. data/src/core/lib/json/json_util.cc +10 -15
  904. data/src/core/lib/json/json_util.h +5 -4
  905. data/src/core/lib/json/json_writer.cc +24 -25
  906. data/src/core/lib/{security/security_connector/ssl_utils_config.h → json/json_writer.h} +14 -10
  907. data/src/core/lib/load_balancing/lb_policy.cc +9 -13
  908. data/src/core/lib/load_balancing/lb_policy.h +17 -2
  909. data/src/core/lib/load_balancing/lb_policy_registry.cc +9 -8
  910. data/src/core/lib/matchers/matchers.cc +3 -4
  911. data/src/core/lib/matchers/matchers.h +2 -1
  912. data/src/core/lib/promise/activity.cc +27 -6
  913. data/src/core/lib/promise/activity.h +71 -24
  914. data/src/core/lib/promise/cancel_callback.h +77 -0
  915. data/src/core/lib/promise/detail/basic_seq.h +1 -1
  916. data/src/core/lib/promise/detail/promise_factory.h +5 -1
  917. data/src/core/lib/promise/for_each.h +176 -0
  918. data/src/core/lib/promise/if.h +9 -0
  919. data/src/core/lib/promise/interceptor_list.h +23 -2
  920. data/src/core/lib/promise/latch.h +89 -3
  921. data/src/core/lib/promise/loop.h +13 -9
  922. data/src/core/lib/promise/map.h +7 -0
  923. data/src/core/lib/promise/party.cc +304 -0
  924. data/src/core/lib/promise/party.h +508 -0
  925. data/src/core/lib/promise/pipe.h +213 -59
  926. data/src/core/lib/promise/poll.h +48 -0
  927. data/src/core/lib/promise/prioritized_race.h +95 -0
  928. data/src/core/lib/promise/promise.h +2 -2
  929. data/src/core/lib/promise/sleep.cc +2 -1
  930. data/src/core/lib/resolver/server_address.cc +0 -8
  931. data/src/core/lib/resolver/server_address.h +0 -6
  932. data/src/core/lib/resource_quota/arena.cc +19 -3
  933. data/src/core/lib/resource_quota/arena.h +119 -5
  934. data/src/core/lib/resource_quota/memory_quota.cc +8 -8
  935. data/src/core/lib/resource_quota/memory_quota.h +1 -2
  936. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  937. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  938. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
  939. data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
  940. data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
  941. data/src/core/lib/security/authorization/rbac_policy.h +19 -2
  942. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  943. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  944. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
  945. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  946. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
  947. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +66 -84
  948. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +1 -0
  949. data/src/core/lib/security/credentials/external/external_account_credentials.cc +64 -64
  950. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +23 -21
  951. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +29 -27
  952. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +5 -61
  953. data/src/core/lib/security/credentials/jwt/json_token.cc +19 -16
  954. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +10 -5
  955. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +40 -38
  956. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +28 -21
  957. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  958. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +13 -0
  959. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +2 -0
  960. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
  961. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +5 -9
  962. data/src/core/lib/security/security_connector/ssl_utils.cc +11 -25
  963. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +12 -0
  964. data/src/core/lib/security/transport/secure_endpoint.cc +4 -2
  965. data/src/core/lib/security/transport/server_auth_filter.cc +20 -2
  966. data/src/core/lib/security/util/json_util.cc +6 -5
  967. data/src/core/lib/service_config/service_config_call_data.h +49 -20
  968. data/src/core/lib/service_config/service_config_impl.cc +13 -6
  969. data/src/core/lib/slice/slice.cc +1 -1
  970. data/src/core/lib/slice/slice.h +2 -0
  971. data/src/core/lib/surface/builtins.cc +2 -0
  972. data/src/core/lib/surface/call.cc +1011 -1049
  973. data/src/core/lib/surface/call.h +11 -5
  974. data/src/core/lib/surface/completion_queue.cc +8 -3
  975. data/src/core/lib/surface/lame_client.cc +1 -0
  976. data/src/core/lib/surface/server.cc +47 -19
  977. data/src/core/lib/surface/validate_metadata.cc +43 -42
  978. data/src/core/lib/surface/validate_metadata.h +9 -0
  979. data/src/core/lib/surface/version.cc +2 -2
  980. data/src/core/lib/transport/batch_builder.cc +182 -0
  981. data/src/core/lib/transport/batch_builder.h +480 -0
  982. data/src/core/lib/transport/bdp_estimator.cc +7 -7
  983. data/src/core/lib/transport/bdp_estimator.h +10 -6
  984. data/src/core/lib/transport/custom_metadata.h +30 -0
  985. data/src/core/lib/transport/metadata_batch.cc +9 -6
  986. data/src/core/lib/transport/metadata_batch.h +124 -31
  987. data/src/core/lib/transport/metadata_compression_traits.h +67 -0
  988. data/src/core/lib/transport/parsed_metadata.h +19 -9
  989. data/src/core/lib/transport/simple_slice_based_metadata.h +48 -0
  990. data/src/core/lib/transport/timeout_encoding.cc +6 -1
  991. data/src/core/lib/transport/transport.cc +30 -2
  992. data/src/core/lib/transport/transport.h +73 -14
  993. data/src/core/lib/transport/transport_impl.h +7 -0
  994. data/src/core/lib/transport/transport_op_string.cc +52 -42
  995. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -8
  996. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  997. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +1 -0
  998. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +21 -4
  999. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +5 -0
  1000. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  1001. data/src/core/tsi/ssl_transport_security.cc +4 -2
  1002. data/src/ruby/ext/grpc/extconf.rb +8 -9
  1003. data/src/ruby/lib/grpc/version.rb +1 -1
  1004. data/third_party/abseil-cpp/absl/base/config.h +1 -1
  1005. data/third_party/abseil-cpp/absl/flags/commandlineflag.cc +34 -0
  1006. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +200 -0
  1007. data/third_party/abseil-cpp/absl/flags/config.h +68 -0
  1008. data/third_party/abseil-cpp/absl/flags/declare.h +73 -0
  1009. data/third_party/abseil-cpp/absl/flags/flag.cc +38 -0
  1010. data/third_party/abseil-cpp/absl/flags/flag.h +310 -0
  1011. data/{src/core/lib/gprpp/global_config_custom.h → third_party/abseil-cpp/absl/flags/internal/commandlineflag.cc} +11 -14
  1012. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +68 -0
  1013. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +615 -0
  1014. data/third_party/abseil-cpp/absl/flags/internal/flag.h +800 -0
  1015. data/third_party/abseil-cpp/absl/flags/internal/flag_msvc.inc +116 -0
  1016. data/third_party/abseil-cpp/absl/flags/internal/path_util.h +62 -0
  1017. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +65 -0
  1018. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +61 -0
  1019. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +60 -0
  1020. data/third_party/abseil-cpp/absl/flags/internal/program_name.h +50 -0
  1021. data/third_party/abseil-cpp/absl/flags/internal/registry.h +97 -0
  1022. data/third_party/abseil-cpp/absl/flags/internal/sequence_lock.h +187 -0
  1023. data/third_party/abseil-cpp/absl/flags/marshalling.cc +241 -0
  1024. data/third_party/abseil-cpp/absl/flags/marshalling.h +356 -0
  1025. data/third_party/abseil-cpp/absl/flags/reflection.cc +354 -0
  1026. data/third_party/abseil-cpp/absl/flags/reflection.h +90 -0
  1027. data/third_party/abseil-cpp/absl/flags/usage_config.cc +165 -0
  1028. data/third_party/abseil-cpp/absl/flags/usage_config.h +135 -0
  1029. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +12 -8
  1030. data/third_party/boringssl-with-bazel/err_data.c +728 -712
  1031. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +177 -177
  1032. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +28 -55
  1033. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +21 -23
  1034. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +20 -23
  1035. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +66 -185
  1036. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +18 -21
  1037. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +356 -311
  1038. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +177 -196
  1039. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +146 -210
  1040. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +6 -9
  1041. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +346 -526
  1042. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +110 -131
  1043. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +130 -116
  1044. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +93 -60
  1045. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +93 -181
  1046. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +242 -305
  1047. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +41 -18
  1048. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +30 -33
  1049. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +36 -33
  1050. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +29 -26
  1051. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +135 -90
  1052. data/third_party/boringssl-with-bazel/src/crypto/asn1/posix_time.c +230 -0
  1053. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +797 -793
  1054. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +529 -526
  1055. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +114 -135
  1056. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +201 -207
  1057. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +21 -26
  1058. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +55 -68
  1059. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +2 -4
  1060. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +17 -11
  1061. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +37 -51
  1062. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +15 -9
  1063. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +13 -9
  1064. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +22 -19
  1065. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +5 -5
  1066. data/third_party/boringssl-with-bazel/src/crypto/bio/printf.c +0 -13
  1067. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -6
  1068. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +2 -0
  1069. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +40 -27
  1070. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +10 -23
  1071. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +2 -6
  1072. data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c +2 -1
  1073. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +29 -28
  1074. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +161 -201
  1075. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +254 -39
  1076. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +2 -2
  1077. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +0 -2
  1078. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +4 -4
  1079. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +9 -8
  1080. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +37 -75
  1081. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +8 -10
  1082. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/cipher → cipher_extra}/e_des.c +100 -78
  1083. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +1 -0
  1084. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +1 -0
  1085. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +2 -0
  1086. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +34 -37
  1087. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +22 -11
  1088. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  1089. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +6 -10
  1090. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -1
  1091. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +12 -0
  1092. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +74 -0
  1093. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_freebsd.c +62 -0
  1094. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-fuchsia.c → cpu_aarch64_fuchsia.c} +8 -7
  1095. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-linux.c → cpu_aarch64_linux.c} +6 -4
  1096. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  1097. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-win.c → cpu_aarch64_win.c} +4 -4
  1098. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm.c → cpu_arm.c} +1 -1
  1099. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.c +55 -0
  1100. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.c → cpu_arm_linux.c} +11 -90
  1101. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.h → cpu_arm_linux.h} +0 -38
  1102. data/third_party/boringssl-with-bazel/src/crypto/{cpu-ppc64le.c → cpu_arm_openbsd.c} +10 -17
  1103. data/third_party/boringssl-with-bazel/src/crypto/{cpu-intel.c → cpu_intel.c} +1 -2
  1104. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +25 -20
  1105. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +22 -31
  1106. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  1107. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  1108. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +17 -32
  1109. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/des.c +232 -232
  1110. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/internal.h +1 -1
  1111. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +1 -0
  1112. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +232 -29
  1113. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +0 -3
  1114. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +43 -16
  1115. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +37 -7
  1116. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +3 -3
  1117. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +11 -36
  1118. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +229 -102
  1119. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +31 -7
  1120. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  1121. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +2 -4
  1122. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +83 -60
  1123. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +46 -12
  1124. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +3 -3
  1125. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +25 -23
  1126. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +43 -9
  1127. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +75 -44
  1128. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +19 -25
  1129. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +96 -45
  1130. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +7 -8
  1131. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +26 -23
  1132. data/third_party/boringssl-with-bazel/src/crypto/evp/p_hkdf.c +233 -0
  1133. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +6 -6
  1134. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +42 -25
  1135. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +4 -5
  1136. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +35 -47
  1137. data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +135 -244
  1138. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +2 -4
  1139. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.c +15 -10
  1140. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +29 -15
  1141. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +0 -2
  1142. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +13 -14
  1143. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +3 -13
  1144. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +13 -7
  1145. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +9 -7
  1146. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +36 -27
  1147. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +16 -26
  1148. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +88 -60
  1149. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +4 -3
  1150. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +0 -2
  1151. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +1 -1
  1152. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +1 -1
  1153. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +99 -113
  1154. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +0 -1
  1155. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +5 -3
  1156. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c +112 -168
  1157. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +86 -31
  1158. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +11 -6
  1159. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +4 -5
  1160. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +4 -5
  1161. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +13 -0
  1162. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +13 -5
  1163. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +19 -108
  1164. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +19 -15
  1165. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +15 -16
  1166. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +22 -21
  1167. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c +3 -0
  1168. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +79 -19
  1169. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +102 -99
  1170. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → fipsmodule/cipher}/e_aesccm.c +52 -46
  1171. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +39 -0
  1172. data/third_party/boringssl-with-bazel/src/crypto/{cmac → fipsmodule/cmac}/cmac.c +55 -11
  1173. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.c +2 -3
  1174. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +24 -6
  1175. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +56 -0
  1176. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +5 -3
  1177. data/third_party/boringssl-with-bazel/src/crypto/{evp → fipsmodule/digestsign}/digestsign.c +51 -15
  1178. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +49 -49
  1179. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +92 -18
  1180. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +12 -12
  1181. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +108 -86
  1182. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +55 -25
  1183. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +55 -71
  1184. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64-table.h → p256-nistz-table.h} +1 -1
  1185. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.c → p256-nistz.c} +72 -65
  1186. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.h → p256-nistz.h} +5 -13
  1187. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +62 -51
  1188. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  1189. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +2 -8
  1190. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +12 -17
  1191. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +25 -26
  1192. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -14
  1193. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +9 -1
  1194. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +44 -16
  1195. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +6 -0
  1196. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  1197. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c +52 -24
  1198. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +9 -23
  1199. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +1 -4
  1200. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +3 -8
  1201. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +170 -160
  1202. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  1203. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +69 -61
  1204. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -12
  1205. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  1206. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +31 -13
  1207. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +16 -8
  1208. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +3 -2
  1209. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +2 -2
  1210. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +9 -38
  1211. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +73 -59
  1212. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +22 -68
  1213. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +0 -1
  1214. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +43 -16
  1215. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +42 -314
  1216. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +244 -139
  1217. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +144 -205
  1218. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +41 -0
  1219. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +593 -421
  1220. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +89 -0
  1221. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +334 -0
  1222. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +3 -12
  1223. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +2 -0
  1224. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +12 -8
  1225. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +14 -12
  1226. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  1227. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +52 -6
  1228. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +192 -18
  1229. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +65 -29
  1230. data/third_party/boringssl-with-bazel/src/crypto/internal.h +391 -18
  1231. data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +91 -0
  1232. data/third_party/boringssl-with-bazel/src/crypto/kyber/keccak.c +204 -0
  1233. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +833 -0
  1234. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +13 -1
  1235. data/third_party/boringssl-with-bazel/src/crypto/mem.c +220 -13
  1236. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +19 -7
  1237. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +9 -4
  1238. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +81 -90
  1239. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +150 -245
  1240. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +633 -613
  1241. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +17 -17
  1242. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +142 -149
  1243. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +99 -131
  1244. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c +0 -1
  1245. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c +0 -1
  1246. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +0 -1
  1247. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +0 -3
  1248. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -66
  1249. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +31 -38
  1250. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +2 -1
  1251. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +18 -31
  1252. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -0
  1253. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +8 -1
  1254. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +129 -5
  1255. data/third_party/boringssl-with-bazel/src/crypto/refcount_c11.c +0 -2
  1256. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +6 -17
  1257. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  1258. data/third_party/boringssl-with-bazel/src/crypto/{asn1/a_print.c → rsa_extra/internal.h} +15 -21
  1259. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  1260. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +8 -11
  1261. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +61 -27
  1262. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +10 -13
  1263. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +10 -13
  1264. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +128 -34
  1265. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +418 -133
  1266. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +116 -284
  1267. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +701 -87
  1268. data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c +22 -24
  1269. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +63 -55
  1270. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +32 -34
  1271. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +32 -16
  1272. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +465 -704
  1273. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +285 -331
  1274. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +183 -178
  1275. data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c +11 -15
  1276. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +68 -50
  1277. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +132 -151
  1278. data/third_party/boringssl-with-bazel/src/crypto/x509/policy.c +790 -0
  1279. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +95 -102
  1280. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +72 -57
  1281. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +12 -10
  1282. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +220 -254
  1283. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +52 -47
  1284. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +3 -4
  1285. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +136 -270
  1286. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +161 -327
  1287. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +37 -33
  1288. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +14 -31
  1289. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +55 -85
  1290. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +528 -616
  1291. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +129 -122
  1292. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +164 -181
  1293. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +132 -132
  1294. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +186 -203
  1295. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +64 -79
  1296. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +175 -160
  1297. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1864 -2050
  1298. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +380 -480
  1299. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +156 -163
  1300. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +266 -265
  1301. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +40 -15
  1302. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +59 -63
  1303. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +63 -67
  1304. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +114 -144
  1305. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +25 -26
  1306. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +329 -416
  1307. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +8 -7
  1308. data/third_party/boringssl-with-bazel/src/crypto/x509/x_info.c +30 -28
  1309. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +354 -370
  1310. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +37 -32
  1311. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +116 -119
  1312. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +36 -26
  1313. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +3 -4
  1314. data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c +10 -13
  1315. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +3 -4
  1316. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +419 -261
  1317. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +113 -105
  1318. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +11 -15
  1319. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +79 -171
  1320. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +126 -131
  1321. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c +3 -4
  1322. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +465 -469
  1323. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c +56 -54
  1324. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +46 -49
  1325. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +294 -344
  1326. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +342 -365
  1327. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +429 -393
  1328. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +29 -24
  1329. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c +65 -59
  1330. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +125 -121
  1331. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +43 -42
  1332. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +120 -125
  1333. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c +50 -20
  1334. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +228 -265
  1335. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +386 -389
  1336. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +45 -32
  1337. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c +57 -54
  1338. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c +63 -67
  1339. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +130 -135
  1340. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +652 -691
  1341. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +90 -75
  1342. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1063 -1145
  1343. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +13 -11
  1344. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +28 -48
  1345. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +217 -191
  1346. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +26 -78
  1347. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +50 -14
  1348. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +29 -14
  1349. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  1350. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +49 -17
  1351. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +99 -29
  1352. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +49 -60
  1353. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +2 -15
  1354. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +16 -200
  1355. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +34 -0
  1356. data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +82 -0
  1357. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +32 -30
  1358. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +7 -0
  1359. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +4 -0
  1360. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +48 -5
  1361. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +37 -8
  1362. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +1 -0
  1363. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +33 -5
  1364. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +25 -33
  1365. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +1 -1
  1366. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +7 -0
  1367. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +69 -16
  1368. data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +91 -0
  1369. data/third_party/boringssl-with-bazel/src/include/openssl/kyber.h +128 -0
  1370. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +74 -8
  1371. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +7 -3
  1372. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +8 -1
  1373. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +1 -0
  1374. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +11 -18
  1375. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +8 -0
  1376. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +12 -1
  1377. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +98 -5
  1378. data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +96 -0
  1379. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +18 -21
  1380. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +285 -92
  1381. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +1 -6
  1382. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +381 -287
  1383. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +9 -6
  1384. data/third_party/boringssl-with-bazel/src/include/openssl/time.h +41 -0
  1385. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +22 -7
  1386. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +57 -23
  1387. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +0 -11
  1388. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +2075 -1407
  1389. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +241 -212
  1390. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +2 -2
  1391. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +6 -13
  1392. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +17 -18
  1393. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +4 -5
  1394. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +25 -33
  1395. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +45 -26
  1396. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +64 -35
  1397. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +198 -54
  1398. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +5 -5
  1399. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +53 -34
  1400. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +76 -44
  1401. data/third_party/boringssl-with-bazel/src/ssl/internal.h +200 -121
  1402. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +47 -12
  1403. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  1404. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +91 -75
  1405. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +8 -10
  1406. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +47 -69
  1407. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +1 -0
  1408. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +5 -9
  1409. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +217 -226
  1410. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +78 -101
  1411. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +106 -142
  1412. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +244 -35
  1413. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +167 -64
  1414. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +41 -32
  1415. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  1416. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +22 -6
  1417. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +15 -13
  1418. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +7 -44
  1419. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +7 -4
  1420. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +7 -23
  1421. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +25 -34
  1422. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +2 -2
  1423. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +16 -98
  1424. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +1241 -657
  1425. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +751 -398
  1426. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  1427. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3551 -1938
  1428. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1272 -487
  1429. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  1430. data/third_party/cares/cares/include/ares.h +23 -1
  1431. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  1432. data/third_party/cares/cares/include/ares_rules.h +2 -2
  1433. data/third_party/cares/cares/include/ares_version.h +3 -3
  1434. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  1435. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  1436. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  1437. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  1438. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  1439. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  1440. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  1441. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  1442. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  1443. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  1444. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  1445. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  1446. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  1447. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  1448. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  1449. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  1450. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  1451. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  1452. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  1453. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  1454. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  1455. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  1456. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  1457. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  1458. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  1459. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  1460. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  1461. data/third_party/upb/upb/{table_internal.h → alloc.h} +6 -6
  1462. data/third_party/upb/upb/arena.h +4 -193
  1463. data/third_party/upb/upb/array.h +4 -51
  1464. data/third_party/upb/upb/base/descriptor_constants.h +104 -0
  1465. data/third_party/upb/upb/base/log2.h +57 -0
  1466. data/third_party/upb/upb/{status.c → base/status.c} +2 -7
  1467. data/third_party/upb/upb/base/status.h +66 -0
  1468. data/third_party/upb/upb/base/string_view.h +75 -0
  1469. data/third_party/upb/upb/{array.c → collections/array.c} +67 -36
  1470. data/third_party/upb/upb/collections/array.h +85 -0
  1471. data/third_party/upb/upb/collections/array_internal.h +135 -0
  1472. data/third_party/upb/upb/{map.c → collections/map.c} +53 -26
  1473. data/third_party/upb/upb/collections/map.h +135 -0
  1474. data/third_party/upb/upb/collections/map_gencode_util.h +78 -0
  1475. data/third_party/upb/upb/collections/map_internal.h +170 -0
  1476. data/third_party/upb/upb/collections/map_sorter.c +166 -0
  1477. data/third_party/upb/upb/collections/map_sorter_internal.h +109 -0
  1478. data/third_party/upb/upb/{message_value.h → collections/message_value.h} +12 -13
  1479. data/third_party/upb/upb/decode.h +3 -62
  1480. data/third_party/upb/upb/def.h +4 -384
  1481. data/third_party/upb/upb/def.hpp +3 -411
  1482. data/third_party/upb/upb/encode.h +3 -48
  1483. data/third_party/upb/upb/extension_registry.h +3 -52
  1484. data/third_party/upb/upb/{table.c → hash/common.c} +52 -110
  1485. data/third_party/upb/upb/hash/common.h +199 -0
  1486. data/third_party/upb/upb/hash/int_table.h +102 -0
  1487. data/third_party/upb/upb/hash/str_table.h +161 -0
  1488. data/third_party/upb/upb/{json_decode.c → json/decode.c} +63 -98
  1489. data/third_party/upb/upb/json/decode.h +52 -0
  1490. data/third_party/upb/upb/{json_encode.c → json/encode.c} +69 -45
  1491. data/third_party/upb/upb/json/encode.h +70 -0
  1492. data/third_party/upb/upb/json_decode.h +4 -15
  1493. data/third_party/upb/upb/json_encode.h +4 -33
  1494. data/third_party/upb/upb/lex/atoi.c +68 -0
  1495. data/third_party/upb/upb/lex/atoi.h +53 -0
  1496. data/third_party/upb/upb/{upb.c → lex/round_trip.c} +2 -11
  1497. data/third_party/upb/upb/{internal/upb.h → lex/round_trip.h} +17 -30
  1498. data/third_party/upb/upb/lex/strtod.c +97 -0
  1499. data/third_party/upb/upb/lex/strtod.h +46 -0
  1500. data/third_party/upb/upb/lex/unicode.c +57 -0
  1501. data/third_party/upb/upb/lex/unicode.h +77 -0
  1502. data/third_party/upb/upb/map.h +4 -85
  1503. data/third_party/upb/upb/mem/alloc.c +47 -0
  1504. data/third_party/upb/upb/mem/alloc.h +98 -0
  1505. data/third_party/upb/upb/mem/arena.c +367 -0
  1506. data/third_party/upb/upb/mem/arena.h +160 -0
  1507. data/third_party/upb/upb/mem/arena_internal.h +114 -0
  1508. data/third_party/upb/upb/message/accessors.c +68 -0
  1509. data/third_party/upb/upb/message/accessors.h +379 -0
  1510. data/third_party/upb/upb/message/accessors_internal.h +325 -0
  1511. data/third_party/upb/upb/message/extension_internal.h +83 -0
  1512. data/third_party/upb/upb/message/internal.h +135 -0
  1513. data/third_party/upb/upb/message/message.c +180 -0
  1514. data/third_party/upb/upb/message/message.h +69 -0
  1515. data/third_party/upb/upb/mini_table/common.c +128 -0
  1516. data/third_party/upb/upb/mini_table/common.h +170 -0
  1517. data/third_party/upb/upb/mini_table/common_internal.h +111 -0
  1518. data/third_party/upb/upb/{mini_table.c → mini_table/decode.c} +513 -533
  1519. data/third_party/upb/upb/mini_table/decode.h +179 -0
  1520. data/third_party/upb/upb/mini_table/encode.c +300 -0
  1521. data/third_party/upb/upb/mini_table/encode_internal.h +111 -0
  1522. data/third_party/upb/upb/{mini_table.hpp → mini_table/encode_internal.hpp} +32 -8
  1523. data/third_party/upb/upb/mini_table/enum_internal.h +88 -0
  1524. data/third_party/upb/upb/mini_table/extension_internal.h +47 -0
  1525. data/third_party/upb/upb/{extension_registry.c → mini_table/extension_registry.c} +27 -24
  1526. data/third_party/upb/upb/mini_table/extension_registry.h +104 -0
  1527. data/third_party/upb/upb/mini_table/field_internal.h +192 -0
  1528. data/third_party/upb/upb/mini_table/file_internal.h +47 -0
  1529. data/third_party/upb/upb/mini_table/message_internal.h +136 -0
  1530. data/third_party/upb/upb/mini_table/sub_internal.h +38 -0
  1531. data/third_party/upb/upb/mini_table/types.h +40 -0
  1532. data/third_party/upb/upb/mini_table.h +4 -157
  1533. data/third_party/upb/upb/msg.h +3 -38
  1534. data/third_party/upb/upb/port/atomic.h +101 -0
  1535. data/third_party/upb/upb/{port_def.inc → port/def.inc} +94 -27
  1536. data/third_party/upb/upb/{port_undef.inc → port/undef.inc} +13 -3
  1537. data/third_party/upb/upb/{internal → port}/vsnprintf_compat.h +5 -7
  1538. data/third_party/upb/upb/reflection/common.h +67 -0
  1539. data/third_party/upb/upb/reflection/def.h +42 -0
  1540. data/third_party/upb/upb/reflection/def.hpp +610 -0
  1541. data/third_party/upb/upb/reflection/def_builder.c +357 -0
  1542. data/third_party/upb/upb/reflection/def_builder_internal.h +157 -0
  1543. data/third_party/upb/upb/reflection/def_pool.c +462 -0
  1544. data/third_party/upb/upb/reflection/def_pool.h +108 -0
  1545. data/third_party/upb/upb/reflection/def_pool_internal.h +77 -0
  1546. data/third_party/upb/upb/reflection/def_type.c +50 -0
  1547. data/third_party/upb/upb/reflection/def_type.h +81 -0
  1548. data/third_party/upb/upb/reflection/desc_state.c +53 -0
  1549. data/third_party/upb/upb/reflection/desc_state_internal.h +64 -0
  1550. data/third_party/upb/upb/reflection/enum_def.c +310 -0
  1551. data/third_party/upb/upb/reflection/enum_def.h +80 -0
  1552. data/third_party/upb/upb/reflection/enum_def_internal.h +56 -0
  1553. data/third_party/upb/upb/reflection/enum_reserved_range.c +84 -0
  1554. data/third_party/upb/upb/reflection/enum_reserved_range.h +51 -0
  1555. data/third_party/upb/upb/reflection/enum_reserved_range_internal.h +55 -0
  1556. data/third_party/upb/upb/reflection/enum_value_def.c +144 -0
  1557. data/third_party/upb/upb/reflection/enum_value_def.h +57 -0
  1558. data/third_party/upb/upb/reflection/enum_value_def_internal.h +57 -0
  1559. data/third_party/upb/upb/reflection/extension_range.c +93 -0
  1560. data/third_party/upb/upb/reflection/extension_range.h +55 -0
  1561. data/third_party/upb/upb/reflection/extension_range_internal.h +54 -0
  1562. data/third_party/upb/upb/reflection/field_def.c +930 -0
  1563. data/third_party/upb/upb/reflection/field_def.h +91 -0
  1564. data/third_party/upb/upb/reflection/field_def_internal.h +76 -0
  1565. data/third_party/upb/upb/reflection/file_def.c +370 -0
  1566. data/third_party/upb/upb/reflection/file_def.h +77 -0
  1567. data/third_party/upb/upb/reflection/file_def_internal.h +57 -0
  1568. data/third_party/upb/upb/reflection/message.c +233 -0
  1569. data/third_party/upb/upb/reflection/message.h +102 -0
  1570. data/third_party/upb/upb/reflection/message.hpp +37 -0
  1571. data/third_party/upb/upb/reflection/message_def.c +718 -0
  1572. data/third_party/upb/upb/reflection/message_def.h +174 -0
  1573. data/third_party/upb/upb/reflection/message_def_internal.h +63 -0
  1574. data/third_party/upb/upb/reflection/message_reserved_range.c +81 -0
  1575. data/third_party/upb/upb/reflection/message_reserved_range.h +51 -0
  1576. data/third_party/upb/upb/reflection/message_reserved_range_internal.h +55 -0
  1577. data/third_party/upb/upb/reflection/method_def.c +124 -0
  1578. data/third_party/upb/upb/reflection/method_def.h +59 -0
  1579. data/third_party/upb/upb/reflection/method_def_internal.h +53 -0
  1580. data/third_party/upb/upb/reflection/oneof_def.c +226 -0
  1581. data/third_party/upb/upb/reflection/oneof_def.h +66 -0
  1582. data/third_party/upb/upb/reflection/oneof_def_internal.h +57 -0
  1583. data/third_party/upb/upb/reflection/service_def.c +128 -0
  1584. data/third_party/upb/upb/reflection/service_def.h +60 -0
  1585. data/third_party/upb/upb/reflection/service_def_internal.h +53 -0
  1586. data/third_party/upb/upb/reflection.h +4 -78
  1587. data/third_party/upb/upb/reflection.hpp +3 -7
  1588. data/third_party/upb/upb/status.h +4 -34
  1589. data/third_party/upb/upb/{collections.h → string_view.h} +7 -7
  1590. data/third_party/upb/upb/{text_encode.c → text/encode.c} +74 -70
  1591. data/third_party/upb/upb/text/encode.h +69 -0
  1592. data/third_party/upb/upb/text_encode.h +4 -32
  1593. data/third_party/upb/upb/upb.h +6 -151
  1594. data/third_party/upb/upb/upb.hpp +10 -18
  1595. data/third_party/upb/upb/wire/common.h +44 -0
  1596. data/third_party/upb/upb/wire/common_internal.h +50 -0
  1597. data/third_party/upb/upb/wire/decode.c +1343 -0
  1598. data/third_party/upb/upb/wire/decode.h +108 -0
  1599. data/third_party/upb/upb/{decode_fast.c → wire/decode_fast.c} +184 -225
  1600. data/third_party/upb/upb/{decode_fast.h → wire/decode_fast.h} +21 -7
  1601. data/third_party/upb/upb/{internal/decode.h → wire/decode_internal.h} +44 -92
  1602. data/third_party/upb/upb/{encode.c → wire/encode.c} +114 -95
  1603. data/third_party/upb/upb/wire/encode.h +92 -0
  1604. data/third_party/upb/upb/wire/eps_copy_input_stream.c +39 -0
  1605. data/third_party/upb/upb/wire/eps_copy_input_stream.h +425 -0
  1606. data/third_party/upb/upb/wire/reader.c +67 -0
  1607. data/third_party/upb/upb/wire/reader.h +227 -0
  1608. data/third_party/upb/upb/wire/swap_internal.h +63 -0
  1609. data/third_party/upb/upb/wire/types.h +41 -0
  1610. data/third_party/{upb/third_party/utf8_range → utf8_range}/range2-neon.c +1 -1
  1611. data/third_party/{upb/third_party/utf8_range → utf8_range}/utf8_range.h +12 -0
  1612. metadata +302 -116
  1613. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
  1614. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  1615. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +0 -30
  1616. data/src/core/ext/transport/chttp2/transport/context_list.cc +0 -71
  1617. data/src/core/ext/transport/chttp2/transport/context_list.h +0 -54
  1618. data/src/core/lib/gprpp/global_config.h +0 -93
  1619. data/src/core/lib/gprpp/global_config_env.cc +0 -140
  1620. data/src/core/lib/gprpp/global_config_env.h +0 -133
  1621. data/src/core/lib/gprpp/global_config_generic.h +0 -40
  1622. data/src/core/lib/promise/intra_activity_waiter.h +0 -55
  1623. data/src/core/lib/security/security_connector/ssl_utils_config.cc +0 -32
  1624. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +0 -195
  1625. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +0 -236
  1626. data/third_party/boringssl-with-bazel/src/crypto/asn1/charmap.h +0 -15
  1627. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +0 -206
  1628. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c +0 -361
  1629. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +0 -287
  1630. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +0 -132
  1631. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +0 -155
  1632. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +0 -131
  1633. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +0 -189
  1634. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +0 -843
  1635. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +0 -289
  1636. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c +0 -57
  1637. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
  1638. data/third_party/upb/upb/arena.c +0 -277
  1639. data/third_party/upb/upb/decode.c +0 -1221
  1640. data/third_party/upb/upb/def.c +0 -3269
  1641. data/third_party/upb/upb/internal/table.h +0 -385
  1642. data/third_party/upb/upb/msg.c +0 -368
  1643. data/third_party/upb/upb/msg_internal.h +0 -837
  1644. data/third_party/upb/upb/reflection.c +0 -323
  1645. /data/src/core/lib/gpr/{log_android.cc → android/log.cc} +0 -0
  1646. /data/src/core/lib/gpr/{cpu_iphone.cc → iphone/cpu.cc} +0 -0
  1647. /data/src/core/lib/gpr/{cpu_linux.cc → linux/cpu.cc} +0 -0
  1648. /data/src/core/lib/gpr/{log_linux.cc → linux/log.cc} +0 -0
  1649. /data/src/core/lib/gpr/{tmpfile_msys.cc → msys/tmpfile.cc} +0 -0
  1650. /data/src/core/lib/gpr/{cpu_posix.cc → posix/cpu.cc} +0 -0
  1651. /data/src/core/lib/gpr/{log_posix.cc → posix/log.cc} +0 -0
  1652. /data/src/core/lib/gpr/{string_posix.cc → posix/string.cc} +0 -0
  1653. /data/src/core/lib/gpr/{sync_posix.cc → posix/sync.cc} +0 -0
  1654. /data/src/core/lib/gpr/{tmpfile_posix.cc → posix/tmpfile.cc} +0 -0
  1655. /data/src/core/lib/gpr/{cpu_windows.cc → windows/cpu.cc} +0 -0
  1656. /data/src/core/lib/gpr/{log_windows.cc → windows/log.cc} +0 -0
  1657. /data/src/core/lib/gpr/{string_windows.cc → windows/string.cc} +0 -0
  1658. /data/src/core/lib/gpr/{string_util_windows.cc → windows/string_util.cc} +0 -0
  1659. /data/src/core/lib/gpr/{sync_windows.cc → windows/sync.cc} +0 -0
  1660. /data/src/core/lib/gpr/{time_windows.cc → windows/time.cc} +0 -0
  1661. /data/src/core/lib/gpr/{tmpfile_windows.cc → windows/tmpfile.cc} +0 -0
  1662. /data/src/core/lib/gprpp/{env_linux.cc → linux/env.cc} +0 -0
  1663. /data/src/core/lib/gprpp/{env_posix.cc → posix/env.cc} +0 -0
  1664. /data/src/core/lib/gprpp/{stat_posix.cc → posix/stat.cc} +0 -0
  1665. /data/src/core/lib/gprpp/{env_windows.cc → windows/env.cc} +0 -0
  1666. /data/src/core/lib/gprpp/{stat_windows.cc → windows/stat.cc} +0 -0
  1667. /data/third_party/{upb/third_party/utf8_range → utf8_range}/naive.c +0 -0
  1668. /data/third_party/{upb/third_party/utf8_range → utf8_range}/range2-sse.c +0 -0
@@ -23,6 +23,7 @@
23
23
  #include <inttypes.h>
24
24
  #include <limits.h>
25
25
  #include <stdlib.h>
26
+ #include <string.h>
26
27
 
27
28
  #include <algorithm>
28
29
  #include <atomic>
@@ -35,14 +36,12 @@
35
36
  #include <vector>
36
37
 
37
38
  #include "absl/base/thread_annotations.h"
38
- #include "absl/cleanup/cleanup.h"
39
39
  #include "absl/meta/type_traits.h"
40
40
  #include "absl/status/status.h"
41
41
  #include "absl/strings/str_cat.h"
42
42
  #include "absl/strings/str_format.h"
43
43
  #include "absl/strings/str_join.h"
44
44
  #include "absl/strings/string_view.h"
45
- #include "absl/types/variant.h"
46
45
 
47
46
  #include <grpc/byte_buffer.h>
48
47
  #include <grpc/compression.h>
@@ -59,6 +58,8 @@
59
58
  #include <grpc/support/time.h>
60
59
 
61
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"
62
63
  #include "src/core/lib/channel/channel_stack.h"
63
64
  #include "src/core/lib/channel/channelz.h"
64
65
  #include "src/core/lib/channel/context.h"
@@ -85,8 +86,13 @@
85
86
  #include "src/core/lib/promise/arena_promise.h"
86
87
  #include "src/core/lib/promise/context.h"
87
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"
88
92
  #include "src/core/lib/promise/pipe.h"
89
93
  #include "src/core/lib/promise/poll.h"
94
+ #include "src/core/lib/promise/race.h"
95
+ #include "src/core/lib/promise/seq.h"
90
96
  #include "src/core/lib/resource_quota/arena.h"
91
97
  #include "src/core/lib/slice/slice_buffer.h"
92
98
  #include "src/core/lib/slice/slice_internal.h"
@@ -96,6 +102,7 @@
96
102
  #include "src/core/lib/surface/completion_queue.h"
97
103
  #include "src/core/lib/surface/server.h"
98
104
  #include "src/core/lib/surface/validate_metadata.h"
105
+ #include "src/core/lib/transport/batch_builder.h"
99
106
  #include "src/core/lib/transport/error_utils.h"
100
107
  #include "src/core/lib/transport/metadata_batch.h"
101
108
  #include "src/core/lib/transport/transport.h"
@@ -134,18 +141,18 @@ class Call : public CppImplOf<Call, grpc_call> {
134
141
  virtual void InternalRef(const char* reason) = 0;
135
142
  virtual void InternalUnref(const char* reason) = 0;
136
143
 
137
- virtual grpc_compression_algorithm test_only_compression_algorithm() = 0;
138
- virtual uint32_t test_only_message_flags() = 0;
139
- virtual uint32_t test_only_encodings_accepted_by_peer() = 0;
140
- virtual grpc_compression_algorithm compression_for_level(
141
- grpc_compression_level level) = 0;
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
+ }
142
151
 
143
152
  // This should return nullptr for the promise stack (and alternative means
144
153
  // for that functionality be invented)
145
154
  virtual grpc_call_stack* call_stack() = 0;
146
155
 
147
- gpr_atm* peer_string_atm_ptr() { return &peer_string_; }
148
-
149
156
  protected:
150
157
  // The maximum number of concurrent batches possible.
151
158
  // Based upon the maximum number of individually queueable ops in the batch
@@ -188,7 +195,7 @@ class Call : public CppImplOf<Call, grpc_call> {
188
195
 
189
196
  ParentCall* GetOrCreateParentCall();
190
197
  ParentCall* parent_call();
191
- Channel* channel() {
198
+ Channel* channel() const {
192
199
  GPR_DEBUG_ASSERT(channel_ != nullptr);
193
200
  return channel_.get();
194
201
  }
@@ -203,7 +210,39 @@ class Call : public CppImplOf<Call, grpc_call> {
203
210
  send_deadline_ = send_deadline;
204
211
  }
205
212
 
206
- void ClearPeerString() { gpr_atm_rel_store(&peer_string_, 0); }
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_; }
207
246
 
208
247
  private:
209
248
  RefCountedPtr<Channel> channel_;
@@ -214,8 +253,19 @@ class Call : public CppImplOf<Call, grpc_call> {
214
253
  const bool is_client_;
215
254
  // flag indicating that cancellation is inherited
216
255
  bool cancellation_is_inherited_ = false;
217
- // A char* indicating the peer name.
218
- gpr_atm peer_string_ = 0;
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();
219
269
  };
220
270
 
221
271
  Call::ParentCall* Call::GetOrCreateParentCall() {
@@ -310,9 +360,13 @@ void Call::MaybeUnpublishFromParent() {
310
360
  void Call::CancelWithStatus(grpc_status_code status, const char* description) {
311
361
  // copying 'description' is needed to ensure the grpc_call_cancel_with_status
312
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).
313
366
  CancelWithError(grpc_error_set_int(
314
- grpc_error_set_str(GRPC_ERROR_CREATE(description),
315
- StatusStrProperty::kGrpcMessage, description),
367
+ grpc_error_set_str(
368
+ absl::Status(static_cast<absl::StatusCode>(status), description),
369
+ StatusStrProperty::kGrpcMessage, description),
316
370
  StatusIntProperty::kRpcStatus, status));
317
371
  }
318
372
 
@@ -337,9 +391,16 @@ void Call::PropagateCancellationToChildren() {
337
391
  }
338
392
 
339
393
  char* Call::GetPeer() {
340
- char* peer_string = reinterpret_cast<char*>(gpr_atm_acq_load(&peer_string_));
341
- if (peer_string != nullptr) return gpr_strdup(peer_string);
342
- peer_string = grpc_channel_get_target(channel_->c_ptr());
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());
343
404
  if (peer_string != nullptr) return peer_string;
344
405
  return gpr_strdup("unknown");
345
406
  }
@@ -352,6 +413,94 @@ void Call::DeleteThis() {
352
413
  arena->Destroy();
353
414
  }
354
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
+
355
504
  ///////////////////////////////////////////////////////////////////////////////
356
505
  // FilterStackCall
357
506
  // To be removed once promise conversion is complete
@@ -410,11 +559,6 @@ class FilterStackCall final : public Call {
410
559
  return context_[elem].value;
411
560
  }
412
561
 
413
- grpc_compression_algorithm compression_for_level(
414
- grpc_compression_level level) override {
415
- return encodings_accepted_by_peer_.CompressionAlgorithmForLevel(level);
416
- }
417
-
418
562
  bool is_trailers_only() const override {
419
563
  bool result = is_trailers_only_;
420
564
  GPR_DEBUG_ASSERT(!result || recv_initial_metadata_.TransportSize() == 0);
@@ -432,18 +576,6 @@ class FilterStackCall final : public Call {
432
576
  return authority_metadata->as_string_view();
433
577
  }
434
578
 
435
- grpc_compression_algorithm test_only_compression_algorithm() override {
436
- return incoming_compression_algorithm_;
437
- }
438
-
439
- uint32_t test_only_message_flags() override {
440
- return test_only_last_message_flags_;
441
- }
442
-
443
- uint32_t test_only_encodings_accepted_by_peer() override {
444
- return encodings_accepted_by_peer_.ToLegacyBitmask();
445
- }
446
-
447
579
  static size_t InitialSizeEstimate() {
448
580
  return sizeof(FilterStackCall) +
449
581
  sizeof(BatchControl) * kMaxConcurrentBatches;
@@ -480,6 +612,7 @@ class FilterStackCall final : public Call {
480
612
  }
481
613
  struct BatchControl {
482
614
  FilterStackCall* call_ = nullptr;
615
+ CallTracerAnnotationInterface* call_tracer_ = nullptr;
483
616
  grpc_transport_stream_op_batch op_;
484
617
  // Share memory for cq_completion and notify_tag as they are never needed
485
618
  // simultaneously. Each byte used in this data structure count as six bytes
@@ -509,12 +642,31 @@ class FilterStackCall final : public Call {
509
642
  }
510
643
  bool completed_batch_step(PendingOp op) {
511
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
+ }
512
657
  auto r = ops_pending_.fetch_sub(mask, std::memory_order_acq_rel);
513
- if (grpc_call_trace.enabled()) {
514
- gpr_log(GPR_DEBUG, "BATCH:%p COMPLETE:%s REMAINING:%s (tag:%p)", this,
515
- PendingOpString(mask).c_str(),
516
- PendingOpString(r & ~mask).c_str(),
517
- completion_data_.notify_tag.tag);
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
+ }
518
670
  }
519
671
  GPR_ASSERT((r & mask) != 0);
520
672
  return r == mask;
@@ -524,7 +676,6 @@ class FilterStackCall final : public Call {
524
676
  void FinishStep(PendingOp op);
525
677
  void ProcessDataAfterMetadata();
526
678
  void ReceivingStreamReady(grpc_error_handle error);
527
- void ValidateFilteredMetadata();
528
679
  void ReceivingInitialMetadataReady(grpc_error_handle error);
529
680
  void ReceivingTrailingMetadataReady(grpc_error_handle error);
530
681
  void FinishBatch(grpc_error_handle error);
@@ -549,10 +700,6 @@ class FilterStackCall final : public Call {
549
700
  grpc_closure* start_batch_closure);
550
701
  void SetFinalStatus(grpc_error_handle error);
551
702
  BatchControl* ReuseOrAllocateBatchControl(const grpc_op* ops);
552
- void HandleCompressionAlgorithmDisabled(
553
- grpc_compression_algorithm compression_algorithm) GPR_ATTRIBUTE_NOINLINE;
554
- void HandleCompressionAlgorithmNotAccepted(
555
- grpc_compression_algorithm compression_algorithm) GPR_ATTRIBUTE_NOINLINE;
556
703
  bool PrepareApplicationMetadata(size_t count, grpc_metadata* metadata,
557
704
  bool is_trailing);
558
705
  void PublishAppMetadata(grpc_metadata_batch* b, bool is_trailing);
@@ -564,7 +711,6 @@ class FilterStackCall final : public Call {
564
711
  CallCombiner call_combiner_;
565
712
  grpc_completion_queue* cq_;
566
713
  grpc_polling_entity pollent_;
567
- gpr_cycle_counter start_time_ = gpr_get_cycle_counter();
568
714
 
569
715
  /// has grpc_call_unref been called
570
716
  bool destroy_called_ = false;
@@ -596,13 +742,6 @@ class FilterStackCall final : public Call {
596
742
  // completed
597
743
  grpc_call_final_info final_info_;
598
744
 
599
- // Compression algorithm for *incoming* data
600
- grpc_compression_algorithm incoming_compression_algorithm_ =
601
- GRPC_COMPRESS_NONE;
602
- // Supported encodings (compression algorithms), a bitset.
603
- // Always support no compression.
604
- CompressionAlgorithmSet encodings_accepted_by_peer_{GRPC_COMPRESS_NONE};
605
-
606
745
  // Contexts for various subsystems (security, tracing, ...).
607
746
  grpc_call_context_element context_[GRPC_CONTEXT_COUNT] = {};
608
747
 
@@ -616,7 +755,6 @@ class FilterStackCall final : public Call {
616
755
  grpc_closure receiving_stream_ready_;
617
756
  grpc_closure receiving_initial_metadata_ready_;
618
757
  grpc_closure receiving_trailing_metadata_ready_;
619
- uint32_t test_only_last_message_flags_ = 0;
620
758
  // Status about operation of call
621
759
  bool sent_server_trailing_metadata_ = false;
622
760
  gpr_atm cancelled_with_error_ = 0;
@@ -703,6 +841,26 @@ grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
703
841
  global_stats().IncrementServerCallsCreated();
704
842
  call->final_op_.server.cancelled = nullptr;
705
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
+ }
706
864
  }
707
865
 
708
866
  Call* parent = Call::FromC(args->parent);
@@ -714,7 +872,7 @@ grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
714
872
  grpc_call_element_args call_args = {
715
873
  call->call_stack(), args->server_transport_data,
716
874
  call->context_, path,
717
- call->start_time_, call->send_deadline(),
875
+ call->start_time(), call->send_deadline(),
718
876
  call->arena(), &call->call_combiner_};
719
877
  add_init_error(&error, grpc_call_stack_init(channel_stack, 1, DestroyCall,
720
878
  call, &call_args));
@@ -796,7 +954,7 @@ void FilterStackCall::DestroyCall(void* call, grpc_error_handle /*error*/) {
796
954
  &(c->final_info_.error_string));
797
955
  c->status_error_.set(absl::OkStatus());
798
956
  c->final_info_.stats.latency =
799
- gpr_cycle_counter_sub(gpr_get_cycle_counter(), c->start_time_);
957
+ gpr_cycle_counter_sub(gpr_get_cycle_counter(), c->start_time());
800
958
  grpc_call_stack_destroy(c->call_stack(), &c->final_info_,
801
959
  GRPC_CLOSURE_INIT(&c->release_call_, ReleaseCall, c,
802
960
  grpc_schedule_on_exec_ctx));
@@ -891,8 +1049,8 @@ void FilterStackCall::CancelWithError(grpc_error_handle error) {
891
1049
 
892
1050
  void FilterStackCall::SetFinalStatus(grpc_error_handle error) {
893
1051
  if (GRPC_TRACE_FLAG_ENABLED(grpc_call_error_trace)) {
894
- gpr_log(GPR_DEBUG, "set_final_status %s", is_client() ? "CLI" : "SVR");
895
- gpr_log(GPR_DEBUG, "%s", StatusToString(error).c_str());
1052
+ gpr_log(GPR_DEBUG, "set_final_status %s %s", is_client() ? "CLI" : "SVR",
1053
+ StatusToString(error).c_str());
896
1054
  }
897
1055
  if (is_client()) {
898
1056
  std::string status_details;
@@ -1033,11 +1191,7 @@ void FilterStackCall::PublishAppMetadata(grpc_metadata_batch* b,
1033
1191
  }
1034
1192
 
1035
1193
  void FilterStackCall::RecvInitialFilter(grpc_metadata_batch* b) {
1036
- incoming_compression_algorithm_ =
1037
- b->Take(GrpcEncodingMetadata()).value_or(GRPC_COMPRESS_NONE);
1038
- encodings_accepted_by_peer_ =
1039
- b->Take(GrpcAcceptEncodingMetadata())
1040
- .value_or(CompressionAlgorithmSet{GRPC_COMPRESS_NONE});
1194
+ ProcessIncomingInitialMetadata(*b);
1041
1195
  PublishAppMetadata(b, false);
1042
1196
  }
1043
1197
 
@@ -1052,11 +1206,11 @@ void FilterStackCall::RecvTrailingFilter(grpc_metadata_batch* b,
1052
1206
  grpc_status_code status_code = *grpc_status;
1053
1207
  grpc_error_handle error;
1054
1208
  if (status_code != GRPC_STATUS_OK) {
1055
- char* peer = GetPeer();
1209
+ Slice peer = GetPeerString();
1056
1210
  error = grpc_error_set_int(
1057
- GRPC_ERROR_CREATE(absl::StrCat("Error received from peer ", peer)),
1211
+ GRPC_ERROR_CREATE(absl::StrCat("Error received from peer ",
1212
+ peer.as_string_view())),
1058
1213
  StatusIntProperty::kRpcStatus, static_cast<intptr_t>(status_code));
1059
- gpr_free(peer);
1060
1214
  }
1061
1215
  auto grpc_message = b->Take(GrpcMessageMetadata());
1062
1216
  if (grpc_message.has_value()) {
@@ -1133,6 +1287,8 @@ FilterStackCall::BatchControl* FilterStackCall::ReuseOrAllocateBatchControl(
1133
1287
  *pslot = bctl;
1134
1288
  }
1135
1289
  bctl->call_ = this;
1290
+ bctl->call_tracer_ = static_cast<CallTracerAnnotationInterface*>(
1291
+ ContextGet(GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE));
1136
1292
  bctl->op_.payload = &stream_op_payload_;
1137
1293
  return bctl;
1138
1294
  }
@@ -1141,8 +1297,9 @@ void FilterStackCall::BatchControl::PostCompletion() {
1141
1297
  FilterStackCall* call = call_;
1142
1298
  grpc_error_handle error = batch_error_.get();
1143
1299
  if (grpc_call_trace.enabled()) {
1144
- gpr_log(GPR_DEBUG, "tag:%p batch_error=%s", completion_data_.notify_tag.tag,
1145
- error.ToString().c_str());
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());
1146
1303
  }
1147
1304
 
1148
1305
  if (op_.send_initial_metadata) {
@@ -1160,16 +1317,16 @@ void FilterStackCall::BatchControl::PostCompletion() {
1160
1317
  if (op_.send_trailing_metadata) {
1161
1318
  call->send_trailing_metadata_.Clear();
1162
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
+ }
1163
1324
  if (op_.recv_trailing_metadata) {
1164
1325
  // propagate cancellation to any interested children
1165
1326
  gpr_atm_rel_store(&call->received_final_op_atm_, 1);
1166
1327
  call->PropagateCancellationToChildren();
1167
1328
  error = absl::OkStatus();
1168
1329
  }
1169
- if (!error.ok() && op_.recv_message && *call->receiving_buffer_ != nullptr) {
1170
- grpc_byte_buffer_destroy(*call->receiving_buffer_);
1171
- *call->receiving_buffer_ = nullptr;
1172
- }
1173
1330
  batch_error_.set(absl::OkStatus());
1174
1331
 
1175
1332
  if (completion_data_.notify_tag.is_closure) {
@@ -1204,11 +1361,11 @@ void FilterStackCall::BatchControl::ProcessDataAfterMetadata() {
1204
1361
  call->receiving_message_ = false;
1205
1362
  FinishStep(PendingOp::kRecvMessage);
1206
1363
  } else {
1207
- call->test_only_last_message_flags_ = call->receiving_stream_flags_;
1364
+ call->NoteLastMessageFlags(call->receiving_stream_flags_);
1208
1365
  if ((call->receiving_stream_flags_ & GRPC_WRITE_INTERNAL_COMPRESS) &&
1209
- (call->incoming_compression_algorithm_ != GRPC_COMPRESS_NONE)) {
1366
+ (call->incoming_compression_algorithm() != GRPC_COMPRESS_NONE)) {
1210
1367
  *call->receiving_buffer_ = grpc_raw_compressed_byte_buffer_create(
1211
- nullptr, 0, call->incoming_compression_algorithm_);
1368
+ nullptr, 0, call->incoming_compression_algorithm());
1212
1369
  } else {
1213
1370
  *call->receiving_buffer_ = grpc_raw_byte_buffer_create(nullptr, 0);
1214
1371
  }
@@ -1249,50 +1406,6 @@ void FilterStackCall::BatchControl::ReceivingStreamReady(
1249
1406
  }
1250
1407
  }
1251
1408
 
1252
- void FilterStackCall::HandleCompressionAlgorithmDisabled(
1253
- grpc_compression_algorithm compression_algorithm) {
1254
- const char* algo_name = nullptr;
1255
- grpc_compression_algorithm_name(compression_algorithm, &algo_name);
1256
- std::string error_msg =
1257
- absl::StrFormat("Compression algorithm '%s' is disabled.", algo_name);
1258
- gpr_log(GPR_ERROR, "%s", error_msg.c_str());
1259
- CancelWithStatus(GRPC_STATUS_UNIMPLEMENTED, error_msg.c_str());
1260
- }
1261
-
1262
- void FilterStackCall::HandleCompressionAlgorithmNotAccepted(
1263
- grpc_compression_algorithm compression_algorithm) {
1264
- const char* algo_name = nullptr;
1265
- grpc_compression_algorithm_name(compression_algorithm, &algo_name);
1266
- gpr_log(GPR_ERROR,
1267
- "Compression algorithm ('%s') not present in the "
1268
- "accepted encodings (%s)",
1269
- algo_name,
1270
- std::string(encodings_accepted_by_peer_.ToString()).c_str());
1271
- }
1272
-
1273
- void FilterStackCall::BatchControl::ValidateFilteredMetadata() {
1274
- FilterStackCall* call = call_;
1275
-
1276
- const grpc_compression_options compression_options =
1277
- call->channel()->compression_options();
1278
- const grpc_compression_algorithm compression_algorithm =
1279
- call->incoming_compression_algorithm_;
1280
- if (GPR_UNLIKELY(!CompressionAlgorithmSet::FromUint32(
1281
- compression_options.enabled_algorithms_bitset)
1282
- .IsSet(compression_algorithm))) {
1283
- // check if algorithm is supported by current channel config
1284
- call->HandleCompressionAlgorithmDisabled(compression_algorithm);
1285
- }
1286
- // GRPC_COMPRESS_NONE is always set.
1287
- GPR_DEBUG_ASSERT(call->encodings_accepted_by_peer_.IsSet(GRPC_COMPRESS_NONE));
1288
- if (GPR_UNLIKELY(
1289
- !call->encodings_accepted_by_peer_.IsSet(compression_algorithm))) {
1290
- if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
1291
- call->HandleCompressionAlgorithmNotAccepted(compression_algorithm);
1292
- }
1293
- }
1294
- }
1295
-
1296
1409
  void FilterStackCall::BatchControl::ReceivingInitialMetadataReady(
1297
1410
  grpc_error_handle error) {
1298
1411
  FilterStackCall* call = call_;
@@ -1303,9 +1416,6 @@ void FilterStackCall::BatchControl::ReceivingInitialMetadataReady(
1303
1416
  grpc_metadata_batch* md = &call->recv_initial_metadata_;
1304
1417
  call->RecvInitialFilter(md);
1305
1418
 
1306
- // TODO(ctiller): this could be moved into recv_initial_filter now
1307
- ValidateFilteredMetadata();
1308
-
1309
1419
  absl::optional<Timestamp> deadline = md->get(GrpcTimeoutMetadata());
1310
1420
  if (deadline.has_value() && !call->is_client()) {
1311
1421
  call_->set_send_deadline(*deadline);
@@ -1400,6 +1510,7 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1400
1510
  grpc_transport_stream_op_batch_payload* stream_op_payload;
1401
1511
  uint32_t seen_ops = 0;
1402
1512
  intptr_t pending_ops = 0;
1513
+ CallTracerAnnotationInterface* call_tracer = nullptr;
1403
1514
 
1404
1515
  for (i = 0; i < nops; i++) {
1405
1516
  if (seen_ops & (1u << ops[i].op)) {
@@ -1454,36 +1565,6 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1454
1565
  error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1455
1566
  goto done_with_error;
1456
1567
  }
1457
- // TODO(juanlishen): If the user has already specified a compression
1458
- // algorithm by setting the initial metadata with key of
1459
- // GRPC_COMPRESSION_REQUEST_ALGORITHM_MD_KEY, we shouldn't override that
1460
- // with the compression algorithm mapped from compression level.
1461
- // process compression level
1462
- grpc_compression_level effective_compression_level =
1463
- GRPC_COMPRESS_LEVEL_NONE;
1464
- bool level_set = false;
1465
- if (op->data.send_initial_metadata.maybe_compression_level.is_set) {
1466
- effective_compression_level =
1467
- op->data.send_initial_metadata.maybe_compression_level.level;
1468
- level_set = true;
1469
- } else {
1470
- const grpc_compression_options copts =
1471
- channel()->compression_options();
1472
- if (copts.default_level.is_set) {
1473
- level_set = true;
1474
- effective_compression_level = copts.default_level.level;
1475
- }
1476
- }
1477
- // Currently, only server side supports compression level setting.
1478
- if (level_set && !is_client()) {
1479
- const grpc_compression_algorithm calgo =
1480
- encodings_accepted_by_peer_.CompressionAlgorithmForLevel(
1481
- effective_compression_level);
1482
- // The following metadata will be checked and removed by the message
1483
- // compression filter. It will be used as the call's compression
1484
- // algorithm.
1485
- send_initial_metadata_.Set(GrpcInternalEncodingRequest(), calgo);
1486
- }
1487
1568
  if (op->data.send_initial_metadata.count > INT_MAX) {
1488
1569
  error = GRPC_CALL_ERROR_INVALID_METADATA;
1489
1570
  goto done_with_error;
@@ -1496,8 +1577,7 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1496
1577
  error = GRPC_CALL_ERROR_INVALID_METADATA;
1497
1578
  goto done_with_error;
1498
1579
  }
1499
- // Ignore any te metadata key value pairs specified.
1500
- send_initial_metadata_.Remove(TeMetadata());
1580
+ PrepareOutgoingInitialMetadata(*op, send_initial_metadata_);
1501
1581
  // TODO(ctiller): just make these the same variable?
1502
1582
  if (is_client() && send_deadline() != Timestamp::InfFuture()) {
1503
1583
  send_initial_metadata_.Set(GrpcTimeoutMetadata(), send_deadline());
@@ -1512,10 +1592,6 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1512
1592
  }
1513
1593
  stream_op_payload->send_initial_metadata.send_initial_metadata =
1514
1594
  &send_initial_metadata_;
1515
- if (is_client()) {
1516
- stream_op_payload->send_initial_metadata.peer_string =
1517
- peer_string_atm_ptr();
1518
- }
1519
1595
  pending_ops |= PendingOpMask(PendingOp::kSends);
1520
1596
  break;
1521
1597
  }
@@ -1664,9 +1740,6 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1664
1740
  if (is_client()) {
1665
1741
  stream_op_payload->recv_initial_metadata.trailing_metadata_available =
1666
1742
  &is_trailers_only_;
1667
- } else {
1668
- stream_op_payload->recv_initial_metadata.peer_string =
1669
- peer_string_atm_ptr();
1670
1743
  }
1671
1744
  pending_ops |= PendingOpMask(PendingOp::kRecvInitialMetadata);
1672
1745
  break;
@@ -1798,13 +1871,21 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1798
1871
  stream_op->on_complete = &bctl->finish_batch_;
1799
1872
  }
1800
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
+ }
1801
1883
  if (grpc_call_trace.enabled()) {
1802
1884
  gpr_log(GPR_DEBUG, "BATCH:%p START:%s BATCH:%s (tag:%p)", bctl,
1803
1885
  PendingOpString(pending_ops).c_str(),
1804
- grpc_transport_stream_op_batch_string(stream_op).c_str(),
1886
+ grpc_transport_stream_op_batch_string(stream_op, false).c_str(),
1805
1887
  bctl->completion_data_.notify_tag.tag);
1806
1888
  }
1807
-
1808
1889
  ExecuteBatch(stream_op, &bctl->start_batch_);
1809
1890
 
1810
1891
  done:
@@ -1873,8 +1954,7 @@ bool ValidateMetadata(size_t count, grpc_metadata* metadata) {
1873
1954
  // Will be folded into Call once the promise conversion is done
1874
1955
 
1875
1956
  class PromiseBasedCall : public Call,
1876
- public Activity,
1877
- public Wakeable,
1957
+ public Party,
1878
1958
  public grpc_event_engine::experimental::EventEngine::
1879
1959
  Closure /* for deadlines */ {
1880
1960
  public:
@@ -1885,176 +1965,65 @@ class PromiseBasedCall : public Call,
1885
1965
  void (*destroy)(void* value)) override;
1886
1966
  void* ContextGet(grpc_context_index elem) const override;
1887
1967
  void SetCompletionQueue(grpc_completion_queue* cq) override;
1888
- void SetCompletionQueueLocked(grpc_completion_queue* cq)
1889
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
1890
- void CancelWithError(absl::Status error) final ABSL_LOCKS_EXCLUDED(mu_) {
1891
- MutexLock lock(&mu_);
1892
- CancelWithErrorLocked(std::move(error));
1893
- }
1894
- virtual void CancelWithErrorLocked(absl::Status error)
1895
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) = 0;
1896
- bool Completed() final ABSL_LOCKS_EXCLUDED(mu_) {
1897
- MutexLock lock(&mu_);
1898
- return completed_;
1899
- }
1900
-
1901
- void Orphan() final {
1902
- MutexLock lock(&mu_);
1903
- if (!completed_) {
1904
- CancelWithErrorLocked(absl::CancelledError("Call orphaned"));
1905
- }
1906
- }
1968
+ bool Completed() final { return finished_.IsSet(); }
1907
1969
 
1908
1970
  // Implementation of call refcounting: move this to DualRefCounted once we
1909
1971
  // don't need to maintain FilterStackCall compatibility
1910
- void ExternalRef() final {
1911
- const uint64_t prev_ref_pair =
1912
- refs_.fetch_add(MakeRefPair(1, 0), std::memory_order_relaxed);
1913
- if (grpc_call_refcount_trace.enabled()) {
1914
- gpr_log(GPR_DEBUG, "%s EXTERNAL_REF: %d:%d->%d:%d", DebugTag().c_str(),
1915
- GetStrongRefs(prev_ref_pair), GetWeakRefs(prev_ref_pair),
1916
- GetStrongRefs(prev_ref_pair) + 1, GetWeakRefs(prev_ref_pair));
1917
- }
1918
- }
1919
- void ExternalUnref() final {
1920
- const uint64_t prev_ref_pair =
1921
- refs_.fetch_add(MakeRefPair(-1, 1), std::memory_order_acq_rel);
1922
- if (grpc_call_refcount_trace.enabled()) {
1923
- gpr_log(GPR_DEBUG, "%s EXTERNAL_UNREF: %d:%d->%d:%d", DebugTag().c_str(),
1924
- GetStrongRefs(prev_ref_pair), GetWeakRefs(prev_ref_pair),
1925
- GetStrongRefs(prev_ref_pair) - 1, GetWeakRefs(prev_ref_pair) + 1);
1926
- }
1927
- const uint32_t strong_refs = GetStrongRefs(prev_ref_pair);
1928
- if (GPR_UNLIKELY(strong_refs == 1)) {
1929
- Orphan();
1930
- }
1931
- // Now drop the weak ref.
1932
- InternalUnref("external_ref");
1933
- }
1972
+ void ExternalRef() final { InternalRef("external"); }
1973
+ void ExternalUnref() final { InternalUnref("external"); }
1934
1974
  void InternalRef(const char* reason) final {
1935
- uint64_t n = refs_.fetch_add(MakeRefPair(0, 1), std::memory_order_relaxed);
1936
1975
  if (grpc_call_refcount_trace.enabled()) {
1937
- gpr_log(GPR_DEBUG, "%s REF: %s %d:%d->%d:%d", DebugTag().c_str(), reason,
1938
- GetStrongRefs(n), GetWeakRefs(n), GetStrongRefs(n),
1939
- GetWeakRefs(n) + 1);
1976
+ gpr_log(GPR_DEBUG, "INTERNAL_REF:%p:%s", this, reason);
1940
1977
  }
1978
+ Party::IncrementRefCount();
1941
1979
  }
1942
1980
  void InternalUnref(const char* reason) final {
1943
- const uint64_t prev_ref_pair =
1944
- refs_.fetch_sub(MakeRefPair(0, 1), std::memory_order_acq_rel);
1945
1981
  if (grpc_call_refcount_trace.enabled()) {
1946
- gpr_log(GPR_DEBUG, "%s UNREF: %s %d:%d->%d:%d", DebugTag().c_str(),
1947
- reason, GetStrongRefs(prev_ref_pair), GetWeakRefs(prev_ref_pair),
1948
- GetStrongRefs(prev_ref_pair), GetWeakRefs(prev_ref_pair) - 1);
1982
+ gpr_log(GPR_DEBUG, "INTERNAL_UNREF:%p:%s", this, reason);
1949
1983
  }
1950
- if (GPR_UNLIKELY(prev_ref_pair == MakeRefPair(0, 1))) {
1951
- DeleteThis();
1952
- }
1953
- }
1954
-
1955
- // Activity methods
1956
- void ForceImmediateRepoll() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) override;
1957
- Waker MakeOwningWaker() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) override {
1958
- InternalRef("wakeup");
1959
- // If ASAN is defined, we leverage it to detect dropped Waker objects.
1960
- // Usually Waker must be destroyed or woken up, but (especially with arenas)
1961
- // it's not uncommon to create a Waker and then do neither. In that case it's
1962
- // incredibly fraught to diagnose where the dropped reference to this object was
1963
- // created. Instead, leverage ASAN and create a new object per expected wakeup.
1964
- // Now when we drop such an object ASAN will fail and we'll get a callstack to
1965
- // the creation of the waker in question.
1966
- #if defined(__has_feature)
1967
- #if __has_feature(address_sanitizer)
1968
- #define GRPC_CALL_USES_ASAN_WAKER
1969
- class AsanWaker final : public Wakeable {
1970
- public:
1971
- explicit AsanWaker(PromiseBasedCall* call) : call_(call) {}
1972
-
1973
- void Wakeup(void*) override {
1974
- call_->Wakeup(nullptr);
1975
- delete this;
1976
- }
1977
-
1978
- void Drop(void*) override {
1979
- call_->Drop(nullptr);
1980
- delete this;
1981
- }
1982
-
1983
- std::string ActivityDebugTag(void*) const override {
1984
- return call_->DebugTag();
1985
- }
1986
-
1987
- private:
1988
- PromiseBasedCall* call_;
1989
- };
1990
- return Waker(new AsanWaker(this), nullptr);
1991
- #endif
1992
- #endif
1993
- #ifndef GRPC_CALL_USES_ASAN_WAKER
1994
- return Waker(this, nullptr);
1995
- #endif
1996
- }
1997
- Waker MakeNonOwningWaker() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) override;
1998
-
1999
- // Wakeable methods
2000
- void Wakeup(void*) override {
2001
- channel()->event_engine()->Run([this] {
2002
- ApplicationCallbackExecCtx app_exec_ctx;
2003
- ExecCtx exec_ctx;
2004
- {
2005
- ScopedContext activity_context(this);
2006
- MutexLock lock(&mu_);
2007
- Update();
2008
- }
2009
- InternalUnref("wakeup");
2010
- });
1984
+ Party::Unref();
2011
1985
  }
2012
- void Drop(void*) override { InternalUnref("wakeup"); }
2013
1986
 
2014
1987
  void RunInContext(absl::AnyInvocable<void()> fn) {
2015
- if (Activity::current() == this) {
2016
- fn();
2017
- } else {
2018
- InternalRef("in_context");
2019
- channel()->event_engine()->Run([this, fn = std::move(fn)]() mutable {
2020
- ApplicationCallbackExecCtx app_exec_ctx;
2021
- ExecCtx exec_ctx;
2022
- {
2023
- ScopedContext activity_context(this);
2024
- MutexLock lock(&mu_);
1988
+ Spawn(
1989
+ "run_in_context",
1990
+ [fn = std::move(fn)]() mutable {
2025
1991
  fn();
2026
- Update();
2027
- }
2028
- InternalUnref("in_context");
2029
- });
2030
- }
2031
- }
2032
-
2033
- grpc_compression_algorithm test_only_compression_algorithm() override {
2034
- abort();
2035
- }
2036
- uint32_t test_only_message_flags() override { abort(); }
2037
- uint32_t test_only_encodings_accepted_by_peer() override { abort(); }
2038
- grpc_compression_algorithm compression_for_level(
2039
- grpc_compression_level) override {
2040
- abort();
1992
+ return Empty{};
1993
+ },
1994
+ [](Empty) {});
2041
1995
  }
2042
1996
 
2043
1997
  // This should return nullptr for the promise stack (and alternative means
2044
1998
  // for that functionality be invented)
2045
1999
  grpc_call_stack* call_stack() override { return nullptr; }
2046
2000
 
2047
- void UpdateDeadline(Timestamp deadline);
2048
- void ResetDeadline();
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
+ }
2049
2007
 
2050
2008
  // Implementation of EventEngine::Closure, called when deadline expires
2051
2009
  void Run() override;
2052
2010
 
2053
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
+ }
2015
+
2016
+ grpc_event_engine::experimental::EventEngine* event_engine() const final {
2017
+ return channel()->event_engine();
2018
+ }
2019
+
2020
+ using Call::arena;
2054
2021
 
2055
2022
  protected:
2056
2023
  class ScopedContext
2057
2024
  : public ScopedActivity,
2025
+ public BatchBuilder,
2026
+ public promise_detail::Context<BatchBuilder>,
2058
2027
  public promise_detail::Context<Arena>,
2059
2028
  public promise_detail::Context<grpc_call_context_element>,
2060
2029
  public promise_detail::Context<CallContext>,
@@ -2062,6 +2031,8 @@ class PromiseBasedCall : public Call,
2062
2031
  public:
2063
2032
  explicit ScopedContext(PromiseBasedCall* call)
2064
2033
  : ScopedActivity(call),
2034
+ BatchBuilder(&call->batch_payload_),
2035
+ promise_detail::Context<BatchBuilder>(this),
2065
2036
  promise_detail::Context<Arena>(call->arena()),
2066
2037
  promise_detail::Context<grpc_call_context_element>(call->context_),
2067
2038
  promise_detail::Context<CallContext>(&call->call_context_),
@@ -2095,8 +2066,12 @@ class PromiseBasedCall : public Call,
2095
2066
  };
2096
2067
 
2097
2068
  ~PromiseBasedCall() override {
2098
- if (non_owning_wakeable_) non_owning_wakeable_->DropActivity();
2099
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
+ }
2100
2075
  }
2101
2076
 
2102
2077
  // Enumerates why a Completion is still pending
@@ -2104,6 +2079,7 @@ class PromiseBasedCall : public Call,
2104
2079
  // We're in the midst of starting a batch of operations
2105
2080
  kStartingBatch = 0,
2106
2081
  // The following correspond with the batch operations from above
2082
+ kSendInitialMetadata,
2107
2083
  kReceiveInitialMetadata,
2108
2084
  kReceiveStatusOnClient,
2109
2085
  kReceiveCloseOnServer = kReceiveStatusOnClient,
@@ -2113,10 +2089,17 @@ class PromiseBasedCall : public Call,
2113
2089
  kSendCloseFromClient = kSendStatusFromServer,
2114
2090
  };
2115
2091
 
2092
+ bool RunParty() override {
2093
+ ScopedContext ctx(this);
2094
+ return Party::RunParty();
2095
+ }
2096
+
2116
2097
  const char* PendingOpString(PendingOp reason) const {
2117
2098
  switch (reason) {
2118
2099
  case PendingOp::kStartingBatch:
2119
2100
  return "StartingBatch";
2101
+ case PendingOp::kSendInitialMetadata:
2102
+ return "SendInitialMetadata";
2120
2103
  case PendingOp::kReceiveInitialMetadata:
2121
2104
  return "ReceiveInitialMetadata";
2122
2105
  case PendingOp::kReceiveStatusOnClient:
@@ -2131,62 +2114,55 @@ class PromiseBasedCall : public Call,
2131
2114
  return "Unknown";
2132
2115
  }
2133
2116
 
2134
- static constexpr uint8_t PendingOpBit(PendingOp reason) {
2117
+ static constexpr uint32_t PendingOpBit(PendingOp reason) {
2135
2118
  return 1 << static_cast<int>(reason);
2136
2119
  }
2137
2120
 
2138
- Mutex* mu() const ABSL_LOCK_RETURNED(mu_) { return &mu_; }
2139
2121
  // Begin work on a completion, recording the tag/closure to notify.
2140
2122
  // Use the op selected in \a ops to determine the index to allocate into.
2141
2123
  // Starts the "StartingBatch" PendingOp immediately.
2142
2124
  // Assumes at least one operation in \a ops.
2143
- Completion StartCompletion(void* tag, bool is_closure, const grpc_op* ops)
2144
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
2125
+ Completion StartCompletion(void* tag, bool is_closure, const grpc_op* ops);
2145
2126
  // Add one pending op to the completion, and return it.
2146
- Completion AddOpToCompletion(const Completion& completion, PendingOp reason)
2147
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
2127
+ Completion AddOpToCompletion(const Completion& completion, PendingOp reason);
2148
2128
  // Stringify a completion
2149
2129
  std::string CompletionString(const Completion& completion) const {
2150
2130
  return completion.has_value()
2151
- ? absl::StrFormat(
2152
- "%d:tag=%p", static_cast<int>(completion.index()),
2153
- completion_info_[completion.index()].pending.tag)
2131
+ ? completion_info_[completion.index()].pending.ToString(this)
2154
2132
  : "no-completion";
2155
2133
  }
2156
2134
  // Finish one op on the completion. Must have been previously been added.
2157
2135
  // The completion as a whole finishes when all pending ops finish.
2158
- void FinishOpOnCompletion(Completion* completion, PendingOp reason)
2159
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
2136
+ void FinishOpOnCompletion(Completion* completion, PendingOp reason);
2160
2137
  // Mark the completion as failed. Does not finish it.
2161
2138
  void FailCompletion(const Completion& completion,
2162
2139
  SourceLocation source_location = {});
2163
- // Run the promise polling loop until it stalls.
2164
- void Update() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
2165
- // Update the promise state once.
2166
- virtual void UpdateOnce() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) = 0;
2140
+ // Mark the completion as infallible. Overrides FailCompletion to report
2141
+ // success always.
2142
+ void ForceCompletionSuccess(const Completion& completion);
2167
2143
  // Accept the stats from the context (call once we have proof the transport is
2168
2144
  // done with them).
2169
2145
  // Right now this means that promise based calls do not record correct stats
2170
2146
  // with census if they are cancelled.
2171
2147
  // TODO(ctiller): this should be remedied before promise based calls are
2172
2148
  // dexperimentalized.
2173
- void AcceptTransportStatsFromContext() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
2149
+ void AcceptTransportStatsFromContext() {
2174
2150
  final_stats_ = *call_context_.call_stats();
2175
2151
  }
2176
2152
 
2177
- grpc_completion_queue* cq() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) { return cq_; }
2153
+ grpc_completion_queue* cq() { return cq_; }
2178
2154
 
2179
2155
  void CToMetadata(grpc_metadata* metadata, size_t count,
2180
2156
  grpc_metadata_batch* batch);
2181
2157
 
2182
- std::string ActivityDebugTag(void*) const override { return DebugTag(); }
2183
-
2184
2158
  // At the end of the call run any finalization actions.
2185
2159
  void RunFinalization(grpc_status_code status, const char* status_details) {
2186
2160
  grpc_call_final_info final_info;
2187
2161
  final_info.stats = final_stats_;
2188
2162
  final_info.final_status = status;
2189
2163
  final_info.error_string = status_details;
2164
+ final_info.stats.latency =
2165
+ gpr_cycle_counter_sub(gpr_get_cycle_counter(), start_time());
2190
2166
  finalization_.Run(&final_info);
2191
2167
  }
2192
2168
 
@@ -2209,158 +2185,164 @@ class PromiseBasedCall : public Call,
2209
2185
  }
2210
2186
  }
2211
2187
 
2212
- std::string PollStateDebugString() const ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
2213
- return absl::StrCat(PresentAndCompletionText("outstanding_send",
2214
- outstanding_send_.has_value(),
2215
- send_message_completion_)
2216
- .c_str(),
2217
- PresentAndCompletionText("outstanding_recv",
2218
- outstanding_recv_.has_value(),
2219
- recv_message_completion_)
2220
- .c_str());
2221
- }
2222
-
2188
+ // Spawn a job that will first do FirstPromise then receive a message
2189
+ template <typename FirstPromise>
2223
2190
  void StartRecvMessage(const grpc_op& op, const Completion& completion,
2224
- PipeReceiver<MessageHandle>* receiver)
2225
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
2226
- void PollRecvMessage(grpc_compression_algorithm compression_algorithm)
2227
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
2228
- void CancelRecvMessage() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
2191
+ FirstPromise first,
2192
+ PipeReceiver<MessageHandle>* receiver,
2193
+ bool cancel_on_error, Party::BulkSpawner& spawner);
2229
2194
  void StartSendMessage(const grpc_op& op, const Completion& completion,
2230
- PipeSender<MessageHandle>* sender)
2231
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
2232
- bool PollSendMessage() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
2233
- void CancelSendMessage() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
2195
+ PipeSender<MessageHandle>* sender,
2196
+ Party::BulkSpawner& spawner);
2197
+
2198
+ void set_completed() { finished_.Set(); }
2234
2199
 
2235
- bool completed() const ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
2236
- return completed_;
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);
2237
2223
  }
2238
- void set_completed() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) { completed_ = true; }
2239
- bool is_sending() const ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
2240
- return outstanding_send_.has_value();
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
+ }
2241
2233
  }
2242
2234
 
2243
2235
  private:
2244
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
2245
  struct Pending {
2246
- // Bitmask of PendingOps
2247
- uint8_t pending_op_bits;
2246
+ // Bitmask of PendingOps at the bottom, and kOpFailed, kOpForceSuccess at
2247
+ // the top.
2248
+ std::atomic<uint32_t> state;
2248
2249
  bool is_closure;
2249
- bool success;
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;
2250
2254
  void* tag;
2251
- } pending;
2252
- grpc_cq_completion completion;
2253
- };
2254
2255
 
2255
- class NonOwningWakable final : public Wakeable {
2256
- public:
2257
- explicit NonOwningWakable(PromiseBasedCall* call) : call_(call) {}
2258
-
2259
- // Ref the Handle (not the activity).
2260
- void Ref() { refs_.fetch_add(1, std::memory_order_relaxed); }
2261
-
2262
- // Activity is going away... drop its reference and sever the connection
2263
- // back.
2264
- void DropActivity() ABSL_LOCKS_EXCLUDED(mu_) {
2265
- auto unref = absl::MakeCleanup([this]() { Unref(); });
2266
- MutexLock lock(&mu_);
2267
- GPR_ASSERT(call_ != nullptr);
2268
- call_ = nullptr;
2269
- }
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
+ }
2270
2263
 
2271
- // Activity needs to wake up (if it still exists!) - wake it up, and drop
2272
- // the ref that was kept for this handle.
2273
- void Wakeup(void*) override ABSL_LOCKS_EXCLUDED(mu_) {
2274
- // Drop the ref to the handle at end of scope (we have one ref = one
2275
- // wakeup semantics).
2276
- auto unref = absl::MakeCleanup([this]() { Unref(); });
2277
- ReleasableMutexLock lock(&mu_);
2278
- // Note that activity refcount can drop to zero, but we could win the lock
2279
- // against DropActivity, so we need to only increase activities refcount
2280
- // if it is non-zero.
2281
- PromiseBasedCall* call = call_;
2282
- if (call != nullptr && call->RefIfNonZero()) {
2283
- lock.Release();
2284
- // Activity still exists and we have a reference: wake it up, which will
2285
- // drop the ref.
2286
- call->Wakeup(nullptr);
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);
2287
2269
  }
2288
- }
2289
2270
 
2290
- std::string ActivityDebugTag(void*) const override {
2291
- MutexLock lock(&mu_);
2292
- return call_ == nullptr ? "<unknown>" : call_->DebugTag();
2293
- }
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
+ }
2294
2286
 
2295
- void Drop(void*) override { Unref(); }
2287
+ void MarkFailed() {
2288
+ state.fetch_or(kOpFailed, std::memory_order_relaxed);
2289
+ }
2296
2290
 
2297
- private:
2298
- // Unref the Handle (not the activity).
2299
- void Unref() {
2300
- if (1 == refs_.fetch_sub(1, std::memory_order_acq_rel)) {
2301
- delete this;
2291
+ void MarkForceSuccess() {
2292
+ state.fetch_or(kOpForceSuccess, std::memory_order_relaxed);
2302
2293
  }
2303
- }
2304
2294
 
2305
- mutable Mutex mu_;
2306
- // We have two initial refs: one for the wakeup that this is created for,
2307
- // and will be dropped by Wakeup, and the other for the activity which is
2308
- // dropped by DropActivity.
2309
- std::atomic<size_t> refs_{2};
2310
- PromiseBasedCall* call_ ABSL_GUARDED_BY(mu_);
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;
2311
2312
  };
2312
2313
 
2313
- static void OnDestroy(void* arg, grpc_error_handle) {
2314
- auto* call = static_cast<PromiseBasedCall*>(arg);
2315
- ScopedContext context(call);
2316
- call->DeleteThis();
2317
- }
2318
-
2319
- // First 32 bits are strong refs, next 32 bits are weak refs.
2320
- static uint64_t MakeRefPair(uint32_t strong, uint32_t weak) {
2321
- return (static_cast<uint64_t>(strong) << 32) + static_cast<int64_t>(weak);
2322
- }
2323
- static uint32_t GetStrongRefs(uint64_t ref_pair) {
2324
- return static_cast<uint32_t>(ref_pair >> 32);
2325
- }
2326
- static uint32_t GetWeakRefs(uint64_t ref_pair) {
2327
- return static_cast<uint32_t>(ref_pair & 0xffffffffu);
2328
- }
2329
-
2330
- bool RefIfNonZero() {
2331
- uint64_t prev_ref_pair = refs_.load(std::memory_order_acquire);
2332
- do {
2333
- const uint32_t strong_refs = GetStrongRefs(prev_ref_pair);
2334
- if (strong_refs == 0) return false;
2335
- } while (!refs_.compare_exchange_weak(
2336
- prev_ref_pair, prev_ref_pair + MakeRefPair(1, 0),
2337
- std::memory_order_acq_rel, std::memory_order_acquire));
2338
- return true;
2314
+ void PartyOver() override {
2315
+ {
2316
+ ScopedContext ctx(this);
2317
+ CancelRemainingParticipants();
2318
+ arena()->DestroyManagedNewObjects();
2319
+ }
2320
+ DeleteThis();
2339
2321
  }
2340
2322
 
2341
- mutable Mutex mu_;
2342
- std::atomic<uint64_t> refs_;
2343
2323
  CallContext call_context_{this};
2344
- bool keep_polling_ ABSL_GUARDED_BY(mu()) = false;
2345
2324
 
2346
2325
  // Contexts for various subsystems (security, tracing, ...).
2347
2326
  grpc_call_context_element context_[GRPC_CONTEXT_COUNT] = {};
2348
- grpc_completion_queue* cq_ ABSL_GUARDED_BY(mu_);
2349
- NonOwningWakable* non_owning_wakeable_ ABSL_GUARDED_BY(mu_) = nullptr;
2327
+ grpc_completion_queue* cq_;
2350
2328
  CompletionInfo completion_info_[6];
2351
2329
  grpc_call_stats final_stats_{};
2352
2330
  CallFinalization finalization_;
2353
2331
  // Current deadline.
2354
- Timestamp deadline_ = Timestamp::InfFuture();
2355
- grpc_event_engine::experimental::EventEngine::TaskHandle deadline_task_;
2356
- absl::optional<PipeSender<MessageHandle>::PushType> outstanding_send_
2357
- ABSL_GUARDED_BY(mu_);
2358
- absl::optional<PipeReceiverNextType<MessageHandle>> outstanding_recv_
2359
- ABSL_GUARDED_BY(mu_);
2360
- grpc_byte_buffer** recv_message_ ABSL_GUARDED_BY(mu_) = nullptr;
2361
- Completion send_message_completion_ ABSL_GUARDED_BY(mu_);
2362
- Completion recv_message_completion_ ABSL_GUARDED_BY(mu_);
2363
- bool completed_ ABSL_GUARDED_BY(mu_) = false;
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_};
2364
2346
  };
2365
2347
 
2366
2348
  template <typename T>
@@ -2380,31 +2362,13 @@ PromiseBasedCall::PromiseBasedCall(Arena* arena, uint32_t initial_external_refs,
2380
2362
  const grpc_call_create_args& args)
2381
2363
  : Call(arena, args.server_transport_data == nullptr, args.send_deadline,
2382
2364
  args.channel->Ref()),
2383
- refs_(MakeRefPair(initial_external_refs, 0)),
2365
+ Party(arena, initial_external_refs),
2384
2366
  cq_(args.cq) {
2385
2367
  if (args.cq != nullptr) {
2386
- GPR_ASSERT(args.pollset_set_alternative == nullptr &&
2387
- "Only one of 'cq' and 'pollset_set_alternative' should be "
2388
- "non-nullptr.");
2389
2368
  GRPC_CQ_INTERNAL_REF(args.cq, "bind");
2390
- call_context_.pollent_ =
2391
- grpc_polling_entity_create_from_pollset(grpc_cq_pollset(args.cq));
2392
- }
2393
- if (args.pollset_set_alternative != nullptr) {
2394
- call_context_.pollent_ = grpc_polling_entity_create_from_pollset_set(
2395
- args.pollset_set_alternative);
2396
2369
  }
2397
2370
  }
2398
2371
 
2399
- Waker PromiseBasedCall::MakeNonOwningWaker() {
2400
- if (non_owning_wakeable_ == nullptr) {
2401
- non_owning_wakeable_ = new NonOwningWakable(this);
2402
- } else {
2403
- non_owning_wakeable_->Ref();
2404
- }
2405
- return Waker(non_owning_wakeable_, nullptr);
2406
- }
2407
-
2408
2372
  void PromiseBasedCall::CToMetadata(grpc_metadata* metadata, size_t count,
2409
2373
  grpc_metadata_batch* b) {
2410
2374
  for (size_t i = 0; i < count; i++) {
@@ -2439,15 +2403,14 @@ void* PromiseBasedCall::ContextGet(grpc_context_index elem) const {
2439
2403
  PromiseBasedCall::Completion PromiseBasedCall::StartCompletion(
2440
2404
  void* tag, bool is_closure, const grpc_op* ops) {
2441
2405
  Completion c(BatchSlotForOp(ops[0].op));
2442
- if (grpc_call_trace.enabled()) {
2443
- gpr_log(GPR_INFO, "%s[call] StartCompletion %s tag=%p", DebugTag().c_str(),
2444
- CompletionString(c).c_str(), tag);
2445
- }
2446
2406
  if (!is_closure) {
2447
2407
  grpc_cq_begin_op(cq(), tag);
2448
2408
  }
2449
- completion_info_[c.index()].pending = {
2450
- PendingOpBit(PendingOp::kStartingBatch), is_closure, true, tag};
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
+ }
2451
2414
  return c;
2452
2415
  }
2453
2416
 
@@ -2458,10 +2421,7 @@ PromiseBasedCall::Completion PromiseBasedCall::AddOpToCompletion(
2458
2421
  CompletionString(completion).c_str(), PendingOpString(reason));
2459
2422
  }
2460
2423
  GPR_ASSERT(completion.has_value());
2461
- auto& pending_op_bits =
2462
- completion_info_[completion.index()].pending.pending_op_bits;
2463
- GPR_ASSERT((pending_op_bits & PendingOpBit(reason)) == 0);
2464
- pending_op_bits |= PendingOpBit(reason);
2424
+ completion_info_[completion.index()].pending.AddPendingBit(reason);
2465
2425
  return Completion(completion.index());
2466
2426
  }
2467
2427
 
@@ -2472,71 +2432,61 @@ void PromiseBasedCall::FailCompletion(const Completion& completion,
2472
2432
  "%s[call] FailCompletion %s", DebugTag().c_str(),
2473
2433
  CompletionString(completion).c_str());
2474
2434
  }
2475
- completion_info_[completion.index()].pending.success = false;
2435
+ completion_info_[completion.index()].pending.MarkFailed();
2436
+ }
2437
+
2438
+ void PromiseBasedCall::ForceCompletionSuccess(const Completion& completion) {
2439
+ completion_info_[completion.index()].pending.MarkForceSuccess();
2476
2440
  }
2477
2441
 
2478
2442
  void PromiseBasedCall::FinishOpOnCompletion(Completion* completion,
2479
2443
  PendingOp reason) {
2480
2444
  if (grpc_call_trace.enabled()) {
2481
- auto pending_op_bits =
2482
- completion_info_[completion->index()].pending.pending_op_bits;
2483
- bool success = completion_info_[completion->index()].pending.success;
2484
- std::vector<const char*> pending;
2485
- for (size_t i = 0; i < 8 * sizeof(pending_op_bits); i++) {
2486
- if (static_cast<PendingOp>(i) == reason) continue;
2487
- if (pending_op_bits & (1 << i)) {
2488
- pending.push_back(PendingOpString(static_cast<PendingOp>(i)));
2489
- }
2490
- }
2491
- gpr_log(
2492
- GPR_INFO, "%s[call] FinishOpOnCompletion tag:%p %s %s %s",
2493
- DebugTag().c_str(), completion_info_[completion->index()].pending.tag,
2494
- CompletionString(*completion).c_str(), PendingOpString(reason),
2495
- (pending.empty()
2496
- ? (success ? std::string("done") : std::string("failed"))
2497
- : absl::StrFormat("pending_ops={%s}", absl::StrJoin(pending, ",")))
2498
- .c_str());
2445
+ gpr_log(GPR_INFO, "%s[call] FinishOpOnCompletion completion:%s finish:%s",
2446
+ DebugTag().c_str(), CompletionString(*completion).c_str(),
2447
+ PendingOpString(reason));
2499
2448
  }
2500
2449
  const uint8_t i = completion->TakeIndex();
2501
2450
  GPR_ASSERT(i < GPR_ARRAY_SIZE(completion_info_));
2502
2451
  CompletionInfo::Pending& pending = completion_info_[i].pending;
2503
- GPR_ASSERT(pending.pending_op_bits & PendingOpBit(reason));
2504
- pending.pending_op_bits &= ~PendingOpBit(reason);
2505
- auto error = pending.success ? absl::OkStatus() : absl::CancelledError();
2506
- if (pending.pending_op_bits == 0) {
2507
- if (pending.is_closure) {
2508
- ExecCtx::Run(DEBUG_LOCATION, static_cast<grpc_closure*>(pending.tag),
2509
- error);
2510
- } else {
2511
- grpc_cq_end_op(
2512
- cq(), pending.tag, error, [](void*, grpc_cq_completion*) {}, nullptr,
2513
- &completion_info_[i].completion);
2514
- }
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);
2515
2475
  }
2516
2476
  }
2517
2477
 
2518
- void PromiseBasedCall::Update() {
2519
- keep_polling_ = false;
2520
- do {
2521
- UpdateOnce();
2522
- } while (std::exchange(keep_polling_, false));
2523
- }
2524
-
2525
- void PromiseBasedCall::ForceImmediateRepoll() { keep_polling_ = true; }
2526
-
2527
2478
  void PromiseBasedCall::SetCompletionQueue(grpc_completion_queue* cq) {
2528
- MutexLock lock(&mu_);
2529
- SetCompletionQueueLocked(cq);
2530
- }
2531
-
2532
- void PromiseBasedCall::SetCompletionQueueLocked(grpc_completion_queue* cq) {
2533
2479
  cq_ = cq;
2534
2480
  GRPC_CQ_INTERNAL_REF(cq, "bind");
2535
- call_context_.pollent_ =
2536
- grpc_polling_entity_create_from_pollset(grpc_cq_pollset(cq));
2537
2481
  }
2538
2482
 
2539
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
+ }
2540
2490
  if (deadline >= deadline_) return;
2541
2491
  auto* const event_engine = channel()->event_engine();
2542
2492
  if (deadline_ != Timestamp::InfFuture()) {
@@ -2544,10 +2494,12 @@ void PromiseBasedCall::UpdateDeadline(Timestamp deadline) {
2544
2494
  } else {
2545
2495
  InternalRef("deadline");
2546
2496
  }
2547
- event_engine->RunAfter(deadline - Timestamp::Now(), this);
2497
+ deadline_ = deadline;
2498
+ deadline_task_ = event_engine->RunAfter(deadline - Timestamp::Now(), this);
2548
2499
  }
2549
2500
 
2550
2501
  void PromiseBasedCall::ResetDeadline() {
2502
+ MutexLock lock(&deadline_mu_);
2551
2503
  if (deadline_ == Timestamp::InfFuture()) return;
2552
2504
  auto* const event_engine = channel()->event_engine();
2553
2505
  if (!event_engine->Cancel(deadline_task_)) return;
@@ -2564,117 +2516,91 @@ void PromiseBasedCall::Run() {
2564
2516
 
2565
2517
  void PromiseBasedCall::StartSendMessage(const grpc_op& op,
2566
2518
  const Completion& completion,
2567
- PipeSender<MessageHandle>* sender) {
2568
- GPR_ASSERT(!outstanding_send_.has_value());
2569
- if (!completed_) {
2570
- send_message_completion_ =
2571
- AddOpToCompletion(completion, PendingOp::kSendMessage);
2572
- SliceBuffer send;
2573
- grpc_slice_buffer_swap(
2574
- &op.data.send_message.send_message->data.raw.slice_buffer,
2575
- send.c_slice_buffer());
2576
- outstanding_send_.emplace(sender->Push(
2577
- GetContext<Arena>()->MakePooled<Message>(std::move(send), op.flags)));
2578
- } else {
2579
- FailCompletion(completion);
2580
- }
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
+ });
2581
2542
  }
2582
2543
 
2583
- bool PromiseBasedCall::PollSendMessage() {
2584
- if (!outstanding_send_.has_value()) return true;
2585
- Poll<bool> r = (*outstanding_send_)();
2586
- if (const bool* result = r.value_if_ready()) {
2587
- if (grpc_call_trace.enabled()) {
2588
- gpr_log(GPR_DEBUG, "%sPollSendMessage completes %s", DebugTag().c_str(),
2589
- *result ? "successfully" : "with failure");
2590
- }
2591
- if (!*result) {
2592
- FailCompletion(send_message_completion_);
2593
- return false;
2594
- }
2595
- FinishOpOnCompletion(&send_message_completion_, PendingOp::kSendMessage);
2596
- outstanding_send_.reset();
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());
2597
2553
  }
2598
- return true;
2599
- }
2600
-
2601
- void PromiseBasedCall::CancelSendMessage() {
2602
- if (!outstanding_send_.has_value()) return;
2603
- FinishOpOnCompletion(&send_message_completion_, PendingOp::kSendMessage);
2604
- outstanding_send_.reset();
2605
- }
2606
-
2607
- void PromiseBasedCall::StartRecvMessage(const grpc_op& op,
2608
- const Completion& completion,
2609
- PipeReceiver<MessageHandle>* receiver) {
2610
- GPR_ASSERT(!outstanding_recv_.has_value());
2611
2554
  recv_message_ = op.data.recv_message.recv_message;
2612
- recv_message_completion_ =
2613
- AddOpToCompletion(completion, PendingOp::kReceiveMessage);
2614
- outstanding_recv_.emplace(receiver->Next());
2615
- }
2616
-
2617
- void PromiseBasedCall::PollRecvMessage(
2618
- grpc_compression_algorithm incoming_compression_algorithm) {
2619
- if (!outstanding_recv_.has_value()) return;
2620
- Poll<NextResult<MessageHandle>> r = (*outstanding_recv_)();
2621
- if (auto* result = r.value_if_ready()) {
2622
- outstanding_recv_.reset();
2623
- if (result->has_value()) {
2624
- MessageHandle& message = **result;
2625
- if ((message->flags() & GRPC_WRITE_INTERNAL_COMPRESS) &&
2626
- (incoming_compression_algorithm != GRPC_COMPRESS_NONE)) {
2627
- *recv_message_ = grpc_raw_compressed_byte_buffer_create(
2628
- nullptr, 0, incoming_compression_algorithm);
2629
- } else {
2630
- *recv_message_ = grpc_raw_byte_buffer_create(nullptr, 0);
2631
- }
2632
- grpc_slice_buffer_move_into(message->payload()->c_slice_buffer(),
2633
- &(*recv_message_)->data.raw.slice_buffer);
2634
- if (grpc_call_trace.enabled()) {
2635
- gpr_log(GPR_INFO,
2636
- "%s[call] PollRecvMessage: outstanding_recv finishes: received "
2637
- "%" PRIdPTR " byte message",
2638
- DebugTag().c_str(),
2639
- (*recv_message_)->data.raw.slice_buffer.length);
2640
- }
2641
- } else if (result->cancelled()) {
2642
- if (grpc_call_trace.enabled()) {
2643
- gpr_log(GPR_INFO,
2644
- "%s[call] PollRecvMessage: outstanding_recv finishes: received "
2645
- "end-of-stream with error",
2646
- DebugTag().c_str());
2647
- }
2648
- FailCompletion(recv_message_completion_);
2649
- *recv_message_ = nullptr;
2650
- } else {
2651
- if (grpc_call_trace.enabled()) {
2652
- gpr_log(GPR_INFO,
2653
- "%s[call] PollRecvMessage: outstanding_recv finishes: received "
2654
- "end-of-stream",
2655
- DebugTag().c_str());
2656
- }
2657
- *recv_message_ = nullptr;
2658
- }
2659
- FinishOpOnCompletion(&recv_message_completion_, PendingOp::kReceiveMessage);
2660
- } else if (completed_) {
2661
- if (grpc_call_trace.enabled()) {
2662
- gpr_log(GPR_INFO,
2663
- "%s[call] UpdateOnce: outstanding_recv finishes: promise has "
2664
- "completed without queuing a message, forcing end-of-stream",
2665
- DebugTag().c_str());
2666
- }
2667
- outstanding_recv_.reset();
2668
- *recv_message_ = nullptr;
2669
- FinishOpOnCompletion(&recv_message_completion_, PendingOp::kReceiveMessage);
2670
- }
2671
- }
2672
-
2673
- void PromiseBasedCall::CancelRecvMessage() {
2674
- if (!outstanding_recv_.has_value()) return;
2675
- *recv_message_ = nullptr;
2676
- outstanding_recv_.reset();
2677
- FinishOpOnCompletion(&recv_message_completion_, PendingOp::kReceiveMessage);
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
+ });
2678
2604
  }
2679
2605
 
2680
2606
  ///////////////////////////////////////////////////////////////////////////////
@@ -2690,14 +2616,12 @@ void CallContext::IncrementRefCount(const char* reason) {
2690
2616
 
2691
2617
  void CallContext::Unref(const char* reason) { call_->InternalUnref(reason); }
2692
2618
 
2693
- gpr_atm* CallContext::peer_string_atm_ptr() {
2694
- return call_->peer_string_atm_ptr();
2695
- }
2696
-
2697
2619
  void CallContext::UpdateDeadline(Timestamp deadline) {
2698
2620
  call_->UpdateDeadline(deadline);
2699
2621
  }
2700
2622
 
2623
+ Timestamp CallContext::deadline() const { return call_->deadline(); }
2624
+
2701
2625
  ServerCallContext* CallContext::server_call_context() {
2702
2626
  return call_->server_call_context();
2703
2627
  }
@@ -2728,6 +2652,17 @@ class ClientPromiseBasedCall final : public PromiseBasedCall {
2728
2652
  ClientPromiseBasedCall(Arena* arena, grpc_call_create_args* args)
2729
2653
  : PromiseBasedCall(arena, 1, *args) {
2730
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
+ }
2731
2666
  ScopedContext context(this);
2732
2667
  send_initial_metadata_ =
2733
2668
  GetContext<Arena>()->MakePooled<ClientMetadata>(GetContext<Arena>());
@@ -2747,24 +2682,39 @@ class ClientPromiseBasedCall final : public PromiseBasedCall {
2747
2682
  ~ClientPromiseBasedCall() override {
2748
2683
  ScopedContext context(this);
2749
2684
  send_initial_metadata_.reset();
2750
- recv_status_on_client_ = absl::monostate();
2751
- promise_ = ArenaPromise<ServerMetadataHandle>();
2752
- // Need to destroy the pipes under the ScopedContext above, so we move them
2753
- // out here and then allow the destructors to run at end of scope, but
2754
- // before context.
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.
2755
2688
  auto c2s = std::move(client_to_server_messages_);
2756
2689
  auto s2c = std::move(server_to_client_messages_);
2757
2690
  auto sim = std::move(server_initial_metadata_);
2758
2691
  }
2759
2692
 
2760
- absl::string_view GetServerAuthority() const override { abort(); }
2761
- void CancelWithErrorLocked(grpc_error_handle error) override
2762
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
2763
- bool is_trailers_only() const override {
2764
- MutexLock lock(mu());
2765
- return is_trailers_only_;
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
+ }
2766
2715
  }
2767
- bool failed_before_recv_message() const override { abort(); }
2716
+ absl::string_view GetServerAuthority() const override { abort(); }
2717
+ bool is_trailers_only() const override { return is_trailers_only_; }
2768
2718
 
2769
2719
  grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
2770
2720
  bool is_notify_tag_closure) override;
@@ -2774,65 +2724,84 @@ class ClientPromiseBasedCall final : public PromiseBasedCall {
2774
2724
  }
2775
2725
 
2776
2726
  private:
2777
- // Poll the underlying promise (and sundry objects) once.
2778
- void UpdateOnce() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu()) override;
2779
2727
  // Finish the call with the given status/trailing metadata.
2780
- void Finish(ServerMetadataHandle trailing_metadata)
2781
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
2728
+ void Finish(ServerMetadataHandle trailing_metadata);
2782
2729
  // Validate that a set of ops is valid for a client call.
2783
- grpc_call_error ValidateBatch(const grpc_op* ops, size_t nops) const
2784
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
2730
+ grpc_call_error ValidateBatch(const grpc_op* ops, size_t nops) const;
2785
2731
  // Commit a valid batch of operations to be executed.
2786
2732
  void CommitBatch(const grpc_op* ops, size_t nops,
2787
- const Completion& completion)
2788
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
2733
+ const Completion& completion);
2789
2734
  // Start the underlying promise.
2790
- void StartPromise(ClientMetadataHandle client_initial_metadata)
2791
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
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);
2792
2745
  // Publish status out to the application.
2793
2746
  void PublishStatus(
2794
2747
  grpc_op::grpc_op_data::grpc_op_recv_status_on_client op_args,
2795
- ServerMetadataHandle trailing_metadata)
2796
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
2748
+ ServerMetadataHandle trailing_metadata);
2797
2749
  // Publish server initial metadata out to the application.
2798
- void PublishInitialMetadata(ServerMetadata* metadata)
2799
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
2800
-
2801
- ArenaPromise<ServerMetadataHandle> promise_ ABSL_GUARDED_BY(mu());
2802
- Pipe<ServerMetadataHandle> server_initial_metadata_ ABSL_GUARDED_BY(mu()){
2803
- arena()};
2804
- Pipe<MessageHandle> client_to_server_messages_ ABSL_GUARDED_BY(mu()){arena()};
2805
- Pipe<MessageHandle> server_to_client_messages_ ABSL_GUARDED_BY(mu()){arena()};
2750
+ void PublishInitialMetadata(ServerMetadata* metadata);
2806
2751
 
2807
2752
  ClientMetadataHandle send_initial_metadata_;
2808
- grpc_metadata_array* recv_initial_metadata_ ABSL_GUARDED_BY(mu()) = nullptr;
2809
- absl::variant<absl::monostate,
2810
- grpc_op::grpc_op_data::grpc_op_recv_status_on_client,
2811
- ServerMetadataHandle>
2812
- recv_status_on_client_ ABSL_GUARDED_BY(mu());
2813
- absl::optional<PipeReceiverNextType<ServerMetadataHandle>>
2814
- server_initial_metadata_ready_;
2815
- absl::optional<grpc_compression_algorithm> incoming_compression_algorithm_;
2816
- Completion recv_initial_metadata_completion_ ABSL_GUARDED_BY(mu());
2817
- Completion recv_status_on_client_completion_ ABSL_GUARDED_BY(mu());
2818
- Completion close_send_completion_ ABSL_GUARDED_BY(mu());
2819
- bool is_trailers_only_ ABSL_GUARDED_BY(mu());
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_;
2820
2770
  };
2821
2771
 
2822
2772
  void ClientPromiseBasedCall::StartPromise(
2823
- ClientMetadataHandle client_initial_metadata) {
2824
- GPR_ASSERT(!promise_.has_value());
2825
- promise_ = channel()->channel_stack()->MakeClientCallPromise(CallArgs{
2826
- std::move(client_initial_metadata),
2827
- &server_initial_metadata_.sender,
2828
- &client_to_server_messages_.receiver,
2829
- &server_to_client_messages_.sender,
2830
- });
2831
- }
2832
-
2833
- void ClientPromiseBasedCall::CancelWithErrorLocked(grpc_error_handle error) {
2834
- ScopedContext context(this);
2835
- Finish(ServerMetadataFromStatus(grpc_error_to_absl_status(error)));
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
+ });
2836
2805
  }
2837
2806
 
2838
2807
  grpc_call_error ClientPromiseBasedCall::ValidateBatch(const grpc_op* ops,
@@ -2873,49 +2842,61 @@ grpc_call_error ClientPromiseBasedCall::ValidateBatch(const grpc_op* ops,
2873
2842
 
2874
2843
  void ClientPromiseBasedCall::CommitBatch(const grpc_op* ops, size_t nops,
2875
2844
  const Completion& completion) {
2845
+ Party::BulkSpawner spawner(this);
2876
2846
  for (size_t op_idx = 0; op_idx < nops; op_idx++) {
2877
2847
  const grpc_op& op = ops[op_idx];
2878
2848
  switch (op.op) {
2879
2849
  case GRPC_OP_SEND_INITIAL_METADATA: {
2880
- // compression not implemented
2881
- GPR_ASSERT(
2882
- !op.data.send_initial_metadata.maybe_compression_level.is_set);
2883
- if (!completed()) {
2884
- CToMetadata(op.data.send_initial_metadata.metadata,
2885
- op.data.send_initial_metadata.count,
2886
- send_initial_metadata_.get());
2887
- StartPromise(std::move(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());
2888
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);
2889
2865
  } break;
2890
2866
  case GRPC_OP_RECV_INITIAL_METADATA: {
2891
- recv_initial_metadata_ =
2892
- op.data.recv_initial_metadata.recv_initial_metadata;
2893
- server_initial_metadata_ready_.emplace(
2894
- server_initial_metadata_.receiver.Next());
2895
- recv_initial_metadata_completion_ =
2896
- AddOpToCompletion(completion, PendingOp::kReceiveInitialMetadata);
2867
+ StartRecvInitialMetadata(
2868
+ op.data.recv_initial_metadata.recv_initial_metadata, completion,
2869
+ spawner);
2897
2870
  } break;
2898
2871
  case GRPC_OP_RECV_STATUS_ON_CLIENT: {
2899
- recv_status_on_client_completion_ =
2900
- AddOpToCompletion(completion, PendingOp::kReceiveStatusOnClient);
2901
- if (auto* finished_metadata =
2902
- absl::get_if<ServerMetadataHandle>(&recv_status_on_client_)) {
2903
- PublishStatus(op.data.recv_status_on_client,
2904
- std::move(*finished_metadata));
2905
- } else {
2906
- recv_status_on_client_ = op.data.recv_status_on_client;
2907
- }
2872
+ StartRecvStatusOnClient(completion, op.data.recv_status_on_client,
2873
+ spawner);
2908
2874
  } break;
2909
2875
  case GRPC_OP_SEND_MESSAGE:
2910
- StartSendMessage(op, completion, &client_to_server_messages_.sender);
2876
+ StartSendMessage(op, completion, &client_to_server_messages_.sender,
2877
+ spawner);
2911
2878
  break;
2912
2879
  case GRPC_OP_RECV_MESSAGE:
2913
- StartRecvMessage(op, completion, &server_to_client_messages_.receiver);
2880
+ StartRecvMessage(
2881
+ op, completion,
2882
+ [this]() {
2883
+ return server_initial_metadata_.receiver.AwaitClosed();
2884
+ },
2885
+ &server_to_client_messages_.receiver, false, spawner);
2914
2886
  break;
2915
2887
  case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
2916
- close_send_completion_ =
2917
- AddOpToCompletion(completion, PendingOp::kSendCloseFromClient);
2918
- GPR_ASSERT(close_send_completion_.has_value());
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
+ });
2919
2900
  break;
2920
2901
  case GRPC_OP_SEND_STATUS_FROM_SERVER:
2921
2902
  case GRPC_OP_RECV_CLOSE_ON_SERVER:
@@ -2928,8 +2909,6 @@ grpc_call_error ClientPromiseBasedCall::StartBatch(const grpc_op* ops,
2928
2909
  size_t nops,
2929
2910
  void* notify_tag,
2930
2911
  bool is_notify_tag_closure) {
2931
- MutexLock lock(mu());
2932
- ScopedContext activity_context(this);
2933
2912
  if (nops == 0) {
2934
2913
  EndOpImmediately(cq(), notify_tag, is_notify_tag_closure);
2935
2914
  return GRPC_CALL_OK;
@@ -2941,69 +2920,36 @@ grpc_call_error ClientPromiseBasedCall::StartBatch(const grpc_op* ops,
2941
2920
  Completion completion =
2942
2921
  StartCompletion(notify_tag, is_notify_tag_closure, ops);
2943
2922
  CommitBatch(ops, nops, completion);
2944
- Update();
2945
2923
  FinishOpOnCompletion(&completion, PendingOp::kStartingBatch);
2946
2924
  return GRPC_CALL_OK;
2947
2925
  }
2948
2926
 
2949
- void ClientPromiseBasedCall::PublishInitialMetadata(ServerMetadata* metadata) {
2950
- incoming_compression_algorithm_ =
2951
- metadata->Take(GrpcEncodingMetadata()).value_or(GRPC_COMPRESS_NONE);
2952
- server_initial_metadata_ready_.reset();
2953
- GPR_ASSERT(recv_initial_metadata_ != nullptr);
2954
- PublishMetadataArray(metadata,
2955
- std::exchange(recv_initial_metadata_, nullptr));
2956
- FinishOpOnCompletion(&recv_initial_metadata_completion_,
2957
- PendingOp::kReceiveInitialMetadata);
2958
- }
2959
-
2960
- void ClientPromiseBasedCall::UpdateOnce() {
2961
- if (grpc_call_trace.enabled()) {
2962
- gpr_log(GPR_INFO, "%s[call] UpdateOnce: %s%shas_promise=%s",
2963
- DebugTag().c_str(),
2964
- PresentAndCompletionText("server_initial_metadata_ready",
2965
- server_initial_metadata_ready_.has_value(),
2966
- recv_initial_metadata_completion_)
2967
- .c_str(),
2968
- PollStateDebugString().c_str(),
2969
- promise_.has_value() ? "true" : "false");
2970
- }
2971
- if (server_initial_metadata_ready_.has_value()) {
2972
- Poll<NextResult<ServerMetadataHandle>> r =
2973
- (*server_initial_metadata_ready_)();
2974
- if (auto* server_initial_metadata = r.value_if_ready()) {
2975
- PublishInitialMetadata(server_initial_metadata->value().get());
2976
- } else if (completed()) {
2977
- ServerMetadata no_metadata{GetContext<Arena>()};
2978
- PublishInitialMetadata(&no_metadata);
2979
- }
2980
- }
2981
- if (!PollSendMessage()) {
2982
- Finish(ServerMetadataFromStatus(absl::Status(
2983
- absl::StatusCode::kInternal, "Failed to send message to server")));
2984
- }
2985
- if (!is_sending() && close_send_completion_.has_value()) {
2986
- client_to_server_messages_.sender.Close();
2987
- FinishOpOnCompletion(&close_send_completion_,
2988
- PendingOp::kSendCloseFromClient);
2989
- }
2990
- if (promise_.has_value()) {
2991
- Poll<ServerMetadataHandle> r = promise_();
2992
- if (grpc_call_trace.enabled()) {
2993
- gpr_log(GPR_INFO, "%s[call] UpdateOnce: promise returns %s",
2994
- DebugTag().c_str(),
2995
- PollToString(r, [](const ServerMetadataHandle& h) {
2996
- return h->DebugString();
2997
- }).c_str());
2998
- }
2999
- if (auto* result = r.value_if_ready()) {
3000
- AcceptTransportStatsFromContext();
3001
- Finish(std::move(*result));
3002
- }
3003
- }
3004
- if (incoming_compression_algorithm_.has_value()) {
3005
- PollRecvMessage(*incoming_compression_algorithm_);
3006
- }
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
+ });
3007
2953
  }
3008
2954
 
3009
2955
  void ClientPromiseBasedCall::Finish(ServerMetadataHandle trailing_metadata) {
@@ -3011,31 +2957,9 @@ void ClientPromiseBasedCall::Finish(ServerMetadataHandle trailing_metadata) {
3011
2957
  gpr_log(GPR_INFO, "%s[call] Finish: %s", DebugTag().c_str(),
3012
2958
  trailing_metadata->DebugString().c_str());
3013
2959
  }
3014
- promise_ = ArenaPromise<ServerMetadataHandle>();
3015
2960
  ResetDeadline();
3016
2961
  set_completed();
3017
- if (recv_initial_metadata_ != nullptr) {
3018
- ForceImmediateRepoll();
3019
- }
3020
- const bool pending_initial_metadata =
3021
- server_initial_metadata_ready_.has_value();
3022
- if (!pending_initial_metadata) {
3023
- server_initial_metadata_ready_.emplace(
3024
- server_initial_metadata_.receiver.Next());
3025
- }
3026
- Poll<NextResult<ServerMetadataHandle>> r =
3027
- (*server_initial_metadata_ready_)();
3028
- server_initial_metadata_ready_.reset();
3029
- if (auto* result = r.value_if_ready()) {
3030
- if (pending_initial_metadata) PublishInitialMetadata(result->value().get());
3031
- is_trailers_only_ = false;
3032
- } else {
3033
- if (pending_initial_metadata) {
3034
- ServerMetadata no_metadata{GetContext<Arena>()};
3035
- PublishInitialMetadata(&no_metadata);
3036
- }
3037
- is_trailers_only_ = true;
3038
- }
2962
+ client_to_server_messages_.sender.Close();
3039
2963
  if (auto* channelz_channel = channel()->channelz_node()) {
3040
2964
  if (trailing_metadata->get(GrpcStatusMetadata())
3041
2965
  .value_or(GRPC_STATUS_UNKNOWN) == GRPC_STATUS_OK) {
@@ -3044,13 +2968,7 @@ void ClientPromiseBasedCall::Finish(ServerMetadataHandle trailing_metadata) {
3044
2968
  channelz_channel->RecordCallFailed();
3045
2969
  }
3046
2970
  }
3047
- if (auto* status_request =
3048
- absl::get_if<grpc_op::grpc_op_data::grpc_op_recv_status_on_client>(
3049
- &recv_status_on_client_)) {
3050
- PublishStatus(*status_request, std::move(trailing_metadata));
3051
- } else {
3052
- recv_status_on_client_ = std::move(trailing_metadata);
3053
- }
2971
+ server_trailing_metadata_.Set(std::move(trailing_metadata));
3054
2972
  }
3055
2973
 
3056
2974
  namespace {
@@ -3076,35 +2994,44 @@ std::string MakeErrorString(const ServerMetadata* trailing_metadata) {
3076
2994
  }
3077
2995
  } // namespace
3078
2996
 
3079
- void ClientPromiseBasedCall::PublishStatus(
2997
+ void ClientPromiseBasedCall::StartRecvStatusOnClient(
2998
+ const Completion& completion,
3080
2999
  grpc_op::grpc_op_data::grpc_op_recv_status_on_client op_args,
3081
- ServerMetadataHandle trailing_metadata) {
3082
- const grpc_status_code status = trailing_metadata->get(GrpcStatusMetadata())
3083
- .value_or(GRPC_STATUS_UNKNOWN);
3084
- *op_args.status = status;
3085
- absl::string_view message_string;
3086
- if (Slice* message = trailing_metadata->get_pointer(GrpcMessageMetadata())) {
3087
- message_string = message->as_string_view();
3088
- *op_args.status_details = message->Ref().TakeCSlice();
3089
- } else {
3090
- *op_args.status_details = grpc_empty_slice();
3091
- }
3092
- if (message_string.empty()) {
3093
- RunFinalization(status, nullptr);
3094
- } else {
3095
- std::string error_string(message_string);
3096
- RunFinalization(status, error_string.c_str());
3097
- }
3098
- if (op_args.error_string != nullptr && status != GRPC_STATUS_OK) {
3099
- *op_args.error_string =
3100
- gpr_strdup(MakeErrorString(trailing_metadata.get()).c_str());
3101
- }
3102
- PublishMetadataArray(trailing_metadata.get(), op_args.trailing_metadata);
3103
- // Clear state saying we have a RECV_STATUS_ON_CLIENT outstanding
3104
- // (so we don't call through twice)
3105
- recv_status_on_client_ = absl::monostate();
3106
- FinishOpOnCompletion(&recv_status_on_client_completion_,
3107
- PendingOp::kReceiveStatusOnClient);
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
+ });
3108
3035
  }
3109
3036
  #endif
3110
3037
 
@@ -3117,19 +3044,22 @@ class ServerPromiseBasedCall final : public PromiseBasedCall {
3117
3044
  public:
3118
3045
  ServerPromiseBasedCall(Arena* arena, grpc_call_create_args* args);
3119
3046
 
3120
- void CancelWithErrorLocked(grpc_error_handle) override
3121
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
3047
+ void CancelWithError(grpc_error_handle) override;
3122
3048
  grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
3123
3049
  bool is_notify_tag_closure) override;
3124
- bool failed_before_recv_message() const override { abort(); }
3125
3050
  bool is_trailers_only() const override { abort(); }
3126
- absl::string_view GetServerAuthority() const override { return ""; }
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
+ }
3127
3057
 
3128
3058
  // Polling order for the server promise stack:
3129
3059
  //
3130
3060
  // │ ┌───────────────────────────────────────┐
3131
- // │ │ ServerPromiseBasedCall::UpdateOnce ├──► Lifetime management,
3132
- // │ ├───────────────────────────────────────┤ signal call end to app
3061
+ // │ │ ServerPromiseBasedCall ├──► Lifetime management
3062
+ // │ ├───────────────────────────────────────┤
3133
3063
  // │ │ ConnectedChannel ├─┐
3134
3064
  // │ ├───────────────────────────────────────┤ └► Interactions with the
3135
3065
  // │ │ ... closest to transport filter │ transport - send/recv msgs
@@ -3140,16 +3070,12 @@ class ServerPromiseBasedCall final : public PromiseBasedCall {
3140
3070
  // │ ├───────────────────────────────────────┤ │ setup, publishing call to
3141
3071
  // │ │ Server::ChannelData::MakeCallPromise ├─┘ application
3142
3072
  // │ ├───────────────────────────────────────┤
3143
- // │ │ ServerPromiseBasedCall::PollTopOfCall ├──► Application interactions,
3144
- // ▼ └───────────────────────────────────────┘ forwarding messages,
3145
- // Polling & sending trailing metadata
3073
+ // │ │ MakeTopOfServerCallPromise ├──► Send trailing metadata
3074
+ // ▼ └───────────────────────────────────────┘
3075
+ // Polling &
3146
3076
  // instantiation
3147
3077
  // order
3148
3078
 
3149
- void UpdateOnce() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu()) override;
3150
- Poll<ServerMetadataHandle> PollTopOfCall()
3151
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
3152
-
3153
3079
  std::string DebugTag() const override {
3154
3080
  return absl::StrFormat("SERVER_CALL[%p]: ", this);
3155
3081
  }
@@ -3159,44 +3085,64 @@ class ServerPromiseBasedCall final : public PromiseBasedCall {
3159
3085
  private:
3160
3086
  class RecvCloseOpCancelState {
3161
3087
  public:
3162
- // Request that receiver be filled in per grpc_op_recv_close_on_server.
3163
- // Returns true if the request can be fulfilled immediately.
3164
- // Returns false if the request will be fulfilled later.
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.
3165
3092
  bool ReceiveCloseOnServerOpStarted(int* receiver) {
3166
- switch (state_) {
3167
- case kUnset:
3168
- state_ = reinterpret_cast<uintptr_t>(receiver);
3169
- return false;
3170
- case kFinishedWithFailure:
3171
- *receiver = 1;
3172
- return true;
3173
- case kFinishedWithSuccess:
3174
- *receiver = 0;
3175
- return true;
3176
- default:
3177
- abort(); // unreachable
3178
- }
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;
3179
3113
  }
3180
3114
 
3181
3115
  // Mark the call as having completed.
3182
- // Returns true if this finishes a previous RequestReceiveCloseOnServer.
3183
- bool CompleteCall(bool success) {
3184
- switch (state_) {
3185
- case kUnset:
3186
- state_ = success ? kFinishedWithSuccess : kFinishedWithFailure;
3187
- return false;
3188
- case kFinishedWithFailure:
3189
- case kFinishedWithSuccess:
3190
- abort(); // unreachable
3191
- default:
3192
- *reinterpret_cast<int*>(state_) = success ? 0 : 1;
3193
- state_ = success ? kFinishedWithSuccess : kFinishedWithFailure;
3194
- return true;
3195
- }
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;
3196
3141
  }
3197
3142
 
3198
3143
  std::string ToString() const {
3199
- switch (state_) {
3144
+ auto state = state_.load(std::memory_order_relaxed);
3145
+ switch (state) {
3200
3146
  case kUnset:
3201
3147
  return "Unset";
3202
3148
  case kFinishedWithFailure:
@@ -3205,7 +3151,7 @@ class ServerPromiseBasedCall final : public PromiseBasedCall {
3205
3151
  return "FinishedWithSuccess";
3206
3152
  default:
3207
3153
  return absl::StrFormat("WaitingForReceiver(%p)",
3208
- reinterpret_cast<void*>(state_));
3154
+ reinterpret_cast<void*>(state));
3209
3155
  }
3210
3156
  }
3211
3157
 
@@ -3213,37 +3159,28 @@ class ServerPromiseBasedCall final : public PromiseBasedCall {
3213
3159
  static constexpr uintptr_t kUnset = 0;
3214
3160
  static constexpr uintptr_t kFinishedWithFailure = 1;
3215
3161
  static constexpr uintptr_t kFinishedWithSuccess = 2;
3216
- // Holds one of kUnset, kFinishedWithFailure, or kFinishedWithSuccess
3217
- // OR an int* that wants to receive the final status.
3218
- uintptr_t state_ = kUnset;
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};
3219
3166
  };
3220
3167
 
3221
3168
  grpc_call_error ValidateBatch(const grpc_op* ops, size_t nops) const;
3222
3169
  void CommitBatch(const grpc_op* ops, size_t nops,
3223
- const Completion& completion)
3224
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
3170
+ const Completion& completion);
3171
+ void Finish(ServerMetadataHandle result);
3225
3172
 
3226
3173
  friend class ServerCallContext;
3227
3174
  ServerCallContext call_context_;
3228
3175
  Server* const server_;
3229
- ArenaPromise<ServerMetadataHandle> promise_ ABSL_GUARDED_BY(mu());
3230
- PipeSender<MessageHandle>* server_to_client_messages_ ABSL_GUARDED_BY(mu()) =
3231
- nullptr;
3232
- PipeReceiver<MessageHandle>* client_to_server_messages_
3233
- ABSL_GUARDED_BY(mu()) = nullptr;
3234
- using SendInitialMetadataState =
3235
- absl::variant<absl::monostate, PipeSender<ServerMetadataHandle>*,
3236
- typename PipeSender<ServerMetadataHandle>::PushType>;
3237
- SendInitialMetadataState send_initial_metadata_state_ ABSL_GUARDED_BY(mu()) =
3238
- absl::monostate{};
3239
- ServerMetadataHandle send_trailing_metadata_ ABSL_GUARDED_BY(mu());
3240
- grpc_compression_algorithm incoming_compression_algorithm_
3241
- ABSL_GUARDED_BY(mu());
3242
- RecvCloseOpCancelState recv_close_op_cancel_state_ ABSL_GUARDED_BY(mu());
3243
- Completion recv_close_completion_ ABSL_GUARDED_BY(mu());
3244
- bool cancel_send_and_receive_ ABSL_GUARDED_BY(mu()) = false;
3245
- Completion send_status_from_server_completion_ ABSL_GUARDED_BY(mu());
3246
- ClientMetadataHandle client_initial_metadata_ ABSL_GUARDED_BY(mu());
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};
3247
3184
  };
3248
3185
 
3249
3186
  ServerPromiseBasedCall::ServerPromiseBasedCall(Arena* arena,
@@ -3256,106 +3193,72 @@ ServerPromiseBasedCall::ServerPromiseBasedCall(Arena* arena,
3256
3193
  if (channelz_node != nullptr) {
3257
3194
  channelz_node->RecordCallStarted();
3258
3195
  }
3259
- MutexLock lock(mu());
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
+ }
3260
3216
  ScopedContext activity_context(this);
3261
- promise_ = channel()->channel_stack()->MakeServerCallPromise(
3262
- CallArgs{nullptr, nullptr, nullptr, nullptr});
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)); });
3263
3222
  }
3264
3223
 
3265
- Poll<ServerMetadataHandle> ServerPromiseBasedCall::PollTopOfCall() {
3224
+ void ServerPromiseBasedCall::Finish(ServerMetadataHandle result) {
3266
3225
  if (grpc_call_trace.enabled()) {
3267
- gpr_log(GPR_INFO, "%s[call] PollTopOfCall: %s%s%s", DebugTag().c_str(),
3268
- cancel_send_and_receive_ ? "force-" : "",
3269
- send_trailing_metadata_ != nullptr
3270
- ? absl::StrCat("send-metadata:",
3271
- send_trailing_metadata_->DebugString(), " ")
3272
- .c_str()
3273
- : " ",
3274
- PollStateDebugString().c_str());
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());
3275
3229
  }
3276
-
3277
- if (cancel_send_and_receive_) {
3278
- CancelSendMessage();
3279
- CancelRecvMessage();
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
+ }
3280
3239
  }
3281
-
3282
- PollSendMessage();
3283
- PollRecvMessage(incoming_compression_algorithm_);
3284
-
3285
- if (!is_sending() && send_trailing_metadata_ != nullptr) {
3286
- server_to_client_messages_->Close();
3287
- return std::move(send_trailing_metadata_);
3240
+ if (recv_close_op_cancel_state_.CompleteCallWithCancelledSetTo(
3241
+ result->get(GrpcCallWasCancelled()).value_or(true))) {
3242
+ FinishOpOnCompletion(&recv_close_completion_,
3243
+ PendingOp::kReceiveCloseOnServer);
3288
3244
  }
3289
-
3290
- return Pending{};
3291
- }
3292
-
3293
- void ServerPromiseBasedCall::UpdateOnce() {
3294
- if (grpc_call_trace.enabled()) {
3295
- gpr_log(
3296
- GPR_INFO, "%s[call] UpdateOnce: recv_close:%s%s %s%shas_promise=%s",
3297
- DebugTag().c_str(), recv_close_op_cancel_state_.ToString().c_str(),
3298
- recv_close_completion_.has_value()
3299
- ? absl::StrCat(":", CompletionString(recv_close_completion_))
3300
- .c_str()
3301
- : "",
3302
- send_status_from_server_completion_.has_value()
3303
- ? absl::StrCat(
3304
- "send_status:",
3305
- CompletionString(send_status_from_server_completion_), " ")
3306
- .c_str()
3307
- : "",
3308
- PollStateDebugString().c_str(),
3309
- promise_.has_value() ? "true" : "false");
3310
- }
3311
- if (auto* p =
3312
- absl::get_if<typename PipeSender<ServerMetadataHandle>::PushType>(
3313
- &send_initial_metadata_state_)) {
3314
- if ((*p)().ready()) {
3315
- send_initial_metadata_state_ = absl::monostate{};
3316
- }
3245
+ if (server_initial_metadata_ != nullptr) {
3246
+ server_initial_metadata_->Close();
3317
3247
  }
3318
- if (promise_.has_value()) {
3319
- auto r = promise_();
3320
- if (grpc_call_trace.enabled()) {
3321
- gpr_log(GPR_INFO, "%s[call] UpdateOnce: promise returns %s",
3322
- DebugTag().c_str(),
3323
- PollToString(r, [](const ServerMetadataHandle& h) {
3324
- return h->DebugString();
3325
- }).c_str());
3326
- }
3327
- if (auto* result = r.value_if_ready()) {
3328
- if (grpc_call_trace.enabled()) {
3329
- gpr_log(GPR_INFO, "%s[call] UpdateOnce: GotResult %s result:%s",
3330
- DebugTag().c_str(),
3331
- recv_close_op_cancel_state_.ToString().c_str(),
3332
- (*result)->DebugString().c_str());
3333
- }
3334
- if (recv_close_op_cancel_state_.CompleteCall(
3335
- (*result)->get(GrpcStatusFromWire()).value_or(false))) {
3336
- FinishOpOnCompletion(&recv_close_completion_,
3337
- PendingOp::kReceiveCloseOnServer);
3338
- }
3339
- channelz::ServerNode* channelz_node = server_->channelz_node();
3340
- if (channelz_node != nullptr) {
3341
- if ((*result)
3342
- ->get(GrpcStatusMetadata())
3343
- .value_or(GRPC_STATUS_UNKNOWN) == GRPC_STATUS_OK) {
3344
- channelz_node->RecordCallSucceeded();
3345
- } else {
3346
- channelz_node->RecordCallFailed();
3347
- }
3348
- }
3349
- if (send_status_from_server_completion_.has_value()) {
3350
- FinishOpOnCompletion(&send_status_from_server_completion_,
3351
- PendingOp::kSendStatusFromServer);
3352
- }
3353
- CancelSendMessage();
3354
- CancelRecvMessage();
3355
- set_completed();
3356
- promise_ = ArenaPromise<ServerMetadataHandle>();
3357
- }
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());
3358
3258
  }
3259
+ set_completed();
3260
+ ResetDeadline();
3261
+ PropagateCancellationToChildren();
3359
3262
  }
3360
3263
 
3361
3264
  grpc_call_error ServerPromiseBasedCall::ValidateBatch(const grpc_op* ops,
@@ -3396,56 +3299,97 @@ grpc_call_error ServerPromiseBasedCall::ValidateBatch(const grpc_op* ops,
3396
3299
 
3397
3300
  void ServerPromiseBasedCall::CommitBatch(const grpc_op* ops, size_t nops,
3398
3301
  const Completion& completion) {
3302
+ Party::BulkSpawner spawner(this);
3399
3303
  for (size_t op_idx = 0; op_idx < nops; op_idx++) {
3400
3304
  const grpc_op& op = ops[op_idx];
3401
3305
  switch (op.op) {
3402
3306
  case GRPC_OP_SEND_INITIAL_METADATA: {
3403
- // compression not implemented
3404
- GPR_ASSERT(
3405
- !op.data.send_initial_metadata.maybe_compression_level.is_set);
3406
- if (!completed()) {
3407
- auto metadata = arena()->MakePooled<ServerMetadata>(arena());
3408
- CToMetadata(op.data.send_initial_metadata.metadata,
3409
- op.data.send_initial_metadata.count, metadata.get());
3410
- if (grpc_call_trace.enabled()) {
3411
- gpr_log(GPR_INFO, "%s[call] Send initial metadata",
3412
- DebugTag().c_str());
3413
- }
3414
- auto* pipe = absl::get<PipeSender<ServerMetadataHandle>*>(
3415
- send_initial_metadata_state_);
3416
- send_initial_metadata_state_ = pipe->Push(std::move(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());
3417
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
+ });
3418
3329
  } break;
3419
3330
  case GRPC_OP_SEND_MESSAGE:
3420
- StartSendMessage(op, completion, server_to_client_messages_);
3331
+ StartSendMessage(op, completion, server_to_client_messages_, spawner);
3421
3332
  break;
3422
3333
  case GRPC_OP_RECV_MESSAGE:
3423
- StartRecvMessage(op, completion, client_to_server_messages_);
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);
3424
3341
  break;
3425
- case GRPC_OP_SEND_STATUS_FROM_SERVER:
3426
- send_trailing_metadata_ = arena()->MakePooled<ServerMetadata>(arena());
3342
+ case GRPC_OP_SEND_STATUS_FROM_SERVER: {
3343
+ auto metadata = arena()->MakePooled<ServerMetadata>(arena());
3427
3344
  CToMetadata(op.data.send_status_from_server.trailing_metadata,
3428
3345
  op.data.send_status_from_server.trailing_metadata_count,
3429
- send_trailing_metadata_.get());
3430
- send_trailing_metadata_->Set(GrpcStatusMetadata(),
3431
- op.data.send_status_from_server.status);
3346
+ metadata.get());
3347
+ metadata->Set(GrpcStatusMetadata(),
3348
+ op.data.send_status_from_server.status);
3432
3349
  if (auto* details = op.data.send_status_from_server.status_details) {
3433
- send_trailing_metadata_->Set(GrpcMessageMetadata(),
3434
- Slice(CSliceRef(*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)));
3435
3356
  }
3436
- send_status_from_server_completion_ =
3437
- AddOpToCompletion(completion, PendingOp::kSendStatusFromServer);
3438
- break;
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;
3439
3380
  case GRPC_OP_RECV_CLOSE_ON_SERVER:
3440
3381
  if (grpc_call_trace.enabled()) {
3441
3382
  gpr_log(GPR_INFO, "%s[call] StartBatch: RecvClose %s",
3442
3383
  DebugTag().c_str(),
3443
3384
  recv_close_op_cancel_state_.ToString().c_str());
3444
3385
  }
3445
- if (!recv_close_op_cancel_state_.ReceiveCloseOnServerOpStarted(
3386
+ ForceCompletionSuccess(completion);
3387
+ recv_close_completion_ =
3388
+ AddOpToCompletion(completion, PendingOp::kReceiveCloseOnServer);
3389
+ if (recv_close_op_cancel_state_.ReceiveCloseOnServerOpStarted(
3446
3390
  op.data.recv_close_on_server.cancelled)) {
3447
- recv_close_completion_ =
3448
- AddOpToCompletion(completion, PendingOp::kReceiveCloseOnServer);
3391
+ FinishOpOnCompletion(&recv_close_completion_,
3392
+ PendingOp::kReceiveCloseOnServer);
3449
3393
  }
3450
3394
  break;
3451
3395
  case GRPC_OP_RECV_STATUS_ON_CLIENT:
@@ -3460,8 +3404,6 @@ grpc_call_error ServerPromiseBasedCall::StartBatch(const grpc_op* ops,
3460
3404
  size_t nops,
3461
3405
  void* notify_tag,
3462
3406
  bool is_notify_tag_closure) {
3463
- MutexLock lock(mu());
3464
- ScopedContext activity_context(this);
3465
3407
  if (nops == 0) {
3466
3408
  EndOpImmediately(cq(), notify_tag, is_notify_tag_closure);
3467
3409
  return GRPC_CALL_OK;
@@ -3473,18 +3415,30 @@ grpc_call_error ServerPromiseBasedCall::StartBatch(const grpc_op* ops,
3473
3415
  Completion completion =
3474
3416
  StartCompletion(notify_tag, is_notify_tag_closure, ops);
3475
3417
  CommitBatch(ops, nops, completion);
3476
- Update();
3477
3418
  FinishOpOnCompletion(&completion, PendingOp::kStartingBatch);
3478
3419
  return GRPC_CALL_OK;
3479
3420
  }
3480
3421
 
3481
- void ServerPromiseBasedCall::CancelWithErrorLocked(absl::Status error) {
3482
- if (!promise_.has_value()) return;
3483
- cancel_send_and_receive_ = true;
3484
- send_trailing_metadata_ = ServerMetadataFromStatus(error, arena());
3485
- ForceWakeup();
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) {});
3486
3441
  }
3487
-
3488
3442
  #endif
3489
3443
 
3490
3444
  #ifdef GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_SERVER_CALL
@@ -3493,24 +3447,22 @@ ServerCallContext::MakeTopOfServerCallPromise(
3493
3447
  CallArgs call_args, grpc_completion_queue* cq,
3494
3448
  grpc_metadata_array* publish_initial_metadata,
3495
3449
  absl::FunctionRef<void(grpc_call* call)> publish) {
3496
- call_->mu()->AssertHeld();
3497
- call_->SetCompletionQueueLocked(cq);
3450
+ call_->SetCompletionQueue(cq);
3451
+ call_args.polling_entity->Set(
3452
+ grpc_polling_entity_create_from_pollset(grpc_cq_pollset(cq)));
3498
3453
  call_->server_to_client_messages_ = call_args.server_to_client_messages;
3499
3454
  call_->client_to_server_messages_ = call_args.client_to_server_messages;
3500
- call_->send_initial_metadata_state_ = call_args.server_initial_metadata;
3501
- call_->incoming_compression_algorithm_ =
3502
- call_args.client_initial_metadata->get(GrpcEncodingMetadata())
3503
- .value_or(GRPC_COMPRESS_NONE);
3455
+ call_->server_initial_metadata_ = call_args.server_initial_metadata;
3504
3456
  call_->client_initial_metadata_ =
3505
3457
  std::move(call_args.client_initial_metadata);
3458
+ call_->set_send_deadline(call_->deadline());
3459
+ call_->ProcessIncomingInitialMetadata(*call_->client_initial_metadata_);
3506
3460
  PublishMetadataArray(call_->client_initial_metadata_.get(),
3507
3461
  publish_initial_metadata);
3508
3462
  call_->ExternalRef();
3509
3463
  publish(call_->c_ptr());
3510
- return [this]() {
3511
- call_->mu()->AssertHeld();
3512
- return call_->PollTopOfCall();
3513
- };
3464
+ return Seq(call_->server_to_client_messages_->AwaitClosed(),
3465
+ call_->send_trailing_metadata_.Wait());
3514
3466
  }
3515
3467
  #else
3516
3468
  ArenaPromise<ServerMetadataHandle>
@@ -3578,6 +3530,9 @@ grpc_call* grpc_call_from_top_element(grpc_call_element* surface_element) {
3578
3530
  grpc_call_error grpc_call_cancel(grpc_call* call, void* reserved) {
3579
3531
  GRPC_API_TRACE("grpc_call_cancel(call=%p, reserved=%p)", 2, (call, reserved));
3580
3532
  GPR_ASSERT(reserved == nullptr);
3533
+ if (call == nullptr) {
3534
+ return GRPC_CALL_ERROR;
3535
+ }
3581
3536
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
3582
3537
  grpc_core::ExecCtx exec_ctx;
3583
3538
  grpc_core::Call::FromC(call)->CancelWithError(absl::CancelledError());
@@ -3593,6 +3548,9 @@ grpc_call_error grpc_call_cancel_with_status(grpc_call* c,
3593
3548
  "c=%p, status=%d, description=%s, reserved=%p)",
3594
3549
  4, (c, (int)status, description, reserved));
3595
3550
  GPR_ASSERT(reserved == nullptr);
3551
+ if (c == nullptr) {
3552
+ return GRPC_CALL_ERROR;
3553
+ }
3596
3554
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
3597
3555
  grpc_core::ExecCtx exec_ctx;
3598
3556
  grpc_core::Call::FromC(c)->CancelWithStatus(status, description);
@@ -3613,7 +3571,9 @@ uint32_t grpc_call_test_only_get_message_flags(grpc_call* call) {
3613
3571
  }
3614
3572
 
3615
3573
  uint32_t grpc_call_test_only_get_encodings_accepted_by_peer(grpc_call* call) {
3616
- return grpc_core::Call::FromC(call)->test_only_encodings_accepted_by_peer();
3574
+ return grpc_core::Call::FromC(call)
3575
+ ->encodings_accepted_by_peer()
3576
+ .ToLegacyBitmask();
3617
3577
  }
3618
3578
 
3619
3579
  grpc_core::Arena* grpc_call_get_arena(grpc_call* call) {
@@ -3631,7 +3591,7 @@ grpc_call_error grpc_call_start_batch(grpc_call* call, const grpc_op* ops,
3631
3591
  "reserved=%p)",
3632
3592
  5, (call, ops, (unsigned long)nops, tag, reserved));
3633
3593
 
3634
- if (reserved != nullptr) {
3594
+ if (reserved != nullptr || call == nullptr) {
3635
3595
  return GRPC_CALL_ERROR;
3636
3596
  } else {
3637
3597
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
@@ -3662,7 +3622,9 @@ uint8_t grpc_call_is_client(grpc_call* call) {
3662
3622
 
3663
3623
  grpc_compression_algorithm grpc_call_compression_for_level(
3664
3624
  grpc_call* call, grpc_compression_level level) {
3665
- return grpc_core::Call::FromC(call)->compression_for_level(level);
3625
+ return grpc_core::Call::FromC(call)
3626
+ ->encodings_accepted_by_peer()
3627
+ .CompressionAlgorithmForLevel(level);
3666
3628
  }
3667
3629
 
3668
3630
  bool grpc_call_is_trailers_only(const grpc_call* call) {