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