grpc 1.46.3 → 1.53.1

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 (1803) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +419 -241
  3. data/include/grpc/byte_buffer.h +76 -1
  4. data/include/grpc/byte_buffer_reader.h +19 -1
  5. data/include/grpc/compression.h +2 -2
  6. data/include/grpc/event_engine/endpoint_config.h +11 -5
  7. data/include/grpc/event_engine/event_engine.h +129 -39
  8. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
  9. data/include/grpc/event_engine/internal/slice_cast.h +67 -0
  10. data/include/grpc/event_engine/memory_allocator.h +1 -16
  11. data/include/grpc/event_engine/port.h +1 -1
  12. data/include/grpc/event_engine/slice.h +306 -0
  13. data/include/grpc/event_engine/slice_buffer.h +159 -0
  14. data/include/grpc/fork.h +25 -1
  15. data/include/grpc/grpc.h +4 -14
  16. data/include/grpc/grpc_posix.h +1 -1
  17. data/include/grpc/grpc_security.h +11 -0
  18. data/include/grpc/impl/codegen/atm.h +3 -71
  19. data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -67
  20. data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -61
  21. data/include/grpc/impl/codegen/atm_windows.h +3 -108
  22. data/include/grpc/impl/codegen/byte_buffer.h +4 -78
  23. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
  24. data/include/grpc/impl/codegen/compression_types.h +5 -83
  25. data/include/grpc/impl/codegen/connectivity_state.h +5 -21
  26. data/include/grpc/impl/codegen/fork.h +4 -25
  27. data/include/grpc/impl/codegen/gpr_types.h +4 -35
  28. data/include/grpc/impl/codegen/grpc_types.h +5 -791
  29. data/include/grpc/impl/codegen/log.h +3 -86
  30. data/include/grpc/impl/codegen/port_platform.h +3 -699
  31. data/include/grpc/impl/codegen/propagation_bits.h +3 -28
  32. data/include/grpc/impl/codegen/slice.h +4 -107
  33. data/include/grpc/impl/codegen/status.h +4 -131
  34. data/include/grpc/impl/codegen/sync.h +3 -42
  35. data/include/grpc/impl/codegen/sync_abseil.h +3 -12
  36. data/include/grpc/impl/codegen/sync_custom.h +3 -14
  37. data/include/grpc/impl/codegen/sync_generic.h +3 -25
  38. data/include/grpc/impl/codegen/sync_posix.h +3 -28
  39. data/include/grpc/impl/codegen/sync_windows.h +3 -16
  40. data/include/grpc/impl/compression_types.h +109 -0
  41. data/include/grpc/impl/connectivity_state.h +47 -0
  42. data/include/grpc/impl/grpc_types.h +836 -0
  43. data/include/grpc/impl/propagation_bits.h +54 -0
  44. data/include/grpc/impl/slice_type.h +112 -0
  45. data/include/grpc/load_reporting.h +1 -1
  46. data/include/grpc/module.modulemap +5 -1
  47. data/include/grpc/slice.h +1 -1
  48. data/include/grpc/status.h +131 -1
  49. data/include/grpc/support/atm.h +70 -1
  50. data/include/grpc/support/atm_gcc_atomic.h +59 -1
  51. data/include/grpc/support/atm_gcc_sync.h +58 -1
  52. data/include/grpc/support/atm_windows.h +105 -1
  53. data/include/grpc/support/log.h +87 -1
  54. data/include/grpc/support/log_windows.h +1 -1
  55. data/include/grpc/support/port_platform.h +767 -1
  56. data/include/grpc/support/string_util.h +1 -1
  57. data/include/grpc/support/sync.h +35 -2
  58. data/include/grpc/support/sync_abseil.h +11 -1
  59. data/include/grpc/support/sync_custom.h +13 -1
  60. data/include/grpc/support/sync_generic.h +24 -1
  61. data/include/grpc/support/sync_posix.h +27 -1
  62. data/include/grpc/support/sync_windows.h +15 -1
  63. data/include/grpc/support/time.h +31 -6
  64. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +148 -0
  65. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
  66. data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
  67. data/src/core/ext/filters/census/grpc_context.cc +19 -17
  68. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +67 -61
  69. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +26 -6
  70. data/src/core/ext/filters/channel_idle/idle_filter_state.h +6 -4
  71. data/src/core/ext/filters/client_channel/backend_metric.cc +19 -12
  72. data/src/core/ext/filters/client_channel/backend_metric.h +21 -11
  73. data/src/core/ext/filters/client_channel/backup_poller.cc +34 -34
  74. data/src/core/ext/filters/client_channel/backup_poller.h +26 -28
  75. data/src/core/ext/filters/client_channel/channel_connectivity.cc +89 -44
  76. data/src/core/ext/filters/client_channel/client_channel.cc +401 -451
  77. data/src/core/ext/filters/client_channel/client_channel.h +68 -26
  78. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -23
  79. data/src/core/ext/filters/client_channel/client_channel_channelz.h +33 -23
  80. data/src/core/ext/filters/client_channel/client_channel_factory.cc +19 -43
  81. data/src/core/ext/filters/client_channel/client_channel_factory.h +11 -11
  82. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +22 -47
  83. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  84. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +33 -27
  85. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  86. data/src/core/ext/filters/client_channel/config_selector.h +29 -23
  87. data/src/core/ext/filters/client_channel/connector.h +19 -10
  88. data/src/core/ext/filters/client_channel/dynamic_filters.cc +40 -54
  89. data/src/core/ext/filters/client_channel/dynamic_filters.h +20 -11
  90. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  91. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +24 -21
  92. data/src/core/ext/filters/client_channel/health/health_check_client.cc +16 -4
  93. data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -3
  94. data/src/core/ext/filters/client_channel/http_proxy.cc +100 -112
  95. data/src/core/ext/filters/client_channel/http_proxy.h +38 -31
  96. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +39 -0
  97. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +8 -5
  98. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +4 -3
  99. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  100. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +37 -16
  101. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +18 -13
  102. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +71 -131
  103. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +41 -24
  104. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +410 -375
  105. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +26 -27
  106. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +15 -3
  107. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +9 -7
  108. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
  109. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +27 -22
  110. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +28 -19
  111. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +26 -25
  112. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +338 -0
  113. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  114. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
  115. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1129 -0
  116. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +94 -0
  117. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +174 -180
  118. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +366 -407
  119. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +491 -405
  120. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +19 -9
  121. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +619 -634
  122. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +261 -234
  123. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +165 -143
  124. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +128 -0
  125. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
  126. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +972 -0
  127. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +223 -220
  128. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +214 -153
  129. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  130. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +19 -15
  131. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
  132. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +178 -256
  133. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +199 -210
  134. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +382 -368
  135. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +819 -0
  136. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +67 -0
  137. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +369 -0
  138. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  139. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +22 -21
  140. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +34 -19
  141. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +531 -163
  142. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +50 -44
  143. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +31 -30
  144. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +89 -84
  145. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +300 -209
  146. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +82 -61
  147. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
  148. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +20 -19
  149. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  150. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +22 -22
  151. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +54 -22
  152. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +21 -34
  153. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +19 -5
  154. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +135 -63
  155. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +136 -68
  156. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +29 -14
  157. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +21 -27
  158. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +368 -305
  159. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +6 -4
  160. data/src/core/ext/filters/client_channel/retry_filter.cc +166 -163
  161. data/src/core/ext/filters/client_channel/retry_filter.h +4 -3
  162. data/src/core/ext/filters/client_channel/retry_service_config.cc +197 -229
  163. data/src/core/ext/filters/client_channel/retry_service_config.h +29 -26
  164. data/src/core/ext/filters/client_channel/retry_throttle.cc +28 -37
  165. data/src/core/ext/filters/client_channel/retry_throttle.h +36 -29
  166. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +34 -17
  167. data/src/core/ext/filters/client_channel/subchannel.cc +332 -384
  168. data/src/core/ext/filters/client_channel/subchannel.h +112 -82
  169. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  170. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +17 -77
  171. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +41 -47
  172. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +34 -108
  173. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +20 -12
  174. data/src/core/ext/filters/deadline/deadline_filter.cc +94 -76
  175. data/src/core/ext/filters/deadline/deadline_filter.h +14 -12
  176. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +44 -22
  177. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +20 -11
  178. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  179. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +34 -13
  180. data/src/core/ext/filters/http/client/http_client_filter.cc +76 -54
  181. data/src/core/ext/filters/http/client/http_client_filter.h +36 -23
  182. data/src/core/ext/filters/http/client_authority_filter.cc +33 -38
  183. data/src/core/ext/filters/http/client_authority_filter.h +27 -24
  184. data/src/core/ext/filters/http/http_filters_plugin.cc +46 -55
  185. data/src/core/ext/filters/http/message_compress/compression_filter.cc +307 -0
  186. data/src/core/ext/filters/http/message_compress/compression_filter.h +139 -0
  187. data/src/core/ext/filters/http/server/http_server_filter.cc +111 -271
  188. data/src/core/ext/filters/http/server/http_server_filter.h +58 -24
  189. data/src/core/ext/filters/message_size/message_size_filter.cc +117 -137
  190. data/src/core/ext/filters/message_size/message_size_filter.h +34 -17
  191. data/src/core/ext/filters/rbac/rbac_filter.cc +29 -16
  192. data/src/core/ext/filters/rbac/rbac_filter.h +11 -3
  193. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +736 -523
  194. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +18 -7
  195. data/src/core/ext/filters/server_config_selector/server_config_selector.h +20 -8
  196. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +28 -12
  197. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +4 -3
  198. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +219 -0
  199. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
  200. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
  201. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
  202. data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
  203. data/src/core/ext/transport/chttp2/alpn/alpn.h +24 -24
  204. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +185 -241
  205. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +38 -30
  206. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +204 -211
  207. data/src/core/ext/transport/chttp2/server/chttp2_server.h +26 -26
  208. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +24 -24
  209. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +35 -34
  210. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +43 -38
  211. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +35 -31
  212. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +801 -1067
  213. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +28 -23
  214. data/src/core/ext/transport/chttp2/transport/context_list.cc +23 -19
  215. data/src/core/ext/transport/chttp2/transport/context_list.h +32 -29
  216. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +251 -0
  217. data/src/core/ext/transport/chttp2/transport/decode_huff.h +971 -0
  218. data/src/core/ext/transport/chttp2/transport/flow_control.cc +350 -300
  219. data/src/core/ext/transport/chttp2/transport/flow_control.h +248 -325
  220. data/src/core/ext/transport/chttp2/transport/frame.h +22 -26
  221. data/src/core/ext/transport/chttp2/transport/frame_data.cc +85 -234
  222. data/src/core/ext/transport/chttp2/transport/frame_data.h +38 -61
  223. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +41 -36
  224. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +24 -22
  225. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +31 -25
  226. data/src/core/ext/transport/chttp2/transport/frame_ping.h +25 -22
  227. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +35 -26
  228. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +24 -21
  229. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +44 -77
  230. data/src/core/ext/transport/chttp2/transport/frame_settings.h +27 -23
  231. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +34 -33
  232. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +24 -21
  233. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +10 -4
  234. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +221 -372
  235. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +338 -158
  236. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +6 -1
  237. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +16 -5
  238. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +516 -751
  239. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +38 -27
  240. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +86 -76
  241. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +79 -49
  242. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
  243. data/src/core/ext/transport/chttp2/transport/http2_settings.h +39 -38
  244. data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
  245. data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
  246. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
  247. data/src/core/ext/transport/chttp2/transport/huffsyms.h +21 -21
  248. data/src/core/ext/transport/chttp2/transport/internal.h +248 -296
  249. data/src/core/ext/transport/chttp2/transport/parsing.cc +363 -132
  250. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +30 -30
  251. data/src/core/ext/transport/chttp2/transport/stream_map.cc +24 -24
  252. data/src/core/ext/transport/chttp2/transport/stream_map.h +34 -33
  253. data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
  254. data/src/core/ext/transport/chttp2/transport/varint.h +39 -34
  255. data/src/core/ext/transport/chttp2/transport/writing.cc +121 -94
  256. data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -18
  257. data/src/core/ext/transport/inproc/inproc_transport.cc +227 -274
  258. data/src/core/ext/transport/inproc/inproc_transport.h +23 -21
  259. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  260. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  261. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +6 -5
  262. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +33 -8
  263. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  264. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  265. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +388 -0
  266. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1953 -0
  267. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  268. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  269. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  270. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  271. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  272. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  273. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  274. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  275. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  276. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  277. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  278. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  279. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  280. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
  281. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  282. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  283. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +25 -19
  284. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +168 -34
  285. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  286. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  287. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +35 -43
  288. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +195 -116
  289. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  290. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  291. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  292. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  293. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  294. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  295. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +35 -12
  296. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +179 -14
  297. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  298. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  299. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  300. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  301. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  302. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  303. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  304. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  305. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  306. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  307. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  308. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  309. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  310. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  311. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +23 -20
  312. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +137 -69
  313. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  314. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  315. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +23 -21
  316. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +132 -44
  317. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  318. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  319. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  320. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  321. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +17 -2
  322. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +67 -2
  323. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  324. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  325. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  326. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  327. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  328. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  329. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +15 -9
  330. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +73 -18
  331. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  332. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  333. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  334. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  335. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +39 -13
  336. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +194 -15
  337. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  338. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  339. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +5 -3
  340. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +28 -2
  341. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  342. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  343. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  344. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  345. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  346. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  347. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  348. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  349. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +26 -11
  350. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +124 -14
  351. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +19 -15
  352. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +78 -69
  353. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +168 -82
  354. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +887 -166
  355. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  356. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  357. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  358. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  359. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -2
  360. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +15 -2
  361. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  362. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  363. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  364. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  365. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  366. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  367. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  368. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  369. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +47 -0
  370. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +107 -0
  371. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  372. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  373. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  374. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  375. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  376. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  377. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  378. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  379. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -6
  380. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +27 -14
  381. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  382. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  383. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  384. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  385. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  386. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  387. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  388. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  389. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +6 -3
  390. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +29 -2
  391. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
  392. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
  393. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +38 -27
  394. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +207 -52
  395. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
  396. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
  397. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +54 -0
  398. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +188 -0
  399. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +111 -0
  400. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +444 -0
  401. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +56 -0
  402. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +192 -0
  403. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  404. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  405. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  406. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  407. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  408. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  409. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +13 -11
  410. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +73 -23
  411. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  412. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  413. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  414. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  415. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +133 -16
  416. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +656 -12
  417. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  418. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  419. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  420. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  421. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  422. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  423. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  424. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  425. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +47 -0
  426. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +113 -0
  427. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  428. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  429. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  430. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  431. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  432. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  433. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  434. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  435. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  436. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  437. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  438. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  439. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +43 -0
  440. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +114 -0
  441. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  442. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  443. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  444. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  445. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  446. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  447. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  448. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  449. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  450. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  451. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  452. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  453. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  454. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  455. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  456. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  457. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  458. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  459. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  460. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +3 -1
  461. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  462. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  463. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  464. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  465. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  466. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  467. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  468. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  469. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  470. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  471. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  472. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  473. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  474. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  475. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  476. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  477. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  478. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  479. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  480. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  481. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  482. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  483. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  484. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  485. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  486. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  487. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  488. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  489. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  490. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  491. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  492. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  493. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  494. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  495. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  496. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  497. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  498. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  499. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  500. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  501. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  502. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  503. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  504. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  505. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  506. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  507. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  508. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  509. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  510. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  511. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  512. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  513. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  514. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  515. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  516. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  517. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  518. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  519. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  520. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  521. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  522. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  523. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
  524. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
  525. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  526. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  527. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  528. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  529. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  530. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  531. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  532. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  533. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  534. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  535. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  536. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  537. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +3 -2
  538. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -2
  539. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +46 -0
  540. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +113 -0
  541. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +46 -0
  542. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
  543. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
  544. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
  545. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
  546. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
  547. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
  548. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
  549. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  550. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  551. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
  552. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
  553. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  554. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  555. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  556. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  557. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +67 -0
  558. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +214 -0
  559. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +64 -0
  560. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +208 -0
  561. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -2
  562. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  563. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +54 -53
  564. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  565. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  566. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +277 -0
  567. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +125 -0
  568. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  569. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  570. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +199 -187
  571. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +232 -222
  572. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +0 -5
  573. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +95 -75
  574. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +5 -0
  575. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +187 -183
  576. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +81 -75
  577. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +190 -186
  578. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +7 -3
  579. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +5 -0
  580. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  581. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +71 -66
  582. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +164 -137
  583. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  584. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +16 -12
  585. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  586. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +140 -129
  587. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  588. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -74
  589. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +2 -2
  590. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +740 -667
  591. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +20 -0
  592. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  593. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  594. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +16 -14
  595. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +48 -0
  596. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  597. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  598. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +20 -18
  599. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  600. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +53 -42
  601. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
  602. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
  603. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +485 -467
  604. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
  605. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
  606. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  607. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +149 -145
  608. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +156 -84
  609. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  610. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  611. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
  612. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +35 -0
  613. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  614. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
  615. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +40 -0
  616. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  617. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  618. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +10 -9
  619. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  620. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
  621. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +35 -0
  622. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
  623. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +35 -0
  624. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
  625. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +40 -0
  626. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
  627. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +35 -0
  628. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
  629. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +40 -0
  630. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +9 -9
  631. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
  632. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +60 -0
  633. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
  634. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +40 -0
  635. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
  636. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +45 -0
  637. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +4 -7
  638. data/src/core/ext/xds/certificate_provider_store.cc +69 -5
  639. data/src/core/ext/xds/certificate_provider_store.h +22 -5
  640. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +17 -10
  641. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +12 -4
  642. data/src/core/ext/xds/upb_utils.h +3 -25
  643. data/src/core/ext/xds/xds_api.cc +90 -196
  644. data/src/core/ext/xds/xds_api.h +41 -39
  645. data/src/core/ext/xds/xds_bootstrap.cc +5 -537
  646. data/src/core/ext/xds/xds_bootstrap.h +41 -96
  647. data/src/core/ext/xds/xds_bootstrap_grpc.cc +362 -0
  648. data/src/core/ext/xds/xds_bootstrap_grpc.h +184 -0
  649. data/src/core/ext/xds/xds_certificate_provider.cc +35 -26
  650. data/src/core/ext/xds/xds_certificate_provider.h +29 -5
  651. data/src/core/ext/xds/xds_channel_args.h +3 -3
  652. data/src/core/ext/xds/xds_channel_stack_modifier.cc +17 -7
  653. data/src/core/ext/xds/xds_channel_stack_modifier.h +16 -4
  654. data/src/core/ext/xds/xds_client.cc +849 -1316
  655. data/src/core/ext/xds/xds_client.h +57 -61
  656. data/src/core/ext/xds/xds_client_grpc.cc +235 -0
  657. data/src/core/ext/xds/xds_client_grpc.h +79 -0
  658. data/src/core/ext/xds/xds_client_stats.cc +24 -25
  659. data/src/core/ext/xds/xds_client_stats.h +26 -24
  660. data/src/core/ext/xds/xds_cluster.cc +505 -247
  661. data/src/core/ext/xds/xds_cluster.h +69 -40
  662. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +67 -77
  663. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +47 -29
  664. data/src/core/ext/xds/xds_common_types.cc +238 -123
  665. data/src/core/ext/xds/xds_common_types.h +29 -16
  666. data/src/core/ext/xds/xds_endpoint.cc +265 -162
  667. data/src/core/ext/xds/xds_endpoint.h +19 -15
  668. data/src/core/ext/xds/xds_health_status.cc +80 -0
  669. data/src/core/ext/xds/xds_health_status.h +109 -0
  670. data/src/core/ext/xds/xds_http_fault_filter.cc +67 -58
  671. data/src/core/ext/xds/xds_http_fault_filter.h +19 -25
  672. data/src/core/ext/xds/xds_http_filters.cc +70 -71
  673. data/src/core/ext/xds/xds_http_filters.h +73 -25
  674. data/src/core/ext/xds/xds_http_rbac_filter.cc +168 -225
  675. data/src/core/ext/xds/xds_http_rbac_filter.h +22 -18
  676. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
  677. data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
  678. data/src/core/ext/xds/xds_lb_policy_registry.cc +334 -0
  679. data/src/core/ext/xds/xds_lb_policy_registry.h +71 -0
  680. data/src/core/ext/xds/xds_listener.cc +573 -481
  681. data/src/core/ext/xds/xds_listener.h +57 -51
  682. data/src/core/ext/xds/xds_resource_type.h +28 -22
  683. data/src/core/ext/xds/xds_resource_type_impl.h +18 -17
  684. data/src/core/ext/xds/xds_route_config.cc +592 -570
  685. data/src/core/ext/xds/xds_route_config.h +74 -40
  686. data/src/core/ext/xds/xds_routing.cc +21 -7
  687. data/src/core/ext/xds/xds_routing.h +17 -12
  688. data/src/core/ext/xds/xds_server_config_fetcher.cc +227 -178
  689. data/src/core/ext/xds/xds_transport.h +86 -0
  690. data/src/core/ext/xds/xds_transport_grpc.cc +356 -0
  691. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  692. data/src/core/lib/address_utils/parse_address.cc +52 -52
  693. data/src/core/lib/address_utils/parse_address.h +46 -42
  694. data/src/core/lib/address_utils/sockaddr_utils.cc +90 -54
  695. data/src/core/lib/address_utils/sockaddr_utils.h +45 -40
  696. data/src/core/lib/avl/avl.h +57 -33
  697. data/src/core/lib/backoff/backoff.cc +19 -21
  698. data/src/core/lib/backoff/backoff.h +21 -21
  699. data/src/core/lib/backoff/random_early_detection.cc +31 -0
  700. data/src/core/lib/backoff/random_early_detection.h +59 -0
  701. data/src/core/lib/channel/call_finalization.h +6 -4
  702. data/src/core/lib/channel/call_tracer.h +23 -8
  703. data/src/core/lib/channel/channel_args.cc +149 -61
  704. data/src/core/lib/channel/channel_args.h +308 -104
  705. data/src/core/lib/channel/channel_args_preconditioning.cc +4 -3
  706. data/src/core/lib/channel/channel_args_preconditioning.h +6 -5
  707. data/src/core/lib/channel/channel_fwd.h +26 -0
  708. data/src/core/lib/channel/channel_stack.cc +92 -52
  709. data/src/core/lib/channel/channel_stack.h +184 -135
  710. data/src/core/lib/channel/channel_stack_builder.cc +26 -39
  711. data/src/core/lib/channel/channel_stack_builder.h +33 -40
  712. data/src/core/lib/channel/channel_stack_builder_impl.cc +84 -60
  713. data/src/core/lib/channel/channel_stack_builder_impl.h +9 -9
  714. data/src/core/lib/channel/channel_trace.cc +29 -36
  715. data/src/core/lib/channel/channel_trace.h +27 -24
  716. data/src/core/lib/channel/channelz.cc +50 -65
  717. data/src/core/lib/channel/channelz.h +50 -33
  718. data/src/core/lib/channel/channelz_registry.cc +28 -36
  719. data/src/core/lib/channel/channelz_registry.h +31 -30
  720. data/src/core/lib/channel/connected_channel.cc +1267 -78
  721. data/src/core/lib/channel/connected_channel.h +21 -23
  722. data/src/core/lib/channel/context.h +25 -21
  723. data/src/core/lib/channel/promise_based_filter.cc +1896 -377
  724. data/src/core/lib/channel/promise_based_filter.h +592 -92
  725. data/src/core/lib/channel/status_util.cc +64 -17
  726. data/src/core/lib/channel/status_util.h +38 -24
  727. data/src/core/lib/compression/compression.cc +24 -19
  728. data/src/core/lib/compression/compression_internal.cc +88 -63
  729. data/src/core/lib/compression/compression_internal.h +28 -27
  730. data/src/core/lib/compression/message_compress.cc +28 -26
  731. data/src/core/lib/compression/message_compress.h +28 -29
  732. data/src/core/lib/config/core_configuration.cc +8 -1
  733. data/src/core/lib/config/core_configuration.h +86 -39
  734. data/src/core/lib/debug/event_log.cc +88 -0
  735. data/src/core/lib/debug/event_log.h +81 -0
  736. data/src/core/lib/debug/histogram_view.cc +69 -0
  737. data/src/core/lib/debug/histogram_view.h +37 -0
  738. data/src/core/lib/debug/stats.cc +48 -152
  739. data/src/core/lib/debug/stats.h +50 -57
  740. data/src/core/lib/debug/stats_data.cc +302 -645
  741. data/src/core/lib/debug/stats_data.h +293 -545
  742. data/src/core/lib/debug/trace.cc +18 -20
  743. data/src/core/lib/debug/trace.h +27 -48
  744. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +16 -17
  745. data/src/core/lib/event_engine/channel_args_endpoint_config.h +16 -9
  746. data/src/core/lib/event_engine/common_closures.h +71 -0
  747. data/src/core/lib/event_engine/default_event_engine.cc +99 -0
  748. data/src/core/lib/event_engine/default_event_engine.h +73 -0
  749. data/src/core/lib/event_engine/default_event_engine_factory.cc +24 -3
  750. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine_factory.h} +6 -9
  751. data/src/core/lib/event_engine/event_engine.cc +3 -30
  752. data/src/core/lib/event_engine/executor/executor.h +38 -0
  753. data/src/core/lib/event_engine/forkable.cc +106 -0
  754. data/src/core/lib/event_engine/forkable.h +61 -0
  755. data/src/core/lib/event_engine/handle_containers.h +74 -0
  756. data/src/core/lib/event_engine/memory_allocator.cc +11 -3
  757. data/src/core/lib/event_engine/poller.h +62 -0
  758. data/src/core/lib/event_engine/posix.h +158 -0
  759. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +642 -0
  760. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +139 -0
  761. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +899 -0
  762. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  763. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  764. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  765. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
  766. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  767. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  768. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +265 -0
  769. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  770. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1305 -0
  771. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +717 -0
  772. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +640 -0
  773. data/src/core/lib/event_engine/posix_engine/posix_engine.h +259 -0
  774. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  775. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +289 -0
  776. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +279 -0
  777. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +379 -0
  778. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
  779. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +853 -0
  780. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
  781. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  782. data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
  783. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  784. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  785. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +173 -0
  786. data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
  787. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
  788. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
  789. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
  790. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  791. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
  792. data/src/core/lib/{iomgr/event_engine/promise.h → event_engine/posix_engine/wakeup_fd_pipe.h} +19 -25
  793. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  794. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  795. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  796. data/src/core/lib/event_engine/resolved_address.cc +23 -2
  797. data/src/core/lib/{iomgr/event_engine → event_engine}/resolved_address_internal.h +5 -8
  798. data/src/core/lib/event_engine/shim.cc +56 -0
  799. data/src/core/lib/event_engine/shim.h +33 -0
  800. data/src/core/lib/event_engine/slice.cc +103 -0
  801. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  802. data/src/core/lib/event_engine/tcp_socket_utils.cc +389 -0
  803. data/src/core/lib/event_engine/tcp_socket_utils.h +90 -0
  804. data/src/core/lib/event_engine/thread_local.cc +29 -0
  805. data/src/core/lib/event_engine/thread_local.h +32 -0
  806. data/src/core/lib/event_engine/thread_pool.cc +253 -0
  807. data/src/core/lib/event_engine/thread_pool.h +141 -0
  808. data/src/core/lib/event_engine/time_util.cc +30 -0
  809. data/src/core/lib/event_engine/time_util.h +32 -0
  810. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.cc} +9 -17
  811. data/src/core/lib/event_engine/trace.h +43 -0
  812. data/src/core/lib/event_engine/utils.cc +44 -0
  813. data/src/core/lib/event_engine/utils.h +44 -0
  814. data/src/core/lib/event_engine/windows/iocp.cc +140 -0
  815. data/src/core/lib/event_engine/windows/iocp.h +69 -0
  816. data/src/core/lib/event_engine/windows/win_socket.cc +219 -0
  817. data/src/core/lib/event_engine/windows/win_socket.h +129 -0
  818. data/src/core/lib/event_engine/windows/windows_endpoint.cc +331 -0
  819. data/src/core/lib/event_engine/windows/windows_endpoint.h +103 -0
  820. data/src/core/lib/event_engine/windows/windows_engine.cc +388 -0
  821. data/src/core/lib/event_engine/windows/windows_engine.h +163 -0
  822. data/src/core/lib/experiments/config.cc +161 -0
  823. data/src/core/lib/experiments/config.h +53 -0
  824. data/src/core/lib/experiments/experiments.cc +81 -0
  825. data/src/core/lib/experiments/experiments.h +117 -0
  826. data/src/core/lib/gpr/alloc.cc +19 -25
  827. data/src/core/lib/gpr/alloc.h +20 -20
  828. data/src/core/lib/gpr/atm.cc +17 -17
  829. data/src/core/lib/gpr/cpu_iphone.cc +24 -24
  830. data/src/core/lib/gpr/cpu_linux.cc +28 -23
  831. data/src/core/lib/gpr/cpu_posix.cc +23 -22
  832. data/src/core/lib/gpr/cpu_windows.cc +20 -18
  833. data/src/core/lib/gpr/log.cc +30 -17
  834. data/src/core/lib/gpr/log_android.cc +22 -20
  835. data/src/core/lib/gpr/log_linux.cc +24 -24
  836. data/src/core/lib/gpr/log_posix.cc +20 -19
  837. data/src/core/lib/gpr/log_windows.cc +25 -25
  838. data/src/core/lib/gpr/spinlock.h +20 -20
  839. data/src/core/lib/gpr/string.cc +25 -24
  840. data/src/core/lib/gpr/string.h +61 -61
  841. data/src/core/lib/gpr/string_posix.cc +24 -24
  842. data/src/core/lib/gpr/string_util_windows.cc +25 -52
  843. data/src/core/lib/gpr/string_windows.cc +24 -24
  844. data/src/core/lib/gpr/sync.cc +25 -25
  845. data/src/core/lib/gpr/sync_abseil.cc +36 -40
  846. data/src/core/lib/gpr/sync_posix.cc +22 -34
  847. data/src/core/lib/gpr/sync_windows.cc +29 -27
  848. data/src/core/lib/gpr/time.cc +34 -30
  849. data/src/core/lib/gpr/time_posix.cc +41 -45
  850. data/src/core/lib/gpr/time_precise.cc +22 -22
  851. data/src/core/lib/gpr/time_precise.h +21 -22
  852. data/src/core/lib/gpr/time_windows.cc +35 -29
  853. data/src/core/lib/gpr/tmpfile.h +24 -24
  854. data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
  855. data/src/core/lib/gpr/tmpfile_posix.cc +22 -20
  856. data/src/core/lib/gpr/tmpfile_windows.cc +28 -29
  857. data/src/core/lib/gpr/useful.h +83 -30
  858. data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
  859. data/src/core/lib/gprpp/atomic_utils.h +20 -20
  860. data/src/core/lib/gprpp/bitset.h +35 -17
  861. data/src/core/lib/gprpp/chunked_vector.h +7 -3
  862. data/src/core/lib/gprpp/construct_destruct.h +4 -3
  863. data/src/core/lib/gprpp/cpp_impl_of.h +3 -3
  864. data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/crash.cc} +12 -12
  865. data/src/core/lib/gprpp/crash.h +34 -0
  866. data/src/core/lib/gprpp/debug_location.h +60 -31
  867. data/src/core/lib/gprpp/dual_ref_counted.h +4 -7
  868. data/src/core/lib/gprpp/env.h +53 -0
  869. data/src/core/lib/gprpp/env_linux.cc +80 -0
  870. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc → lib/gprpp/env_posix.cc} +25 -9
  871. data/src/core/lib/gprpp/env_windows.cc +56 -0
  872. data/src/core/lib/gprpp/examine_stack.cc +17 -17
  873. data/src/core/lib/gprpp/examine_stack.h +21 -22
  874. data/src/core/lib/gprpp/fork.cc +58 -53
  875. data/src/core/lib/gprpp/fork.h +29 -35
  876. data/src/core/lib/gprpp/global_config.h +22 -24
  877. data/src/core/lib/gprpp/global_config_custom.h +20 -20
  878. data/src/core/lib/gprpp/global_config_env.cc +28 -25
  879. data/src/core/lib/gprpp/global_config_env.h +29 -27
  880. data/src/core/lib/gprpp/global_config_generic.h +21 -25
  881. data/src/core/lib/gprpp/host_port.cc +30 -26
  882. data/src/core/lib/gprpp/host_port.h +32 -31
  883. data/src/core/lib/gprpp/load_file.cc +75 -0
  884. data/src/core/lib/gprpp/load_file.h +33 -0
  885. data/src/core/lib/gprpp/manual_constructor.h +21 -89
  886. data/src/core/lib/gprpp/match.h +5 -3
  887. data/src/core/lib/gprpp/memory.h +22 -26
  888. data/src/core/lib/gprpp/mpscq.cc +17 -17
  889. data/src/core/lib/gprpp/mpscq.h +21 -21
  890. data/src/core/lib/gprpp/no_destruct.h +95 -0
  891. data/src/core/lib/gprpp/notification.h +67 -0
  892. data/src/core/lib/gprpp/orphanable.h +22 -25
  893. data/src/core/lib/gprpp/overload.h +3 -3
  894. data/src/core/lib/gprpp/packed_table.h +40 -0
  895. data/src/core/lib/gprpp/per_cpu.h +46 -0
  896. data/src/core/lib/gprpp/ref_counted.h +22 -24
  897. data/src/core/lib/gprpp/ref_counted_ptr.h +42 -55
  898. data/src/core/lib/gprpp/single_set_ptr.h +3 -3
  899. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  900. data/src/core/lib/gprpp/stat.h +3 -5
  901. data/src/core/lib/gprpp/stat_posix.cc +10 -4
  902. data/src/core/lib/gprpp/stat_windows.cc +4 -2
  903. data/src/core/lib/gprpp/status_helper.cc +55 -35
  904. data/src/core/lib/gprpp/status_helper.h +13 -5
  905. data/src/core/lib/gprpp/strerror.cc +43 -0
  906. data/src/core/lib/gprpp/strerror.h +29 -0
  907. data/src/core/lib/gprpp/sync.h +26 -24
  908. data/src/core/lib/gprpp/table.h +22 -4
  909. data/src/core/lib/gprpp/tchar.cc +49 -0
  910. data/src/core/lib/gprpp/tchar.h +33 -0
  911. data/src/core/lib/gprpp/thd.h +25 -28
  912. data/src/core/lib/gprpp/thd_posix.cc +33 -32
  913. data/src/core/lib/gprpp/thd_windows.cc +28 -26
  914. data/src/core/lib/gprpp/time.cc +52 -9
  915. data/src/core/lib/gprpp/time.h +78 -4
  916. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  917. data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
  918. data/src/core/lib/gprpp/time_util.cc +4 -0
  919. data/src/core/lib/gprpp/time_util.h +3 -3
  920. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  921. data/src/core/lib/gprpp/validation_errors.cc +61 -0
  922. data/src/core/lib/gprpp/validation_errors.h +127 -0
  923. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  924. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -28
  925. data/src/core/lib/handshaker/proxy_mapper.h +53 -0
  926. data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
  927. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  928. data/src/core/lib/http/format_request.cc +53 -22
  929. data/src/core/lib/http/format_request.h +23 -21
  930. data/src/core/lib/http/httpcli.cc +139 -141
  931. data/src/core/lib/http/httpcli.h +86 -38
  932. data/src/core/lib/http/httpcli_security_connector.cc +50 -42
  933. data/src/core/lib/http/httpcli_ssl_credentials.h +6 -4
  934. data/src/core/lib/http/parser.cc +78 -90
  935. data/src/core/lib/http/parser.h +38 -35
  936. data/src/core/lib/iomgr/block_annotate.h +23 -23
  937. data/src/core/lib/iomgr/buffer_list.cc +156 -136
  938. data/src/core/lib/iomgr/buffer_list.h +123 -101
  939. data/src/core/lib/iomgr/call_combiner.cc +32 -64
  940. data/src/core/lib/iomgr/call_combiner.h +24 -25
  941. data/src/core/lib/iomgr/cfstream_handle.cc +33 -36
  942. data/src/core/lib/iomgr/cfstream_handle.h +25 -25
  943. data/src/core/lib/iomgr/{event_engine/pollset.h → closure.cc} +9 -7
  944. data/src/core/lib/iomgr/closure.h +95 -58
  945. data/src/core/lib/iomgr/combiner.cc +20 -39
  946. data/src/core/lib/iomgr/combiner.h +20 -20
  947. data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
  948. data/src/core/lib/iomgr/dynamic_annotations.h +22 -22
  949. data/src/core/lib/iomgr/endpoint.cc +21 -21
  950. data/src/core/lib/iomgr/endpoint.h +53 -51
  951. data/src/core/lib/iomgr/endpoint_cfstream.cc +51 -47
  952. data/src/core/lib/iomgr/endpoint_cfstream.h +32 -32
  953. data/src/core/lib/iomgr/endpoint_pair.h +22 -22
  954. data/src/core/lib/iomgr/endpoint_pair_posix.cc +36 -29
  955. data/src/core/lib/iomgr/endpoint_pair_windows.cc +31 -22
  956. data/src/core/lib/iomgr/error.cc +51 -834
  957. data/src/core/lib/iomgr/error.h +45 -317
  958. data/src/core/lib/iomgr/error_cfstream.cc +18 -23
  959. data/src/core/lib/iomgr/error_cfstream.h +21 -21
  960. data/src/core/lib/iomgr/ev_apple.cc +21 -21
  961. data/src/core/lib/iomgr/ev_apple.h +21 -21
  962. data/src/core/lib/iomgr/ev_epoll1_linux.cc +263 -248
  963. data/src/core/lib/iomgr/ev_epoll1_linux.h +21 -21
  964. data/src/core/lib/iomgr/ev_poll_posix.cc +296 -271
  965. data/src/core/lib/iomgr/ev_poll_posix.h +22 -22
  966. data/src/core/lib/iomgr/ev_posix.cc +88 -121
  967. data/src/core/lib/iomgr/ev_posix.h +93 -87
  968. data/src/core/lib/iomgr/ev_windows.cc +18 -18
  969. data/src/core/lib/iomgr/{event_engine → event_engine_shims}/closure.cc +15 -30
  970. data/src/core/lib/iomgr/{event_engine → event_engine_shims}/closure.h +10 -13
  971. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +430 -0
  972. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
  973. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
  974. data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
  975. data/src/core/lib/iomgr/exec_ctx.cc +34 -56
  976. data/src/core/lib/iomgr/exec_ctx.h +152 -177
  977. data/src/core/lib/iomgr/executor.cc +21 -31
  978. data/src/core/lib/iomgr/executor.h +27 -30
  979. data/src/core/lib/iomgr/fork_posix.cc +30 -27
  980. data/src/core/lib/iomgr/fork_windows.cc +21 -21
  981. data/src/core/lib/iomgr/gethostname.h +20 -20
  982. data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
  983. data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
  984. data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
  985. data/src/core/lib/iomgr/grpc_if_nametoindex.h +22 -22
  986. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
  987. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
  988. data/src/core/lib/iomgr/internal_errqueue.cc +41 -48
  989. data/src/core/lib/iomgr/internal_errqueue.h +84 -89
  990. data/src/core/lib/iomgr/iocp_windows.cc +23 -23
  991. data/src/core/lib/iomgr/iocp_windows.h +21 -21
  992. data/src/core/lib/iomgr/iomgr.cc +25 -20
  993. data/src/core/lib/iomgr/iomgr.h +35 -35
  994. data/src/core/lib/iomgr/iomgr_fwd.h +26 -0
  995. data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
  996. data/src/core/lib/iomgr/iomgr_internal.h +28 -28
  997. data/src/core/lib/iomgr/iomgr_posix.cc +21 -20
  998. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +21 -19
  999. data/src/core/lib/iomgr/iomgr_windows.cc +24 -22
  1000. data/src/core/lib/iomgr/load_file.cc +24 -27
  1001. data/src/core/lib/iomgr/load_file.h +22 -22
  1002. data/src/core/lib/iomgr/lockfree_event.cc +114 -131
  1003. data/src/core/lib/iomgr/lockfree_event.h +23 -23
  1004. data/src/core/lib/iomgr/nameser.h +86 -86
  1005. data/src/core/lib/iomgr/polling_entity.cc +25 -21
  1006. data/src/core/lib/iomgr/polling_entity.h +29 -29
  1007. data/src/core/lib/iomgr/pollset.cc +17 -17
  1008. data/src/core/lib/iomgr/pollset.h +55 -55
  1009. data/src/core/lib/iomgr/pollset_set.cc +17 -17
  1010. data/src/core/lib/iomgr/pollset_set.h +26 -28
  1011. data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
  1012. data/src/core/lib/iomgr/pollset_set_windows.h +20 -20
  1013. data/src/core/lib/iomgr/pollset_windows.cc +32 -31
  1014. data/src/core/lib/iomgr/pollset_windows.h +24 -24
  1015. data/src/core/lib/iomgr/port.h +59 -37
  1016. data/src/core/lib/iomgr/python_util.h +24 -24
  1017. data/src/core/lib/iomgr/resolve_address.cc +34 -20
  1018. data/src/core/lib/iomgr/resolve_address.h +73 -43
  1019. data/src/core/lib/iomgr/resolve_address_impl.h +7 -7
  1020. data/src/core/lib/iomgr/resolve_address_posix.cc +81 -62
  1021. data/src/core/lib/iomgr/resolve_address_posix.h +26 -10
  1022. data/src/core/lib/iomgr/resolve_address_windows.cc +64 -38
  1023. data/src/core/lib/iomgr/resolve_address_windows.h +26 -10
  1024. data/src/core/lib/iomgr/resolved_address.h +3 -3
  1025. data/src/core/lib/iomgr/sockaddr.h +25 -26
  1026. data/src/core/lib/iomgr/sockaddr_posix.h +23 -21
  1027. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +20 -18
  1028. data/src/core/lib/iomgr/sockaddr_windows.h +23 -21
  1029. data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
  1030. data/src/core/lib/iomgr/socket_factory_posix.h +32 -32
  1031. data/src/core/lib/iomgr/socket_mutator.cc +19 -18
  1032. data/src/core/lib/iomgr/socket_mutator.h +39 -39
  1033. data/src/core/lib/iomgr/socket_utils.h +27 -27
  1034. data/src/core/lib/iomgr/socket_utils_common_posix.cc +82 -101
  1035. data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
  1036. data/src/core/lib/iomgr/socket_utils_posix.cc +103 -19
  1037. data/src/core/lib/iomgr/socket_utils_posix.h +176 -84
  1038. data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
  1039. data/src/core/lib/iomgr/socket_windows.cc +37 -36
  1040. data/src/core/lib/iomgr/socket_windows.h +59 -61
  1041. data/src/core/lib/iomgr/systemd_utils.cc +116 -0
  1042. data/src/core/lib/iomgr/systemd_utils.h +33 -0
  1043. data/src/core/lib/iomgr/tcp_client.cc +28 -24
  1044. data/src/core/lib/iomgr/tcp_client.h +49 -38
  1045. data/src/core/lib/iomgr/tcp_client_cfstream.cc +46 -35
  1046. data/src/core/lib/iomgr/tcp_client_posix.cc +243 -105
  1047. data/src/core/lib/iomgr/tcp_client_posix.h +55 -52
  1048. data/src/core/lib/iomgr/tcp_client_windows.cc +73 -53
  1049. data/src/core/lib/iomgr/tcp_posix.cc +505 -362
  1050. data/src/core/lib/iomgr/tcp_posix.h +32 -30
  1051. data/src/core/lib/iomgr/tcp_server.cc +33 -24
  1052. data/src/core/lib/iomgr/tcp_server.h +78 -69
  1053. data/src/core/lib/iomgr/tcp_server_posix.cc +381 -133
  1054. data/src/core/lib/iomgr/tcp_server_utils_posix.h +68 -55
  1055. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +120 -82
  1056. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +46 -43
  1057. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
  1058. data/src/core/lib/iomgr/tcp_server_windows.cc +116 -118
  1059. data/src/core/lib/iomgr/tcp_windows.cc +116 -98
  1060. data/src/core/lib/iomgr/tcp_windows.h +34 -35
  1061. data/src/core/lib/iomgr/timer.cc +17 -17
  1062. data/src/core/lib/iomgr/timer.h +68 -68
  1063. data/src/core/lib/iomgr/timer_generic.cc +125 -134
  1064. data/src/core/lib/iomgr/timer_generic.h +21 -21
  1065. data/src/core/lib/iomgr/timer_heap.cc +25 -25
  1066. data/src/core/lib/iomgr/timer_heap.h +22 -22
  1067. data/src/core/lib/iomgr/timer_manager.cc +31 -31
  1068. data/src/core/lib/iomgr/timer_manager.h +27 -27
  1069. data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
  1070. data/src/core/lib/iomgr/unix_sockets_posix.h +21 -21
  1071. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
  1072. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -23
  1073. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
  1074. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
  1075. data/src/core/lib/iomgr/wakeup_fd_pipe.h +20 -20
  1076. data/src/core/lib/iomgr/wakeup_fd_posix.cc +33 -30
  1077. data/src/core/lib/iomgr/wakeup_fd_posix.h +52 -54
  1078. data/src/core/lib/json/json.h +23 -27
  1079. data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/json/json_args.h} +13 -10
  1080. data/src/core/lib/json/json_channel_args.h +42 -0
  1081. data/src/core/lib/json/json_object_loader.cc +217 -0
  1082. data/src/core/lib/json/json_object_loader.h +634 -0
  1083. data/src/core/lib/json/json_reader.cc +123 -90
  1084. data/src/core/lib/json/json_util.cc +14 -34
  1085. data/src/core/lib/json/json_util.h +17 -8
  1086. data/src/core/lib/json/json_writer.cc +62 -57
  1087. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +30 -60
  1088. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +47 -62
  1089. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  1090. data/src/core/lib/load_balancing/lb_policy_registry.cc +142 -0
  1091. data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
  1092. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +57 -52
  1093. data/src/core/lib/matchers/matchers.cc +12 -7
  1094. data/src/core/lib/matchers/matchers.h +5 -3
  1095. data/src/core/lib/promise/activity.cc +23 -8
  1096. data/src/core/lib/promise/activity.h +116 -58
  1097. data/src/core/lib/promise/arena_promise.h +115 -72
  1098. data/src/core/lib/promise/context.h +18 -11
  1099. data/src/core/lib/promise/detail/basic_join.h +197 -0
  1100. data/src/core/lib/promise/detail/basic_seq.h +28 -33
  1101. data/src/core/lib/promise/detail/promise_factory.h +61 -14
  1102. data/src/core/lib/promise/detail/promise_like.h +3 -3
  1103. data/src/core/lib/promise/detail/status.h +31 -3
  1104. data/src/core/lib/promise/detail/switch.h +21 -21
  1105. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +23 -15
  1106. data/src/core/lib/promise/if.h +195 -0
  1107. data/src/core/lib/promise/interceptor_list.h +308 -0
  1108. data/src/core/lib/promise/intra_activity_waiter.h +9 -3
  1109. data/src/core/lib/promise/latch.h +109 -22
  1110. data/src/core/lib/promise/loop.h +13 -9
  1111. data/src/core/lib/promise/map.h +4 -6
  1112. data/src/core/lib/promise/pipe.h +608 -0
  1113. data/src/core/lib/promise/poll.h +129 -11
  1114. data/src/core/lib/promise/promise.h +5 -5
  1115. data/src/core/lib/promise/race.h +6 -10
  1116. data/src/core/lib/promise/seq.h +32 -14
  1117. data/src/core/lib/promise/sleep.cc +58 -42
  1118. data/src/core/lib/promise/sleep.h +44 -26
  1119. data/src/core/lib/promise/trace.cc +20 -0
  1120. data/src/core/lib/promise/trace.h +24 -0
  1121. data/src/core/lib/promise/try_join.h +82 -0
  1122. data/src/core/lib/promise/try_seq.h +41 -23
  1123. data/src/core/lib/resolver/resolver.cc +17 -59
  1124. data/src/core/lib/resolver/resolver.h +21 -18
  1125. data/src/core/lib/resolver/resolver_factory.h +11 -10
  1126. data/src/core/lib/resolver/resolver_registry.cc +17 -9
  1127. data/src/core/lib/resolver/resolver_registry.h +15 -5
  1128. data/src/core/lib/resolver/server_address.cc +46 -34
  1129. data/src/core/lib/resolver/server_address.h +36 -35
  1130. data/src/core/lib/resource_quota/api.cc +23 -2
  1131. data/src/core/lib/resource_quota/api.h +13 -4
  1132. data/src/core/lib/resource_quota/arena.cc +85 -27
  1133. data/src/core/lib/resource_quota/arena.h +197 -25
  1134. data/src/core/lib/resource_quota/memory_quota.cc +322 -101
  1135. data/src/core/lib/resource_quota/memory_quota.h +191 -56
  1136. data/src/core/lib/resource_quota/periodic_update.cc +78 -0
  1137. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  1138. data/src/core/lib/resource_quota/resource_quota.h +12 -4
  1139. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  1140. data/src/core/lib/resource_quota/thread_quota.h +7 -3
  1141. data/src/core/lib/resource_quota/trace.h +3 -3
  1142. data/src/core/lib/security/authorization/authorization_engine.h +3 -3
  1143. data/src/core/lib/security/authorization/authorization_policy_provider.h +10 -3
  1144. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +3 -0
  1145. data/src/core/lib/security/authorization/evaluate_args.cc +17 -8
  1146. data/src/core/lib/security/authorization/evaluate_args.h +9 -6
  1147. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +5 -1
  1148. data/src/core/lib/security/authorization/grpc_authorization_engine.h +10 -3
  1149. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +19 -3
  1150. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +16 -5
  1151. data/src/core/lib/security/authorization/matchers.cc +44 -30
  1152. data/src/core/lib/security/authorization/matchers.h +10 -3
  1153. data/src/core/lib/security/authorization/rbac_policy.cc +6 -2
  1154. data/src/core/lib/security/authorization/rbac_policy.h +10 -3
  1155. data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +9 -4
  1156. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
  1157. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
  1158. data/src/core/lib/security/context/security_context.cc +27 -25
  1159. data/src/core/lib/security/context/security_context.h +56 -34
  1160. data/src/core/lib/security/credentials/alts/alts_credentials.cc +31 -24
  1161. data/src/core/lib/security/credentials/alts/alts_credentials.h +63 -59
  1162. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
  1163. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +43 -43
  1164. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
  1165. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
  1166. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
  1167. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +20 -22
  1168. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
  1169. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +38 -39
  1170. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +19 -22
  1171. data/src/core/lib/security/credentials/call_creds_util.cc +10 -0
  1172. data/src/core/lib/security/credentials/call_creds_util.h +4 -3
  1173. data/src/core/lib/security/credentials/channel_creds_registry.h +10 -4
  1174. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +13 -3
  1175. data/src/core/lib/security/credentials/composite/composite_credentials.cc +34 -34
  1176. data/src/core/lib/security/credentials/composite/composite_credentials.h +45 -33
  1177. data/src/core/lib/security/credentials/credentials.cc +23 -26
  1178. data/src/core/lib/security/credentials/credentials.h +79 -65
  1179. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +202 -74
  1180. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +21 -3
  1181. data/src/core/lib/security/credentials/external/aws_request_signer.cc +14 -3
  1182. data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
  1183. data/src/core/lib/security/credentials/external/external_account_credentials.cc +86 -68
  1184. data/src/core/lib/security/credentials/external/external_account_credentials.h +14 -3
  1185. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +29 -26
  1186. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +9 -3
  1187. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +44 -31
  1188. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +13 -3
  1189. data/src/core/lib/security/credentials/fake/fake_credentials.cc +43 -39
  1190. data/src/core/lib/security/credentials/fake/fake_credentials.h +51 -44
  1191. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +23 -25
  1192. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +146 -114
  1193. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +33 -27
  1194. data/src/core/lib/security/credentials/iam/iam_credentials.cc +31 -21
  1195. data/src/core/lib/security/credentials/iam/iam_credentials.h +33 -23
  1196. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +15 -5
  1197. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +14 -10
  1198. data/src/core/lib/security/credentials/jwt/json_token.cc +40 -29
  1199. data/src/core/lib/security/credentials/jwt/json_token.h +36 -36
  1200. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +32 -29
  1201. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +37 -23
  1202. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +113 -89
  1203. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +49 -47
  1204. data/src/core/lib/security/credentials/local/local_credentials.cc +32 -26
  1205. data/src/core/lib/security/credentials/local/local_credentials.h +34 -28
  1206. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +95 -87
  1207. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +46 -25
  1208. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +35 -31
  1209. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +48 -24
  1210. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +44 -42
  1211. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +39 -27
  1212. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +22 -30
  1213. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +16 -17
  1214. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +65 -48
  1215. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +27 -16
  1216. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +36 -4
  1217. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +37 -14
  1218. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +22 -23
  1219. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +3 -3
  1220. data/src/core/lib/security/credentials/tls/tls_credentials.cc +46 -44
  1221. data/src/core/lib/security/credentials/tls/tls_credentials.h +30 -27
  1222. data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -1
  1223. data/src/core/lib/security/credentials/tls/tls_utils.h +4 -4
  1224. data/src/core/lib/security/credentials/xds/xds_credentials.cc +33 -35
  1225. data/src/core/lib/security/credentials/xds/xds_credentials.h +24 -10
  1226. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +60 -54
  1227. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +49 -47
  1228. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +75 -79
  1229. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +25 -26
  1230. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +15 -6
  1231. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +26 -15
  1232. data/src/core/lib/security/security_connector/load_system_roots.h +20 -20
  1233. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +22 -20
  1234. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +43 -38
  1235. data/src/core/lib/security/security_connector/load_system_roots_supported.h +45 -0
  1236. data/src/core/lib/security/security_connector/local/local_security_connector.cc +64 -47
  1237. data/src/core/lib/security/security_connector/local/local_security_connector.h +49 -46
  1238. data/src/core/lib/security/security_connector/security_connector.cc +37 -35
  1239. data/src/core/lib/security/security_connector/security_connector.h +58 -45
  1240. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +55 -46
  1241. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +44 -43
  1242. data/src/core/lib/security/security_connector/ssl_utils.cc +47 -39
  1243. data/src/core/lib/security/security_connector/ssl_utils.h +45 -42
  1244. data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
  1245. data/src/core/lib/security/security_connector/ssl_utils_config.h +21 -22
  1246. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +58 -56
  1247. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +48 -28
  1248. data/src/core/lib/security/transport/auth_filters.h +53 -24
  1249. data/src/core/lib/security/transport/client_auth_filter.cc +57 -40
  1250. data/src/core/lib/security/transport/secure_endpoint.cc +130 -75
  1251. data/src/core/lib/security/transport/secure_endpoint.h +28 -27
  1252. data/src/core/lib/security/transport/security_handshaker.cc +144 -114
  1253. data/src/core/lib/security/transport/security_handshaker.h +28 -23
  1254. data/src/core/lib/security/transport/server_auth_filter.cc +157 -266
  1255. data/src/core/lib/security/transport/tsi_error.cc +23 -20
  1256. data/src/core/lib/security/transport/tsi_error.h +20 -20
  1257. data/src/core/lib/security/util/json_util.cc +24 -24
  1258. data/src/core/lib/security/util/json_util.h +21 -23
  1259. data/src/core/lib/service_config/service_config.h +19 -12
  1260. data/src/core/lib/service_config/service_config_call_data.h +15 -5
  1261. data/src/core/lib/service_config/service_config_impl.cc +111 -150
  1262. data/src/core/lib/service_config/service_config_impl.h +27 -27
  1263. data/src/core/lib/service_config/service_config_parser.cc +16 -28
  1264. data/src/core/lib/service_config/service_config_parser.h +18 -19
  1265. data/src/core/lib/slice/b64.cc +26 -26
  1266. data/src/core/lib/slice/b64.h +34 -32
  1267. data/src/core/lib/slice/percent_encoding.cc +24 -30
  1268. data/src/core/lib/slice/percent_encoding.h +28 -34
  1269. data/src/core/lib/slice/slice.cc +59 -46
  1270. data/src/core/lib/slice/slice.h +64 -20
  1271. data/src/core/lib/slice/slice_buffer.cc +136 -76
  1272. data/src/core/lib/slice/slice_buffer.h +168 -0
  1273. data/src/core/lib/slice/slice_internal.h +38 -45
  1274. data/src/core/lib/slice/slice_refcount.cc +3 -18
  1275. data/src/core/lib/slice/slice_refcount.h +53 -19
  1276. data/src/core/lib/slice/slice_string_helpers.cc +17 -33
  1277. data/src/core/lib/slice/slice_string_helpers.h +23 -30
  1278. data/src/core/lib/surface/api_trace.cc +17 -17
  1279. data/src/core/lib/surface/api_trace.h +25 -25
  1280. data/src/core/lib/surface/builtins.cc +7 -2
  1281. data/src/core/lib/surface/builtins.h +3 -3
  1282. data/src/core/lib/surface/byte_buffer.cc +26 -21
  1283. data/src/core/lib/surface/byte_buffer_reader.cc +24 -24
  1284. data/src/core/lib/surface/call.cc +2232 -483
  1285. data/src/core/lib/surface/call.h +135 -42
  1286. data/src/core/lib/surface/call_details.cc +22 -23
  1287. data/src/core/lib/surface/call_log_batch.cc +25 -18
  1288. data/src/core/lib/surface/call_test_only.h +34 -31
  1289. data/src/core/lib/surface/call_trace.cc +123 -0
  1290. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/surface/call_trace.h} +12 -10
  1291. data/src/core/lib/surface/channel.cc +217 -284
  1292. data/src/core/lib/surface/channel.h +137 -90
  1293. data/src/core/lib/surface/channel_init.cc +17 -17
  1294. data/src/core/lib/surface/channel_init.h +22 -20
  1295. data/src/core/lib/surface/channel_ping.cc +26 -20
  1296. data/src/core/lib/surface/channel_stack_type.cc +21 -19
  1297. data/src/core/lib/surface/channel_stack_type.h +22 -22
  1298. data/src/core/lib/surface/completion_queue.cc +200 -222
  1299. data/src/core/lib/surface/completion_queue.h +42 -40
  1300. data/src/core/lib/surface/completion_queue_factory.cc +34 -28
  1301. data/src/core/lib/surface/completion_queue_factory.h +21 -23
  1302. data/src/core/lib/surface/event_string.cc +19 -24
  1303. data/src/core/lib/surface/event_string.h +21 -21
  1304. data/src/core/lib/surface/init.cc +57 -114
  1305. data/src/core/lib/surface/init.h +20 -28
  1306. data/src/core/lib/surface/init_internally.cc +25 -0
  1307. data/src/core/lib/surface/init_internally.h +37 -0
  1308. data/src/core/lib/surface/lame_client.cc +87 -130
  1309. data/src/core/lib/surface/lame_client.h +62 -24
  1310. data/src/core/lib/surface/metadata_array.cc +18 -17
  1311. data/src/core/lib/surface/server.cc +406 -174
  1312. data/src/core/lib/surface/server.h +56 -24
  1313. data/src/core/lib/surface/validate_metadata.cc +64 -77
  1314. data/src/core/lib/surface/validate_metadata.h +33 -21
  1315. data/src/core/lib/surface/version.cc +21 -21
  1316. data/src/core/lib/transport/bdp_estimator.cc +19 -19
  1317. data/src/core/lib/transport/bdp_estimator.h +22 -24
  1318. data/src/core/lib/transport/connectivity_state.cc +24 -23
  1319. data/src/core/lib/transport/connectivity_state.h +24 -25
  1320. data/src/core/lib/transport/error_utils.cc +57 -79
  1321. data/src/core/lib/transport/error_utils.h +29 -25
  1322. data/src/core/lib/{channel → transport}/handshaker.cc +75 -58
  1323. data/src/core/lib/{channel → transport}/handshaker.h +59 -48
  1324. data/src/core/lib/transport/handshaker_factory.h +74 -0
  1325. data/src/core/lib/transport/handshaker_registry.cc +61 -0
  1326. data/src/core/lib/transport/handshaker_registry.h +69 -0
  1327. data/src/core/lib/transport/http2_errors.h +22 -22
  1328. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +78 -65
  1329. data/src/core/lib/transport/http_connect_handshaker.h +42 -0
  1330. data/src/core/lib/transport/metadata_batch.cc +305 -0
  1331. data/src/core/lib/transport/metadata_batch.h +405 -304
  1332. data/src/core/lib/transport/parsed_metadata.cc +2 -4
  1333. data/src/core/lib/transport/parsed_metadata.h +33 -14
  1334. data/src/core/lib/transport/pid_controller.cc +20 -20
  1335. data/src/core/lib/transport/pid_controller.h +27 -27
  1336. data/src/core/lib/transport/status_conversion.cc +23 -23
  1337. data/src/core/lib/transport/status_conversion.h +24 -24
  1338. data/src/core/lib/transport/tcp_connect_handshaker.cc +245 -0
  1339. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  1340. data/src/core/lib/transport/timeout_encoding.cc +24 -28
  1341. data/src/core/lib/transport/timeout_encoding.h +25 -21
  1342. data/src/core/lib/transport/transport.cc +97 -57
  1343. data/src/core/lib/transport/transport.h +243 -213
  1344. data/src/core/lib/transport/transport_fwd.h +20 -0
  1345. data/src/core/lib/transport/transport_impl.h +55 -45
  1346. data/src/core/lib/transport/transport_op_string.cc +40 -39
  1347. data/src/core/lib/uri/uri_parser.cc +12 -4
  1348. data/src/core/lib/uri/uri_parser.h +3 -5
  1349. data/src/core/plugin_registry/grpc_plugin_registry.cc +60 -69
  1350. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +20 -39
  1351. data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
  1352. data/src/core/tsi/alts/crypt/gsec.cc +26 -26
  1353. data/src/core/tsi/alts/crypt/gsec.h +336 -336
  1354. data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
  1355. data/src/core/tsi/alts/frame_protector/alts_counter.h +68 -68
  1356. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
  1357. data/src/core/tsi/alts/frame_protector/alts_crypter.h +209 -209
  1358. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
  1359. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +40 -40
  1360. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
  1361. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +82 -83
  1362. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
  1363. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
  1364. data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
  1365. data/src/core/tsi/alts/frame_protector/frame_handler.h +169 -169
  1366. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +117 -97
  1367. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +104 -104
  1368. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
  1369. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
  1370. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +51 -43
  1371. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +60 -60
  1372. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +24 -24
  1373. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
  1374. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +38 -38
  1375. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
  1376. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +105 -104
  1377. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
  1378. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +40 -41
  1379. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
  1380. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +35 -36
  1381. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +67 -68
  1382. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
  1383. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +55 -56
  1384. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
  1385. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +141 -142
  1386. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +67 -58
  1387. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +43 -44
  1388. data/src/core/tsi/fake_transport_security.cc +146 -110
  1389. data/src/core/tsi/fake_transport_security.h +36 -30
  1390. data/src/core/tsi/local_transport_security.cc +43 -38
  1391. data/src/core/tsi/local_transport_security.h +33 -33
  1392. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -4
  1393. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
  1394. data/src/core/tsi/ssl/session_cache/ssl_session.h +23 -21
  1395. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +21 -19
  1396. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
  1397. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +31 -22
  1398. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +27 -20
  1399. data/src/core/tsi/ssl_transport_security.cc +299 -370
  1400. data/src/core/tsi/ssl_transport_security.h +206 -203
  1401. data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
  1402. data/src/core/tsi/ssl_transport_security_utils.h +147 -0
  1403. data/src/core/tsi/ssl_types.h +27 -27
  1404. data/src/core/tsi/transport_security.cc +44 -32
  1405. data/src/core/tsi/transport_security.h +49 -48
  1406. data/src/core/tsi/transport_security_grpc.cc +23 -22
  1407. data/src/core/tsi/transport_security_grpc.h +44 -41
  1408. data/src/core/tsi/transport_security_interface.h +344 -332
  1409. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.clang +2 -0
  1410. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.gcc +7 -0
  1411. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
  1412. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
  1413. data/src/ruby/ext/grpc/ext-export.gcc +1 -1
  1414. data/src/ruby/ext/grpc/extconf.rb +98 -20
  1415. data/src/ruby/ext/grpc/rb_call.c +1 -0
  1416. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  1417. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  1418. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  1419. data/src/ruby/ext/grpc/rb_grpc.c +1 -0
  1420. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
  1421. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +60 -60
  1422. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  1423. data/src/ruby/lib/grpc/errors.rb +1 -1
  1424. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  1425. data/src/ruby/lib/grpc/version.rb +1 -1
  1426. data/src/ruby/pb/generate_proto_ruby.sh +0 -6
  1427. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  1428. data/src/ruby/spec/channel_spec.rb +5 -43
  1429. data/src/ruby/spec/client_server_spec.rb +20 -8
  1430. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  1431. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  1432. data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
  1433. data/src/ruby/spec/user_agent_spec.rb +1 -1
  1434. data/third_party/abseil-cpp/absl/algorithm/container.h +57 -58
  1435. data/third_party/abseil-cpp/absl/base/attributes.h +88 -41
  1436. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  1437. data/third_party/abseil-cpp/absl/base/config.h +221 -39
  1438. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  1439. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +52 -2
  1440. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
  1441. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -4
  1442. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  1443. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  1444. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
  1445. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  1446. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
  1447. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
  1448. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  1449. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +39 -28
  1450. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +36 -36
  1451. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +6 -3
  1452. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +10 -6
  1453. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  1454. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
  1455. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  1456. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  1457. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -11
  1458. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
  1459. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  1460. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
  1461. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  1462. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -40
  1463. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
  1464. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  1465. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  1466. data/third_party/abseil-cpp/absl/base/macros.h +4 -21
  1467. data/third_party/abseil-cpp/absl/base/optimization.h +76 -16
  1468. data/third_party/abseil-cpp/absl/base/options.h +1 -7
  1469. data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
  1470. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  1471. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  1472. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  1473. data/third_party/abseil-cpp/absl/container/fixed_array.h +9 -5
  1474. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  1475. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  1476. data/third_party/abseil-cpp/absl/container/inlined_vector.h +84 -25
  1477. data/third_party/abseil-cpp/absl/container/internal/common.h +9 -8
  1478. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
  1479. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +23 -29
  1480. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
  1481. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +116 -23
  1482. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +40 -54
  1483. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +165 -66
  1484. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +159 -4
  1485. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1121 -470
  1486. data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
  1487. data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
  1488. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
  1489. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
  1490. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
  1491. data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
  1492. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
  1493. data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
  1494. data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
  1495. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
  1496. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
  1497. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
  1498. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
  1499. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
  1500. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
  1501. data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
  1502. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
  1503. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
  1504. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
  1505. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  1506. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
  1507. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
  1508. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -13
  1509. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  1510. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +19 -12
  1511. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  1512. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  1513. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
  1514. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  1515. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +59 -102
  1516. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
  1517. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +41 -11
  1518. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +18 -4
  1519. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  1520. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
  1521. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +164 -101
  1522. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
  1523. data/third_party/abseil-cpp/absl/functional/any_invocable.h +316 -0
  1524. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  1525. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  1526. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +878 -0
  1527. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  1528. data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
  1529. data/third_party/abseil-cpp/absl/hash/internal/hash.h +235 -26
  1530. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
  1531. data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
  1532. data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
  1533. data/third_party/abseil-cpp/absl/numeric/bits.h +1 -1
  1534. data/third_party/abseil-cpp/absl/numeric/int128.cc +14 -10
  1535. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  1536. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +33 -10
  1537. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  1538. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  1539. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  1540. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +4 -2
  1541. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  1542. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  1543. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +3 -24
  1544. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
  1545. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  1546. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  1547. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  1548. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  1549. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
  1550. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  1551. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  1552. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  1553. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  1554. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  1555. data/third_party/abseil-cpp/absl/random/random.h +6 -6
  1556. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  1557. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  1558. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  1559. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  1560. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  1561. data/third_party/abseil-cpp/absl/status/status.cc +193 -14
  1562. data/third_party/abseil-cpp/absl/status/status.h +24 -14
  1563. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  1564. data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
  1565. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  1566. data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
  1567. data/third_party/abseil-cpp/absl/strings/cord.cc +257 -924
  1568. data/third_party/abseil-cpp/absl/strings/cord.h +268 -156
  1569. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  1570. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  1571. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  1572. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +575 -0
  1573. data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
  1574. data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
  1575. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
  1576. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
  1577. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  1578. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  1579. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  1580. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +441 -150
  1581. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +157 -53
  1582. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +70 -73
  1583. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +8 -6
  1584. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  1585. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  1586. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  1587. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  1588. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +56 -0
  1589. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +103 -0
  1590. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  1591. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  1592. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
  1593. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
  1594. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +19 -43
  1595. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
  1596. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +5 -4
  1597. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  1598. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
  1599. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
  1600. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +18 -15
  1601. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
  1602. data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
  1603. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
  1604. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
  1605. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
  1606. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
  1607. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +127 -30
  1608. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
  1609. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +42 -10
  1610. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +56 -289
  1611. data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
  1612. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  1613. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +9 -4
  1614. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
  1615. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  1616. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
  1617. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -103
  1618. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  1619. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
  1620. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  1621. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
  1622. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
  1623. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  1624. data/third_party/abseil-cpp/absl/strings/numbers.cc +42 -39
  1625. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  1626. data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
  1627. data/third_party/abseil-cpp/absl/strings/str_cat.h +70 -16
  1628. data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
  1629. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  1630. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  1631. data/third_party/abseil-cpp/absl/strings/string_view.cc +8 -19
  1632. data/third_party/abseil-cpp/absl/strings/string_view.h +6 -12
  1633. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  1634. data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
  1635. data/third_party/abseil-cpp/absl/strings/substitute.h +55 -21
  1636. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  1637. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  1638. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
  1639. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
  1640. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
  1641. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  1642. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  1643. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  1644. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  1645. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +172 -88
  1646. data/third_party/abseil-cpp/absl/synchronization/mutex.h +102 -55
  1647. data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
  1648. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -3
  1649. data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
  1650. data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
  1651. data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
  1652. data/third_party/abseil-cpp/absl/time/duration.cc +12 -11
  1653. data/third_party/abseil-cpp/absl/time/format.cc +2 -1
  1654. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  1655. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
  1656. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
  1657. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
  1658. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
  1659. data/third_party/abseil-cpp/absl/time/time.cc +2 -2
  1660. data/third_party/abseil-cpp/absl/time/time.h +268 -169
  1661. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  1662. data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
  1663. data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
  1664. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  1665. data/third_party/abseil-cpp/absl/types/span.h +31 -8
  1666. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +1 -1
  1667. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +1 -2
  1668. data/third_party/re2/re2/bitstate.cc +3 -3
  1669. data/third_party/re2/re2/dfa.cc +13 -13
  1670. data/third_party/re2/re2/nfa.cc +4 -4
  1671. data/third_party/re2/re2/onepass.cc +2 -2
  1672. data/third_party/re2/re2/prefilter_tree.cc +27 -59
  1673. data/third_party/re2/re2/prefilter_tree.h +3 -2
  1674. data/third_party/re2/re2/prog.cc +11 -2
  1675. data/third_party/re2/re2/prog.h +17 -5
  1676. data/third_party/re2/re2/re2.cc +6 -11
  1677. data/third_party/re2/re2/re2.h +1 -1
  1678. data/third_party/re2/re2/regexp.cc +1 -2
  1679. data/third_party/re2/re2/stringpiece.h +10 -7
  1680. data/third_party/re2/re2/unicode_casefold.cc +25 -11
  1681. data/third_party/re2/re2/unicode_groups.cc +319 -151
  1682. data/third_party/re2/re2/walker-inl.h +3 -2
  1683. data/third_party/re2/util/mutex.h +4 -4
  1684. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  1685. data/third_party/upb/upb/arena.c +277 -0
  1686. data/third_party/upb/upb/arena.h +225 -0
  1687. data/third_party/upb/upb/array.c +114 -0
  1688. data/third_party/upb/upb/array.h +83 -0
  1689. data/third_party/upb/upb/collections.h +36 -0
  1690. data/third_party/upb/upb/decode.c +161 -65
  1691. data/third_party/upb/upb/decode.h +1 -0
  1692. data/third_party/upb/upb/decode_fast.c +1 -1
  1693. data/third_party/upb/upb/def.c +10 -2
  1694. data/third_party/upb/upb/def.h +8 -1
  1695. data/third_party/upb/upb/def.hpp +7 -4
  1696. data/third_party/upb/upb/encode.c +29 -20
  1697. data/third_party/upb/upb/encode.h +16 -6
  1698. data/third_party/upb/upb/extension_registry.c +93 -0
  1699. data/third_party/upb/upb/extension_registry.h +84 -0
  1700. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  1701. data/third_party/upb/upb/internal/table.h +385 -0
  1702. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  1703. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  1704. data/third_party/upb/upb/json_decode.c +1512 -0
  1705. data/third_party/upb/upb/json_decode.h +47 -0
  1706. data/third_party/upb/upb/json_encode.c +7 -3
  1707. data/third_party/upb/upb/json_encode.h +6 -3
  1708. data/third_party/upb/upb/map.c +108 -0
  1709. data/third_party/upb/upb/map.h +117 -0
  1710. data/third_party/upb/upb/message_value.h +66 -0
  1711. data/third_party/upb/upb/mini_table.c +1147 -0
  1712. data/third_party/upb/upb/mini_table.h +189 -0
  1713. data/third_party/upb/upb/mini_table.hpp +112 -0
  1714. data/third_party/upb/upb/msg.c +2 -62
  1715. data/third_party/upb/upb/msg.h +2 -45
  1716. data/third_party/upb/upb/msg_internal.h +28 -22
  1717. data/third_party/upb/upb/port_def.inc +2 -1
  1718. data/third_party/upb/upb/port_undef.inc +1 -0
  1719. data/third_party/upb/upb/reflection.c +2 -159
  1720. data/third_party/upb/upb/reflection.h +2 -112
  1721. data/third_party/upb/upb/status.c +86 -0
  1722. data/third_party/upb/upb/status.h +66 -0
  1723. data/third_party/upb/upb/table.c +2 -2
  1724. data/third_party/upb/upb/table_internal.h +3 -352
  1725. data/third_party/upb/upb/text_encode.c +3 -2
  1726. data/third_party/upb/upb/upb.c +4 -290
  1727. data/third_party/upb/upb/upb.h +7 -196
  1728. data/third_party/zlib/compress.c +3 -3
  1729. data/third_party/zlib/crc32.c +21 -12
  1730. data/third_party/zlib/deflate.c +112 -106
  1731. data/third_party/zlib/deflate.h +2 -2
  1732. data/third_party/zlib/gzlib.c +1 -1
  1733. data/third_party/zlib/gzread.c +3 -5
  1734. data/third_party/zlib/gzwrite.c +1 -1
  1735. data/third_party/zlib/infback.c +10 -7
  1736. data/third_party/zlib/inflate.c +5 -2
  1737. data/third_party/zlib/inftrees.c +2 -2
  1738. data/third_party/zlib/inftrees.h +1 -1
  1739. data/third_party/zlib/trees.c +61 -62
  1740. data/third_party/zlib/uncompr.c +2 -2
  1741. data/third_party/zlib/zconf.h +16 -3
  1742. data/third_party/zlib/zlib.h +10 -10
  1743. data/third_party/zlib/zutil.c +9 -7
  1744. data/third_party/zlib/zutil.h +1 -0
  1745. metadata +372 -102
  1746. data/include/grpc/impl/codegen/gpr_slice.h +0 -71
  1747. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -42
  1748. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -48
  1749. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -185
  1750. data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -65
  1751. data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
  1752. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -89
  1753. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -50
  1754. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -186
  1755. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -179
  1756. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -456
  1757. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -53
  1758. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -386
  1759. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -61
  1760. data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
  1761. data/src/core/ext/xds/certificate_provider_registry.h +0 -57
  1762. data/src/core/lib/channel/handshaker_factory.h +0 -50
  1763. data/src/core/lib/channel/handshaker_registry.cc +0 -50
  1764. data/src/core/lib/channel/handshaker_registry.h +0 -71
  1765. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  1766. data/src/core/lib/event_engine/sockaddr.h +0 -44
  1767. data/src/core/lib/gpr/env.h +0 -40
  1768. data/src/core/lib/gpr/env_linux.cc +0 -75
  1769. data/src/core/lib/gpr/env_posix.cc +0 -46
  1770. data/src/core/lib/gpr/env_windows.cc +0 -74
  1771. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  1772. data/src/core/lib/gpr/murmur_hash.h +0 -29
  1773. data/src/core/lib/gpr/string_windows.h +0 -32
  1774. data/src/core/lib/gpr/tls.h +0 -158
  1775. data/src/core/lib/gprpp/capture.h +0 -76
  1776. data/src/core/lib/iomgr/error_internal.h +0 -66
  1777. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  1778. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  1779. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  1780. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  1781. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  1782. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  1783. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  1784. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  1785. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
  1786. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  1787. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  1788. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  1789. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  1790. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  1791. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  1792. data/src/core/lib/profiling/basic_timers.cc +0 -295
  1793. data/src/core/lib/profiling/stap_timers.cc +0 -50
  1794. data/src/core/lib/profiling/timers.h +0 -94
  1795. data/src/core/lib/promise/call_push_pull.h +0 -144
  1796. data/src/core/lib/security/security_connector/load_system_roots_linux.h +0 -46
  1797. data/src/core/lib/slice/slice_api.cc +0 -39
  1798. data/src/core/lib/slice/slice_refcount_base.h +0 -61
  1799. data/src/core/lib/slice/slice_split.cc +0 -100
  1800. data/src/core/lib/slice/slice_split.h +0 -40
  1801. data/src/core/lib/transport/byte_stream.cc +0 -164
  1802. data/src/core/lib/transport/byte_stream.h +0 -166
  1803. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -20,63 +20,93 @@
20
20
 
21
21
  #include <inttypes.h>
22
22
  #include <limits.h>
23
- #include <math.h>
24
23
  #include <stdio.h>
25
24
  #include <string.h>
26
25
 
26
+ #include <algorithm>
27
+ #include <initializer_list>
28
+ #include <memory>
29
+ #include <new>
30
+ #include <string>
31
+ #include <utility>
32
+
33
+ #include "absl/base/attributes.h"
34
+ #include "absl/status/status.h"
35
+ #include "absl/strings/cord.h"
36
+ #include "absl/strings/str_cat.h"
27
37
  #include "absl/strings/str_format.h"
38
+ #include "absl/strings/string_view.h"
39
+ #include "absl/types/optional.h"
28
40
 
41
+ #include <grpc/event_engine/event_engine.h>
42
+ #include <grpc/grpc.h>
43
+ #include <grpc/impl/connectivity_state.h>
29
44
  #include <grpc/slice_buffer.h>
30
45
  #include <grpc/status.h>
31
46
  #include <grpc/support/alloc.h>
47
+ #include <grpc/support/atm.h>
32
48
  #include <grpc/support/log.h>
33
- #include <grpc/support/string_util.h>
49
+ #include <grpc/support/time.h>
34
50
 
35
51
  #include "src/core/ext/transport/chttp2/transport/context_list.h"
52
+ #include "src/core/ext/transport/chttp2/transport/flow_control.h"
53
+ #include "src/core/ext/transport/chttp2/transport/frame.h"
36
54
  #include "src/core/ext/transport/chttp2/transport/frame_data.h"
55
+ #include "src/core/ext/transport/chttp2/transport/frame_goaway.h"
56
+ #include "src/core/ext/transport/chttp2/transport/frame_rst_stream.h"
57
+ #include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
58
+ #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
59
+ #include "src/core/ext/transport/chttp2/transport/http_trace.h"
37
60
  #include "src/core/ext/transport/chttp2/transport/internal.h"
61
+ #include "src/core/ext/transport/chttp2/transport/stream_map.h"
38
62
  #include "src/core/ext/transport/chttp2/transport/varint.h"
39
63
  #include "src/core/lib/channel/channel_args.h"
40
64
  #include "src/core/lib/debug/stats.h"
41
- #include "src/core/lib/gpr/env.h"
42
- #include "src/core/lib/gpr/string.h"
43
- #include "src/core/lib/gprpp/memory.h"
65
+ #include "src/core/lib/debug/stats_data.h"
66
+ #include "src/core/lib/gpr/useful.h"
67
+ #include "src/core/lib/gprpp/bitset.h"
68
+ #include "src/core/lib/gprpp/crash.h"
69
+ #include "src/core/lib/gprpp/debug_location.h"
70
+ #include "src/core/lib/gprpp/ref_counted.h"
71
+ #include "src/core/lib/gprpp/status_helper.h"
72
+ #include "src/core/lib/gprpp/time.h"
44
73
  #include "src/core/lib/http/parser.h"
45
- #include "src/core/lib/iomgr/executor.h"
46
- #include "src/core/lib/iomgr/iomgr.h"
74
+ #include "src/core/lib/iomgr/combiner.h"
75
+ #include "src/core/lib/iomgr/error.h"
76
+ #include "src/core/lib/iomgr/exec_ctx.h"
77
+ #include "src/core/lib/iomgr/iomgr_fwd.h"
47
78
  #include "src/core/lib/iomgr/timer.h"
48
- #include "src/core/lib/profiling/timers.h"
49
- #include "src/core/lib/resource_quota/api.h"
79
+ #include "src/core/lib/promise/poll.h"
80
+ #include "src/core/lib/resource_quota/arena.h"
81
+ #include "src/core/lib/resource_quota/memory_quota.h"
82
+ #include "src/core/lib/resource_quota/resource_quota.h"
50
83
  #include "src/core/lib/resource_quota/trace.h"
84
+ #include "src/core/lib/slice/slice.h"
85
+ #include "src/core/lib/slice/slice_buffer.h"
51
86
  #include "src/core/lib/slice/slice_internal.h"
52
- #include "src/core/lib/slice/slice_string_helpers.h"
87
+ #include "src/core/lib/transport/bdp_estimator.h"
88
+ #include "src/core/lib/transport/connectivity_state.h"
53
89
  #include "src/core/lib/transport/error_utils.h"
54
90
  #include "src/core/lib/transport/http2_errors.h"
91
+ #include "src/core/lib/transport/metadata_batch.h"
55
92
  #include "src/core/lib/transport/status_conversion.h"
56
- #include "src/core/lib/transport/timeout_encoding.h"
57
93
  #include "src/core/lib/transport/transport.h"
58
94
  #include "src/core/lib/transport/transport_impl.h"
59
- #include "src/core/lib/uri/uri_parser.h"
60
-
61
- GPR_GLOBAL_CONFIG_DEFINE_BOOL(
62
- grpc_experimental_disable_flow_control, false,
63
- "If set, flow control will be effectively disabled. Max out all values and "
64
- "assume the remote peer does the same. Thus we can ignore any flow control "
65
- "bookkeeping, error checking, and decision making");
66
95
 
67
96
  #define DEFAULT_CONNECTION_WINDOW_TARGET (1024 * 1024)
68
97
  #define MAX_WINDOW 0x7fffffffu
69
98
  #define MAX_WRITE_BUFFER_SIZE (64 * 1024 * 1024)
70
- #define DEFAULT_MAX_HEADER_LIST_SIZE (8 * 1024)
99
+ #define DEFAULT_MAX_HEADER_LIST_SIZE (16 * 1024)
100
+ #define DEFAULT_MAX_HEADER_LIST_SIZE_SOFT_LIMIT (8 * 1024)
71
101
 
72
102
  #define DEFAULT_CLIENT_KEEPALIVE_TIME_MS INT_MAX
73
- #define DEFAULT_CLIENT_KEEPALIVE_TIMEOUT_MS 20000 /* 20 seconds */
74
- #define DEFAULT_SERVER_KEEPALIVE_TIME_MS 7200000 /* 2 hours */
75
- #define DEFAULT_SERVER_KEEPALIVE_TIMEOUT_MS 20000 /* 20 seconds */
103
+ #define DEFAULT_CLIENT_KEEPALIVE_TIMEOUT_MS 20000 // 20 seconds
104
+ #define DEFAULT_SERVER_KEEPALIVE_TIME_MS 7200000 // 2 hours
105
+ #define DEFAULT_SERVER_KEEPALIVE_TIMEOUT_MS 20000 // 20 seconds
76
106
  #define DEFAULT_KEEPALIVE_PERMIT_WITHOUT_CALLS false
77
107
  #define KEEPALIVE_TIME_BACKOFF_MULTIPLIER 2
78
108
 
79
- #define DEFAULT_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS 300000 /* 5 minutes */
109
+ #define DEFAULT_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS 300000 // 5 minutes
80
110
  #define DEFAULT_MAX_PINGS_BETWEEN_DATA 2
81
111
  #define DEFAULT_MAX_PING_STRIKES 2
82
112
 
@@ -101,7 +131,6 @@ static int g_default_max_pings_without_data = DEFAULT_MAX_PINGS_BETWEEN_DATA;
101
131
  static int g_default_max_ping_strikes = DEFAULT_MAX_PING_STRIKES;
102
132
 
103
133
  #define MAX_CLIENT_STREAM_ID 0x7fffffffu
104
- grpc_core::TraceFlag grpc_http_trace(false, "http");
105
134
  grpc_core::TraceFlag grpc_keepalive_trace(false, "http_keepalive");
106
135
  grpc_core::DebugOnlyTraceFlag grpc_trace_chttp2_refcount(false,
107
136
  "chttp2_refcount");
@@ -116,8 +145,6 @@ static void read_action(void* t, grpc_error_handle error);
116
145
  static void read_action_locked(void* t, grpc_error_handle error);
117
146
  static void continue_read_action_locked(grpc_chttp2_transport* t);
118
147
 
119
- static void complete_fetch(void* gs, grpc_error_handle error);
120
- static void complete_fetch_locked(void* gs, grpc_error_handle error);
121
148
  // Set a transport level setting, and push it to our peer
122
149
  static void queue_setting_update(grpc_chttp2_transport* t,
123
150
  grpc_chttp2_setting_id id, uint32_t value);
@@ -148,26 +175,28 @@ static void start_bdp_ping(void* tp, grpc_error_handle error);
148
175
  static void finish_bdp_ping(void* tp, grpc_error_handle error);
149
176
  static void start_bdp_ping_locked(void* tp, grpc_error_handle error);
150
177
  static void finish_bdp_ping_locked(void* tp, grpc_error_handle error);
151
- static void next_bdp_ping_timer_expired(void* tp, grpc_error_handle error);
152
- static void next_bdp_ping_timer_expired_locked(void* tp,
153
- grpc_error_handle error);
178
+ static void next_bdp_ping_timer_expired(grpc_chttp2_transport* t);
179
+ static void next_bdp_ping_timer_expired_locked(
180
+ void* tp, GRPC_UNUSED grpc_error_handle error);
154
181
 
155
182
  static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error);
156
183
  static void send_ping_locked(grpc_chttp2_transport* t,
157
184
  grpc_closure* on_initiate, grpc_closure* on_ack);
158
- static void retry_initiate_ping_locked(void* tp, grpc_error_handle error);
185
+ static void retry_initiate_ping_locked(void* tp,
186
+ GRPC_UNUSED grpc_error_handle error);
159
187
 
160
188
  // keepalive-relevant functions
161
- static void init_keepalive_ping(void* arg, grpc_error_handle error);
162
- static void init_keepalive_ping_locked(void* arg, grpc_error_handle error);
189
+ static void init_keepalive_ping(grpc_chttp2_transport* t);
190
+ static void init_keepalive_ping_locked(void* arg,
191
+ GRPC_UNUSED grpc_error_handle error);
163
192
  static void start_keepalive_ping(void* arg, grpc_error_handle error);
164
193
  static void finish_keepalive_ping(void* arg, grpc_error_handle error);
165
194
  static void start_keepalive_ping_locked(void* arg, grpc_error_handle error);
166
195
  static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error);
167
- static void keepalive_watchdog_fired(void* arg, grpc_error_handle error);
168
- static void keepalive_watchdog_fired_locked(void* arg, grpc_error_handle error);
169
-
170
- static void reset_byte_stream(void* arg, grpc_error_handle error);
196
+ static void keepalive_watchdog_fired(grpc_chttp2_transport* t);
197
+ static void keepalive_watchdog_fired_locked(
198
+ void* arg, GRPC_UNUSED grpc_error_handle error);
199
+ static void maybe_reset_keepalive_ping_timer_locked(grpc_chttp2_transport* t);
171
200
 
172
201
  namespace grpc_core {
173
202
 
@@ -202,25 +231,25 @@ void TestOnlyGlobalHttp2TransportDisableTransientFailureStateNotification(
202
231
  grpc_chttp2_transport::~grpc_chttp2_transport() {
203
232
  size_t i;
204
233
 
234
+ event_engine.reset();
235
+
205
236
  if (channelz_socket != nullptr) {
206
237
  channelz_socket.reset();
207
238
  }
208
239
 
209
240
  grpc_endpoint_destroy(ep);
210
241
 
211
- grpc_slice_buffer_destroy_internal(&qbuf);
242
+ grpc_slice_buffer_destroy(&qbuf);
212
243
 
213
- grpc_slice_buffer_destroy_internal(&outbuf);
244
+ grpc_slice_buffer_destroy(&outbuf);
214
245
 
215
- grpc_error_handle error =
216
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Transport destroyed");
246
+ grpc_error_handle error = GRPC_ERROR_CREATE("Transport destroyed");
217
247
  // ContextList::Execute follows semantics of a callback function and does not
218
248
  // take a ref on error
219
249
  grpc_core::ContextList::Execute(cl, nullptr, error);
220
- GRPC_ERROR_UNREF(error);
221
250
  cl = nullptr;
222
251
 
223
- grpc_slice_buffer_destroy_internal(&read_buffer);
252
+ grpc_slice_buffer_destroy(&read_buffer);
224
253
  grpc_chttp2_goaway_parser_destroy(&goaway_parser);
225
254
 
226
255
  for (i = 0; i < STREAM_LIST_COUNT; i++) {
@@ -228,16 +257,13 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
228
257
  GPR_ASSERT(lists[i].tail == nullptr);
229
258
  }
230
259
 
231
- GRPC_ERROR_UNREF(goaway_error);
232
-
233
260
  GPR_ASSERT(grpc_chttp2_stream_map_size(&stream_map) == 0);
234
261
 
235
262
  grpc_chttp2_stream_map_destroy(&stream_map);
236
263
 
237
264
  GRPC_COMBINER_UNREF(combiner, "chttp2_transport");
238
265
 
239
- cancel_pings(this,
240
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Transport destroyed"));
266
+ cancel_pings(this, GRPC_ERROR_CREATE("Transport destroyed"));
241
267
 
242
268
  while (write_cb_pool) {
243
269
  grpc_chttp2_write_cb* next = write_cb_pool->next;
@@ -245,9 +271,6 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
245
271
  write_cb_pool = next;
246
272
  }
247
273
 
248
- flow_control.Destroy();
249
-
250
- GRPC_ERROR_UNREF(closed_with_error);
251
274
  gpr_free(ping_acks);
252
275
  if (grpc_core::test_only_destruct_callback != nullptr) {
253
276
  grpc_core::test_only_destruct_callback();
@@ -256,155 +279,175 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
256
279
 
257
280
  static const grpc_transport_vtable* get_vtable(void);
258
281
 
259
- // Returns whether bdp is enabled
260
- static bool read_channel_args(grpc_chttp2_transport* t,
261
- const grpc_channel_args* channel_args,
282
+ static void read_channel_args(grpc_chttp2_transport* t,
283
+ const grpc_core::ChannelArgs& channel_args,
262
284
  bool is_client) {
263
- bool enable_bdp = true;
264
- bool channelz_enabled = GRPC_ENABLE_CHANNELZ_DEFAULT;
265
- size_t i;
266
- int j;
267
-
268
- for (i = 0; i < channel_args->num_args; i++) {
269
- if (0 == strcmp(channel_args->args[i].key,
270
- GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER)) {
271
- const grpc_integer_options options = {-1, 0, INT_MAX};
272
- const int value =
273
- grpc_channel_arg_get_integer(&channel_args->args[i], options);
274
- if (value >= 0) {
275
- if ((t->next_stream_id & 1) != (value & 1)) {
276
- gpr_log(GPR_ERROR, "%s: low bit must be %d on %s",
277
- GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER, t->next_stream_id & 1,
278
- is_client ? "client" : "server");
279
- } else {
280
- t->next_stream_id = static_cast<uint32_t>(value);
281
- }
282
- }
283
- } else if (0 == strcmp(channel_args->args[i].key,
284
- GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER)) {
285
- const grpc_integer_options options = {-1, 0, INT_MAX};
286
- const int value =
287
- grpc_channel_arg_get_integer(&channel_args->args[i], options);
288
- if (value >= 0) {
289
- t->hpack_compressor.SetMaxUsableSize(value);
290
- }
291
- } else if (0 == strcmp(channel_args->args[i].key,
292
- GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)) {
293
- t->ping_policy.max_pings_without_data = grpc_channel_arg_get_integer(
294
- &channel_args->args[i],
295
- {g_default_max_pings_without_data, 0, INT_MAX});
296
- } else if (0 == strcmp(channel_args->args[i].key,
297
- GRPC_ARG_HTTP2_MAX_PING_STRIKES)) {
298
- t->ping_policy.max_ping_strikes = grpc_channel_arg_get_integer(
299
- &channel_args->args[i], {g_default_max_ping_strikes, 0, INT_MAX});
300
- } else if (0 ==
301
- strcmp(channel_args->args[i].key,
302
- GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)) {
303
- t->ping_policy.min_recv_ping_interval_without_data =
304
- grpc_core::Duration::Milliseconds(grpc_channel_arg_get_integer(
305
- &channel_args->args[i],
306
- grpc_integer_options{
307
- g_default_min_recv_ping_interval_without_data_ms, 0,
308
- INT_MAX}));
309
- } else if (0 == strcmp(channel_args->args[i].key,
310
- GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE)) {
311
- t->write_buffer_size = static_cast<uint32_t>(grpc_channel_arg_get_integer(
312
- &channel_args->args[i], {0, 0, MAX_WRITE_BUFFER_SIZE}));
313
- } else if (0 ==
314
- strcmp(channel_args->args[i].key, GRPC_ARG_HTTP2_BDP_PROBE)) {
315
- enable_bdp = grpc_channel_arg_get_bool(&channel_args->args[i], true);
316
- } else if (0 ==
317
- strcmp(channel_args->args[i].key, GRPC_ARG_KEEPALIVE_TIME_MS)) {
318
- const int value = grpc_channel_arg_get_integer(
319
- &channel_args->args[i],
320
- grpc_integer_options{t->is_client
321
- ? g_default_client_keepalive_time_ms
322
- : g_default_server_keepalive_time_ms,
323
- 1, INT_MAX});
324
- t->keepalive_time = value == INT_MAX
325
- ? grpc_core::Duration::Infinity()
326
- : grpc_core::Duration::Milliseconds(value);
327
- } else if (0 == strcmp(channel_args->args[i].key,
328
- GRPC_ARG_KEEPALIVE_TIMEOUT_MS)) {
329
- const int value = grpc_channel_arg_get_integer(
330
- &channel_args->args[i],
331
- grpc_integer_options{t->is_client
332
- ? g_default_client_keepalive_timeout_ms
333
- : g_default_server_keepalive_timeout_ms,
334
- 0, INT_MAX});
335
- t->keepalive_timeout = value == INT_MAX
336
- ? grpc_core::Duration::Infinity()
337
- : grpc_core::Duration::Milliseconds(value);
338
- } else if (0 == strcmp(channel_args->args[i].key,
339
- GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)) {
340
- t->keepalive_permit_without_calls = static_cast<uint32_t>(
341
- grpc_channel_arg_get_integer(&channel_args->args[i], {0, 0, 1}));
342
- } else if (0 == strcmp(channel_args->args[i].key,
343
- GRPC_ARG_OPTIMIZATION_TARGET)) {
344
- gpr_log(GPR_INFO, "GRPC_ARG_OPTIMIZATION_TARGET is deprecated");
345
- } else if (0 ==
346
- strcmp(channel_args->args[i].key, GRPC_ARG_ENABLE_CHANNELZ)) {
347
- channelz_enabled = grpc_channel_arg_get_bool(
348
- &channel_args->args[i], GRPC_ENABLE_CHANNELZ_DEFAULT);
285
+ const int initial_sequence_number =
286
+ channel_args.GetInt(GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER).value_or(-1);
287
+ if (initial_sequence_number > 0) {
288
+ if ((t->next_stream_id & 1) != (initial_sequence_number & 1)) {
289
+ gpr_log(GPR_ERROR, "%s: low bit must be %d on %s",
290
+ GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER, t->next_stream_id & 1,
291
+ is_client ? "client" : "server");
349
292
  } else {
350
- static const struct {
351
- const char* channel_arg_name;
352
- grpc_chttp2_setting_id setting_id;
353
- grpc_integer_options integer_options;
354
- bool availability[2] /* server, client */;
355
- } settings_map[] = {{GRPC_ARG_MAX_CONCURRENT_STREAMS,
356
- GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS,
357
- {-1, 0, INT32_MAX},
358
- {true, false}},
359
- {GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER,
360
- GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE,
361
- {-1, 0, INT32_MAX},
362
- {true, true}},
363
- {GRPC_ARG_MAX_METADATA_SIZE,
364
- GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE,
365
- {-1, 0, INT32_MAX},
366
- {true, true}},
367
- {GRPC_ARG_HTTP2_MAX_FRAME_SIZE,
368
- GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
369
- {-1, 16384, 16777215},
370
- {true, true}},
371
- {GRPC_ARG_HTTP2_ENABLE_TRUE_BINARY,
372
- GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA,
373
- {1, 0, 1},
374
- {true, true}},
375
- {GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES,
376
- GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE,
377
- {-1, 5, INT32_MAX},
378
- {true, true}}};
379
- for (j = 0; j < static_cast<int> GPR_ARRAY_SIZE(settings_map); j++) {
380
- if (0 == strcmp(channel_args->args[i].key,
381
- settings_map[j].channel_arg_name)) {
382
- if (!settings_map[j].availability[is_client]) {
383
- gpr_log(GPR_DEBUG, "%s is not available on %s",
384
- settings_map[j].channel_arg_name,
385
- is_client ? "clients" : "servers");
386
- } else {
387
- int value = grpc_channel_arg_get_integer(
388
- &channel_args->args[i], settings_map[j].integer_options);
389
- if (value >= 0) {
390
- queue_setting_update(t, settings_map[j].setting_id,
391
- static_cast<uint32_t>(value));
392
- }
393
- }
394
- break;
395
- }
396
- }
293
+ t->next_stream_id = static_cast<uint32_t>(initial_sequence_number);
397
294
  }
398
295
  }
399
- if (channelz_enabled) {
296
+
297
+ const int max_hpack_table_size =
298
+ channel_args.GetInt(GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER).value_or(-1);
299
+ if (max_hpack_table_size >= 0) {
300
+ t->hpack_compressor.SetMaxUsableSize(max_hpack_table_size);
301
+ }
302
+
303
+ t->ping_policy.max_pings_without_data =
304
+ std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)
305
+ .value_or(g_default_max_pings_without_data));
306
+ t->ping_policy.max_ping_strikes =
307
+ std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_MAX_PING_STRIKES)
308
+ .value_or(g_default_max_ping_strikes));
309
+ t->ping_policy.min_recv_ping_interval_without_data =
310
+ std::max(grpc_core::Duration::Zero(),
311
+ channel_args
312
+ .GetDurationFromIntMillis(
313
+ GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)
314
+ .value_or(grpc_core::Duration::Milliseconds(
315
+ g_default_min_recv_ping_interval_without_data_ms)));
316
+ t->write_buffer_size =
317
+ std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE)
318
+ .value_or(grpc_core::chttp2::kDefaultWindow));
319
+ t->keepalive_time =
320
+ std::max(grpc_core::Duration::Milliseconds(1),
321
+ channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIME_MS)
322
+ .value_or(grpc_core::Duration::Milliseconds(
323
+ t->is_client ? g_default_client_keepalive_time_ms
324
+ : g_default_server_keepalive_time_ms)));
325
+ t->keepalive_timeout = std::max(
326
+ grpc_core::Duration::Zero(),
327
+ channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIMEOUT_MS)
328
+ .value_or(grpc_core::Duration::Milliseconds(
329
+ t->is_client ? g_default_client_keepalive_timeout_ms
330
+ : g_default_server_keepalive_timeout_ms)));
331
+ t->keepalive_permit_without_calls =
332
+ channel_args.GetBool(GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)
333
+ .value_or(false);
334
+ // Only send the prefered rx frame size http2 setting if we are instructed
335
+ // to auto size the buffers allocated at tcp level and we also can adjust
336
+ // sending frame size.
337
+ t->enable_preferred_rx_crypto_frame_advertisement =
338
+ channel_args
339
+ .GetBool(GRPC_ARG_EXPERIMENTAL_HTTP2_PREFERRED_CRYPTO_FRAME_SIZE)
340
+ .value_or(false);
341
+
342
+ if (channel_args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
343
+ .value_or(GRPC_ENABLE_CHANNELZ_DEFAULT)) {
400
344
  t->channelz_socket =
401
345
  grpc_core::MakeRefCounted<grpc_core::channelz::SocketNode>(
402
346
  std::string(grpc_endpoint_get_local_address(t->ep)), t->peer_string,
403
347
  absl::StrFormat("%s %s", get_vtable()->name, t->peer_string),
404
- grpc_core::channelz::SocketNode::Security::GetFromChannelArgs(
405
- channel_args));
348
+ channel_args
349
+ .GetObjectRef<grpc_core::channelz::SocketNode::Security>());
350
+ }
351
+
352
+ const int soft_limit =
353
+ channel_args.GetInt(GRPC_ARG_MAX_METADATA_SIZE).value_or(-1);
354
+ if (soft_limit < 0) {
355
+ // Set soft limit to 0.8 * hard limit if this is larger than
356
+ // `DEFAULT_MAX_HEADER_LIST_SIZE_SOFT_LIMIT` and
357
+ // `GRPC_ARG_MAX_METADATA_SIZE` is not set.
358
+ t->max_header_list_size_soft_limit = std::max(
359
+ DEFAULT_MAX_HEADER_LIST_SIZE_SOFT_LIMIT,
360
+ static_cast<int>(
361
+ 0.8 * channel_args.GetInt(GRPC_ARG_ABSOLUTE_MAX_METADATA_SIZE)
362
+ .value_or(-1)));
363
+ } else {
364
+ t->max_header_list_size_soft_limit = soft_limit;
365
+ }
366
+
367
+ static const struct {
368
+ absl::string_view channel_arg_name;
369
+ grpc_chttp2_setting_id setting_id;
370
+ int default_value;
371
+ int min;
372
+ int max;
373
+ bool availability[2] /* server, client */;
374
+ } settings_map[] = {{GRPC_ARG_MAX_CONCURRENT_STREAMS,
375
+ GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS,
376
+ -1,
377
+ 0,
378
+ INT32_MAX,
379
+ {true, false}},
380
+ {GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER,
381
+ GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE,
382
+ -1,
383
+ 0,
384
+ INT32_MAX,
385
+ {true, true}},
386
+ {GRPC_ARG_ABSOLUTE_MAX_METADATA_SIZE,
387
+ GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE,
388
+ -1,
389
+ 0,
390
+ INT32_MAX,
391
+ {true, true}},
392
+ {GRPC_ARG_HTTP2_MAX_FRAME_SIZE,
393
+ GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
394
+ -1,
395
+ 16384,
396
+ 16777215,
397
+ {true, true}},
398
+ {GRPC_ARG_HTTP2_ENABLE_TRUE_BINARY,
399
+ GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA,
400
+ 1,
401
+ 0,
402
+ 1,
403
+ {true, true}},
404
+ {GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES,
405
+ GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE,
406
+ -1,
407
+ 5,
408
+ INT32_MAX,
409
+ {true, true}}};
410
+
411
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(settings_map); i++) {
412
+ const auto& setting = settings_map[i];
413
+ if (setting.availability[is_client]) {
414
+ const int value = channel_args.GetInt(setting.channel_arg_name)
415
+ .value_or(setting.default_value);
416
+ if (value >= 0) {
417
+ queue_setting_update(t, setting.setting_id,
418
+ grpc_core::Clamp(value, setting.min, setting.max));
419
+ } else if (setting.setting_id ==
420
+ GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE) {
421
+ // Set value to 1.25 * soft limit if this is larger than
422
+ // `DEFAULT_MAX_HEADER_LIST_SIZE` and
423
+ // `GRPC_ARG_ABSOLUTE_MAX_METADATA_SIZE` is not set.
424
+ const int soft_limit = channel_args.GetInt(GRPC_ARG_MAX_METADATA_SIZE)
425
+ .value_or(setting.default_value);
426
+ const int value = (soft_limit < (INT_MAX / 1.25))
427
+ ? static_cast<int>(soft_limit * 1.25)
428
+ : soft_limit;
429
+ if (value > DEFAULT_MAX_HEADER_LIST_SIZE) {
430
+ queue_setting_update(
431
+ t, setting.setting_id,
432
+ grpc_core::Clamp(value, setting.min, setting.max));
433
+ }
434
+ }
435
+ } else if (channel_args.Contains(setting.channel_arg_name)) {
436
+ gpr_log(GPR_DEBUG, "%s is not available on %s",
437
+ std::string(setting.channel_arg_name).c_str(),
438
+ is_client ? "clients" : "servers");
439
+ }
440
+ }
441
+
442
+ if (t->enable_preferred_rx_crypto_frame_advertisement) {
443
+ const grpc_chttp2_setting_parameters* sp =
444
+ &grpc_chttp2_settings_parameters
445
+ [GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE];
446
+ queue_setting_update(
447
+ t, GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE,
448
+ grpc_core::Clamp(INT_MAX, static_cast<int>(sp->min_value),
449
+ static_cast<int>(sp->max_value)));
406
450
  }
407
- return enable_bdp;
408
451
  }
409
452
 
410
453
  static void init_transport_keepalive_settings(grpc_chttp2_transport* t) {
@@ -441,30 +484,35 @@ static void configure_transport_ping_policy(grpc_chttp2_transport* t) {
441
484
  g_default_min_recv_ping_interval_without_data_ms);
442
485
  }
443
486
 
444
- static void init_keepalive_pings_if_enabled(grpc_chttp2_transport* t) {
487
+ static void init_keepalive_pings_if_enabled_locked(
488
+ void* arg, GRPC_UNUSED grpc_error_handle error) {
489
+ GPR_DEBUG_ASSERT(error.ok());
490
+ grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
445
491
  if (t->keepalive_time != grpc_core::Duration::Infinity()) {
446
492
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_WAITING;
447
493
  GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
448
- GRPC_CLOSURE_INIT(&t->init_keepalive_ping_locked, init_keepalive_ping, t,
449
- grpc_schedule_on_exec_ctx);
450
- grpc_timer_init(&t->keepalive_ping_timer,
451
- grpc_core::ExecCtx::Get()->Now() + t->keepalive_time,
452
- &t->init_keepalive_ping_locked);
494
+ t->keepalive_ping_timer_handle =
495
+ t->event_engine->RunAfter(t->keepalive_time, [t] {
496
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
497
+ grpc_core::ExecCtx exec_ctx;
498
+ init_keepalive_ping(t);
499
+ });
453
500
  } else {
454
501
  // Use GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED to indicate there are no
455
- // inflight keeaplive timers
502
+ // inflight keepalive timers
456
503
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED;
457
504
  }
458
505
  }
459
506
 
460
507
  grpc_chttp2_transport::grpc_chttp2_transport(
461
- const grpc_channel_args* channel_args, grpc_endpoint* ep, bool is_client)
508
+ const grpc_core::ChannelArgs& channel_args, grpc_endpoint* ep,
509
+ bool is_client)
462
510
  : refs(1, GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_refcount)
463
511
  ? "chttp2_refcount"
464
512
  : nullptr),
465
513
  ep(ep),
466
514
  peer_string(grpc_endpoint_get_peer(ep)),
467
- memory_owner(grpc_core::ResourceQuotaFromChannelArgs(channel_args)
515
+ memory_owner(channel_args.GetObject<grpc_core::ResourceQuota>()
468
516
  ->memory_quota()
469
517
  ->CreateMemoryOwner(absl::StrCat(
470
518
  grpc_endpoint_get_peer(ep), ":client_transport"))),
@@ -475,7 +523,14 @@ grpc_chttp2_transport::grpc_chttp2_transport(
475
523
  GRPC_CHANNEL_READY),
476
524
  is_client(is_client),
477
525
  next_stream_id(is_client ? 1 : 2),
478
- deframe_state(is_client ? GRPC_DTS_FH_0 : GRPC_DTS_CLIENT_PREFIX_0) {
526
+ flow_control(
527
+ peer_string.c_str(),
528
+ channel_args.GetBool(GRPC_ARG_HTTP2_BDP_PROBE).value_or(true),
529
+ &memory_owner),
530
+ deframe_state(is_client ? GRPC_DTS_FH_0 : GRPC_DTS_CLIENT_PREFIX_0),
531
+ event_engine(
532
+ channel_args
533
+ .GetObjectRef<grpc_event_engine::experimental::EventEngine>()) {
479
534
  GPR_ASSERT(strlen(GRPC_CHTTP2_CLIENT_CONNECT_STRING) ==
480
535
  GRPC_CHTTP2_CLIENT_CONNECT_STRLEN);
481
536
  base.vtable = get_vtable();
@@ -516,34 +571,24 @@ grpc_chttp2_transport::grpc_chttp2_transport(
516
571
  configure_transport_ping_policy(this);
517
572
  init_transport_keepalive_settings(this);
518
573
 
519
- bool enable_bdp = true;
520
- if (channel_args) {
521
- enable_bdp = read_channel_args(this, channel_args, is_client);
522
- }
523
-
524
- static const bool kEnableFlowControl =
525
- !GPR_GLOBAL_CONFIG_GET(grpc_experimental_disable_flow_control);
526
- if (kEnableFlowControl) {
527
- flow_control.Init<grpc_core::chttp2::TransportFlowControl>(this,
528
- enable_bdp);
529
- } else {
530
- flow_control.Init<grpc_core::chttp2::TransportFlowControlDisabled>(this);
531
- enable_bdp = false;
532
- }
574
+ read_channel_args(this, channel_args, is_client);
533
575
 
534
576
  // No pings allowed before receiving a header or data frame.
535
577
  ping_state.pings_before_data_required = 0;
536
- ping_state.is_delayed_ping_timer_set = false;
537
578
  ping_state.last_ping_sent_time = grpc_core::Timestamp::InfPast();
538
579
 
539
580
  ping_recv_state.last_ping_recv_time = grpc_core::Timestamp::InfPast();
540
581
  ping_recv_state.ping_strikes = 0;
541
582
 
542
- init_keepalive_pings_if_enabled(this);
583
+ grpc_core::ExecCtx exec_ctx;
584
+ combiner->Run(
585
+ GRPC_CLOSURE_INIT(&init_keepalive_ping_locked,
586
+ init_keepalive_pings_if_enabled_locked, this, nullptr),
587
+ absl::OkStatus());
543
588
 
544
- if (enable_bdp) {
589
+ if (flow_control.bdp_probe()) {
545
590
  bdp_ping_blocked = true;
546
- grpc_chttp2_act_on_flowctl_action(flow_control->PeriodicUpdate(), this,
591
+ grpc_chttp2_act_on_flowctl_action(flow_control.PeriodicUpdate(), this,
547
592
  nullptr);
548
593
  }
549
594
 
@@ -558,9 +603,9 @@ static void destroy_transport_locked(void* tp, grpc_error_handle /*error*/) {
558
603
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
559
604
  t->destroying = 1;
560
605
  close_transport_locked(
561
- t, grpc_error_set_int(
562
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Transport destroyed"),
563
- GRPC_ERROR_INT_OCCURRED_DURING_WRITE, t->write_state));
606
+ t, grpc_error_set_int(GRPC_ERROR_CREATE("Transport destroyed"),
607
+ grpc_core::StatusIntProperty::kOccurredDuringWrite,
608
+ t->write_state));
564
609
  t->memory_owner.Reset();
565
610
  // Must be the last line.
566
611
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "destroy");
@@ -569,45 +614,66 @@ static void destroy_transport_locked(void* tp, grpc_error_handle /*error*/) {
569
614
  static void destroy_transport(grpc_transport* gt) {
570
615
  grpc_chttp2_transport* t = reinterpret_cast<grpc_chttp2_transport*>(gt);
571
616
  t->combiner->Run(GRPC_CLOSURE_CREATE(destroy_transport_locked, t, nullptr),
572
- GRPC_ERROR_NONE);
617
+ absl::OkStatus());
573
618
  }
574
619
 
575
620
  static void close_transport_locked(grpc_chttp2_transport* t,
576
621
  grpc_error_handle error) {
577
- end_all_the_calls(t, GRPC_ERROR_REF(error));
578
- cancel_pings(t, GRPC_ERROR_REF(error));
579
- if (t->closed_with_error == GRPC_ERROR_NONE) {
622
+ end_all_the_calls(t, error);
623
+ cancel_pings(t, error);
624
+ if (t->closed_with_error.ok()) {
580
625
  if (!grpc_error_has_clear_grpc_status(error)) {
581
- error = grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS,
582
- GRPC_STATUS_UNAVAILABLE);
626
+ error =
627
+ grpc_error_set_int(error, grpc_core::StatusIntProperty::kRpcStatus,
628
+ GRPC_STATUS_UNAVAILABLE);
583
629
  }
584
630
  if (t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE) {
585
- if (t->close_transport_on_writes_finished == GRPC_ERROR_NONE) {
631
+ if (t->close_transport_on_writes_finished.ok()) {
586
632
  t->close_transport_on_writes_finished =
587
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(
588
- "Delayed close due to in-progress write");
633
+ GRPC_ERROR_CREATE("Delayed close due to in-progress write");
589
634
  }
590
635
  t->close_transport_on_writes_finished =
591
636
  grpc_error_add_child(t->close_transport_on_writes_finished, error);
592
637
  return;
593
638
  }
594
- GPR_ASSERT(error != GRPC_ERROR_NONE);
595
- t->closed_with_error = GRPC_ERROR_REF(error);
639
+ GPR_ASSERT(!error.ok());
640
+ t->closed_with_error = error;
596
641
  connectivity_state_set(t, GRPC_CHANNEL_SHUTDOWN, absl::Status(),
597
642
  "close_transport");
598
- if (t->ping_state.is_delayed_ping_timer_set) {
599
- grpc_timer_cancel(&t->ping_state.delayed_ping_timer);
643
+ if (t->ping_state.delayed_ping_timer_handle.has_value()) {
644
+ if (t->event_engine->Cancel(*t->ping_state.delayed_ping_timer_handle)) {
645
+ GRPC_CHTTP2_UNREF_TRANSPORT(t, "retry_initiate_ping_locked");
646
+ t->ping_state.delayed_ping_timer_handle.reset();
647
+ }
600
648
  }
601
- if (t->have_next_bdp_ping_timer) {
602
- grpc_timer_cancel(&t->next_bdp_ping_timer);
649
+ if (t->next_bdp_ping_timer_handle.has_value()) {
650
+ if (t->event_engine->Cancel(*t->next_bdp_ping_timer_handle)) {
651
+ GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
652
+ t->next_bdp_ping_timer_handle.reset();
653
+ }
603
654
  }
604
655
  switch (t->keepalive_state) {
605
656
  case GRPC_CHTTP2_KEEPALIVE_STATE_WAITING:
606
- grpc_timer_cancel(&t->keepalive_ping_timer);
657
+ if (t->keepalive_ping_timer_handle.has_value()) {
658
+ if (t->event_engine->Cancel(*t->keepalive_ping_timer_handle)) {
659
+ GRPC_CHTTP2_UNREF_TRANSPORT(t, "init keepalive ping");
660
+ t->keepalive_ping_timer_handle.reset();
661
+ }
662
+ }
607
663
  break;
608
664
  case GRPC_CHTTP2_KEEPALIVE_STATE_PINGING:
609
- grpc_timer_cancel(&t->keepalive_ping_timer);
610
- grpc_timer_cancel(&t->keepalive_watchdog_timer);
665
+ if (t->keepalive_ping_timer_handle.has_value()) {
666
+ if (t->event_engine->Cancel(*t->keepalive_ping_timer_handle)) {
667
+ GRPC_CHTTP2_UNREF_TRANSPORT(t, "init keepalive ping");
668
+ t->keepalive_ping_timer_handle.reset();
669
+ }
670
+ }
671
+ if (t->keepalive_watchdog_timer_handle.has_value()) {
672
+ if (t->event_engine->Cancel(*t->keepalive_watchdog_timer_handle)) {
673
+ GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive watchdog");
674
+ t->keepalive_watchdog_timer_handle.reset();
675
+ }
676
+ }
611
677
  break;
612
678
  case GRPC_CHTTP2_KEEPALIVE_STATE_DYING:
613
679
  case GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED:
@@ -621,19 +687,17 @@ static void close_transport_locked(grpc_chttp2_transport* t,
621
687
  GRPC_CHTTP2_STREAM_UNREF(s, "chttp2_writing:close");
622
688
  }
623
689
  GPR_ASSERT(t->write_state == GRPC_CHTTP2_WRITE_STATE_IDLE);
624
- grpc_endpoint_shutdown(t->ep, GRPC_ERROR_REF(error));
690
+ grpc_endpoint_shutdown(t->ep, error);
625
691
  }
626
692
  if (t->notify_on_receive_settings != nullptr) {
627
693
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, t->notify_on_receive_settings,
628
- GRPC_ERROR_REF(error));
694
+ error);
629
695
  t->notify_on_receive_settings = nullptr;
630
696
  }
631
697
  if (t->notify_on_close != nullptr) {
632
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, t->notify_on_close,
633
- GRPC_ERROR_REF(error));
698
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, t->notify_on_close, error);
634
699
  t->notify_on_close = nullptr;
635
700
  }
636
- GRPC_ERROR_UNREF(error);
637
701
  }
638
702
 
639
703
  #ifndef NDEBUG
@@ -668,29 +732,27 @@ grpc_chttp2_stream::grpc_chttp2_stream(grpc_chttp2_transport* t,
668
732
  refcount(refcount),
669
733
  reffer(this),
670
734
  initial_metadata_buffer(arena),
671
- trailing_metadata_buffer(arena) {
735
+ trailing_metadata_buffer(arena),
736
+ flow_control(&t->flow_control) {
672
737
  if (server_data) {
673
738
  id = static_cast<uint32_t>(reinterpret_cast<uintptr_t>(server_data));
739
+ if (grpc_http_trace.enabled()) {
740
+ gpr_log(GPR_DEBUG, "HTTP:%p/%p creating accept stream %d [from %p]", t,
741
+ this, id, server_data);
742
+ }
674
743
  *t->accepting_stream = this;
675
744
  grpc_chttp2_stream_map_add(&t->stream_map, id, this);
676
745
  post_destructive_reclaimer(t);
677
746
  }
678
- if (t->flow_control->flow_control_enabled()) {
679
- flow_control.Init<grpc_core::chttp2::StreamFlowControl>(
680
- static_cast<grpc_core::chttp2::TransportFlowControl*>(
681
- t->flow_control.get()),
682
- this);
683
- } else {
684
- flow_control.Init<grpc_core::chttp2::StreamFlowControlDisabled>();
685
- }
686
747
 
687
748
  grpc_slice_buffer_init(&frame_storage);
688
- grpc_slice_buffer_init(&unprocessed_incoming_frames_buffer);
689
749
  grpc_slice_buffer_init(&flow_controlled_buffer);
690
- GRPC_CLOSURE_INIT(&reset_byte_stream, ::reset_byte_stream, this, nullptr);
691
750
  }
692
751
 
693
752
  grpc_chttp2_stream::~grpc_chttp2_stream() {
753
+ grpc_chttp2_list_remove_stalled_by_stream(t, this);
754
+ grpc_chttp2_list_remove_stalled_by_transport(t, this);
755
+
694
756
  if (t->channelz_socket != nullptr) {
695
757
  if ((t->is_client && eos_received) || (!t->is_client && eos_sent)) {
696
758
  t->channelz_socket->RecordStreamSucceeded();
@@ -704,57 +766,48 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
704
766
  GPR_ASSERT(grpc_chttp2_stream_map_find(&t->stream_map, id) == nullptr);
705
767
  }
706
768
 
707
- grpc_slice_buffer_destroy_internal(&unprocessed_incoming_frames_buffer);
708
- grpc_slice_buffer_destroy_internal(&frame_storage);
769
+ grpc_slice_buffer_destroy(&frame_storage);
709
770
 
710
771
  for (int i = 0; i < STREAM_LIST_COUNT; i++) {
711
- if (GPR_UNLIKELY(included[i])) {
712
- gpr_log(GPR_ERROR, "%s stream %d still included in list %d",
713
- t->is_client ? "client" : "server", id, i);
714
- abort();
772
+ if (GPR_UNLIKELY(included.is_set(i))) {
773
+ grpc_core::Crash(absl::StrFormat("%s stream %d still included in list %d",
774
+ t->is_client ? "client" : "server", id,
775
+ i));
715
776
  }
716
777
  }
717
778
 
718
779
  GPR_ASSERT(send_initial_metadata_finished == nullptr);
719
- GPR_ASSERT(fetching_send_message == nullptr);
720
780
  GPR_ASSERT(send_trailing_metadata_finished == nullptr);
721
781
  GPR_ASSERT(recv_initial_metadata_ready == nullptr);
722
782
  GPR_ASSERT(recv_message_ready == nullptr);
723
783
  GPR_ASSERT(recv_trailing_metadata_finished == nullptr);
724
- grpc_slice_buffer_destroy_internal(&flow_controlled_buffer);
725
- GRPC_ERROR_UNREF(read_closed_error);
726
- GRPC_ERROR_UNREF(write_closed_error);
727
- GRPC_ERROR_UNREF(byte_stream_error);
728
- flow_control.Destroy();
784
+ grpc_slice_buffer_destroy(&flow_controlled_buffer);
729
785
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "stream");
730
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, destroy_stream_arg, GRPC_ERROR_NONE);
786
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, destroy_stream_arg, absl::OkStatus());
731
787
  }
732
788
 
733
789
  static int init_stream(grpc_transport* gt, grpc_stream* gs,
734
790
  grpc_stream_refcount* refcount, const void* server_data,
735
791
  grpc_core::Arena* arena) {
736
- GPR_TIMER_SCOPE("init_stream", 0);
737
792
  grpc_chttp2_transport* t = reinterpret_cast<grpc_chttp2_transport*>(gt);
738
793
  new (gs) grpc_chttp2_stream(t, refcount, server_data, arena);
739
794
  return 0;
740
795
  }
741
796
 
742
797
  static void destroy_stream_locked(void* sp, grpc_error_handle /*error*/) {
743
- GPR_TIMER_SCOPE("destroy_stream", 0);
744
798
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(sp);
745
799
  s->~grpc_chttp2_stream();
746
800
  }
747
801
 
748
802
  static void destroy_stream(grpc_transport* gt, grpc_stream* gs,
749
803
  grpc_closure* then_schedule_closure) {
750
- GPR_TIMER_SCOPE("destroy_stream", 0);
751
804
  grpc_chttp2_transport* t = reinterpret_cast<grpc_chttp2_transport*>(gt);
752
805
  grpc_chttp2_stream* s = reinterpret_cast<grpc_chttp2_stream*>(gs);
753
806
 
754
807
  s->destroy_stream_arg = then_schedule_closure;
755
808
  t->combiner->Run(
756
809
  GRPC_CLOSURE_INIT(&s->destroy_stream, destroy_stream_locked, s, nullptr),
757
- GRPC_ERROR_NONE);
810
+ absl::OkStatus());
758
811
  }
759
812
 
760
813
  grpc_chttp2_stream* grpc_chttp2_parsing_accept_stream(grpc_chttp2_transport* t,
@@ -802,93 +855,18 @@ static void set_write_state(grpc_chttp2_transport* t,
802
855
  // from peer while we had some pending writes)
803
856
  if (st == GRPC_CHTTP2_WRITE_STATE_IDLE) {
804
857
  grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &t->run_after_write);
805
- if (t->close_transport_on_writes_finished != GRPC_ERROR_NONE) {
858
+ if (!t->close_transport_on_writes_finished.ok()) {
806
859
  grpc_error_handle err = t->close_transport_on_writes_finished;
807
- t->close_transport_on_writes_finished = GRPC_ERROR_NONE;
860
+ t->close_transport_on_writes_finished = absl::OkStatus();
808
861
  close_transport_locked(t, err);
809
862
  }
810
863
  }
811
864
  }
812
865
 
813
- static void inc_initiate_write_reason(
814
- grpc_chttp2_initiate_write_reason reason) {
815
- switch (reason) {
816
- case GRPC_CHTTP2_INITIATE_WRITE_INITIAL_WRITE:
817
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_INITIAL_WRITE();
818
- break;
819
- case GRPC_CHTTP2_INITIATE_WRITE_START_NEW_STREAM:
820
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_START_NEW_STREAM();
821
- break;
822
- case GRPC_CHTTP2_INITIATE_WRITE_SEND_MESSAGE:
823
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SEND_MESSAGE();
824
- break;
825
- case GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA:
826
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SEND_INITIAL_METADATA();
827
- break;
828
- case GRPC_CHTTP2_INITIATE_WRITE_SEND_TRAILING_METADATA:
829
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SEND_TRAILING_METADATA();
830
- break;
831
- case GRPC_CHTTP2_INITIATE_WRITE_RETRY_SEND_PING:
832
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_RETRY_SEND_PING();
833
- break;
834
- case GRPC_CHTTP2_INITIATE_WRITE_CONTINUE_PINGS:
835
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_CONTINUE_PINGS();
836
- break;
837
- case GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT:
838
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_GOAWAY_SENT();
839
- break;
840
- case GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM:
841
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_RST_STREAM();
842
- break;
843
- case GRPC_CHTTP2_INITIATE_WRITE_CLOSE_FROM_API:
844
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_CLOSE_FROM_API();
845
- break;
846
- case GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL:
847
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_STREAM_FLOW_CONTROL();
848
- break;
849
- case GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL:
850
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_TRANSPORT_FLOW_CONTROL();
851
- break;
852
- case GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS:
853
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SEND_SETTINGS();
854
- break;
855
- case GRPC_CHTTP2_INITIATE_WRITE_SETTINGS_ACK:
856
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SETTINGS_ACK();
857
- break;
858
- case GRPC_CHTTP2_INITIATE_WRITE_FLOW_CONTROL_UNSTALLED_BY_SETTING:
859
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_FLOW_CONTROL_UNSTALLED_BY_SETTING();
860
- break;
861
- case GRPC_CHTTP2_INITIATE_WRITE_FLOW_CONTROL_UNSTALLED_BY_UPDATE:
862
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_FLOW_CONTROL_UNSTALLED_BY_UPDATE();
863
- break;
864
- case GRPC_CHTTP2_INITIATE_WRITE_APPLICATION_PING:
865
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_APPLICATION_PING();
866
- break;
867
- case GRPC_CHTTP2_INITIATE_WRITE_BDP_PING:
868
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_BDP_ESTIMATOR_PING();
869
- break;
870
- case GRPC_CHTTP2_INITIATE_WRITE_KEEPALIVE_PING:
871
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_KEEPALIVE_PING();
872
- break;
873
- case GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL_UNSTALLED:
874
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_TRANSPORT_FLOW_CONTROL_UNSTALLED();
875
- break;
876
- case GRPC_CHTTP2_INITIATE_WRITE_PING_RESPONSE:
877
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_PING_RESPONSE();
878
- break;
879
- case GRPC_CHTTP2_INITIATE_WRITE_FORCE_RST_STREAM:
880
- GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_FORCE_RST_STREAM();
881
- break;
882
- }
883
- }
884
-
885
866
  void grpc_chttp2_initiate_write(grpc_chttp2_transport* t,
886
867
  grpc_chttp2_initiate_write_reason reason) {
887
- GPR_TIMER_SCOPE("grpc_chttp2_initiate_write", 0);
888
-
889
868
  switch (t->write_state) {
890
869
  case GRPC_CHTTP2_WRITE_STATE_IDLE:
891
- inc_initiate_write_reason(reason);
892
870
  set_write_state(t, GRPC_CHTTP2_WRITE_STATE_WRITING,
893
871
  grpc_chttp2_initiate_write_reason_string(reason));
894
872
  GRPC_CHTTP2_REF_TRANSPORT(t, "writing");
@@ -911,7 +889,7 @@ void grpc_chttp2_initiate_write(grpc_chttp2_transport* t,
911
889
  t->combiner->FinallyRun(
912
890
  GRPC_CLOSURE_INIT(&t->write_action_begin_locked,
913
891
  write_action_begin_locked, t, nullptr),
914
- GRPC_ERROR_NONE);
892
+ absl::OkStatus());
915
893
  break;
916
894
  case GRPC_CHTTP2_WRITE_STATE_WRITING:
917
895
  set_write_state(t, GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE,
@@ -924,8 +902,7 @@ void grpc_chttp2_initiate_write(grpc_chttp2_transport* t,
924
902
 
925
903
  void grpc_chttp2_mark_stream_writable(grpc_chttp2_transport* t,
926
904
  grpc_chttp2_stream* s) {
927
- if (t->closed_with_error == GRPC_ERROR_NONE &&
928
- grpc_chttp2_list_add_writable_stream(t, s)) {
905
+ if (t->closed_with_error.ok() && grpc_chttp2_list_add_writable_stream(t, s)) {
929
906
  GRPC_CHTTP2_STREAM_REF(s, "chttp2_writing:become");
930
907
  }
931
908
  }
@@ -940,24 +917,20 @@ static const char* begin_writing_desc(bool partial) {
940
917
 
941
918
  static void write_action_begin_locked(void* gt,
942
919
  grpc_error_handle /*error_ignored*/) {
943
- GPR_TIMER_SCOPE("write_action_begin_locked", 0);
944
920
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(gt);
945
921
  GPR_ASSERT(t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE);
946
922
  grpc_chttp2_begin_write_result r;
947
- if (t->closed_with_error != GRPC_ERROR_NONE) {
923
+ if (!t->closed_with_error.ok()) {
948
924
  r.writing = false;
949
925
  } else {
950
926
  r = grpc_chttp2_begin_write(t);
951
927
  }
952
928
  if (r.writing) {
953
- if (r.partial) {
954
- GRPC_STATS_INC_HTTP2_PARTIAL_WRITES();
955
- }
956
929
  set_write_state(t,
957
930
  r.partial ? GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE
958
931
  : GRPC_CHTTP2_WRITE_STATE_WRITING,
959
932
  begin_writing_desc(r.partial));
960
- write_action(t, GRPC_ERROR_NONE);
933
+ write_action(t, absl::OkStatus());
961
934
  if (t->reading_paused_on_pending_induced_frames) {
962
935
  GPR_ASSERT(t->num_pending_induced_frames == 0);
963
936
  // We had paused reading, because we had many induced frames (SETTINGS
@@ -972,40 +945,48 @@ static void write_action_begin_locked(void* gt,
972
945
  continue_read_action_locked(t);
973
946
  }
974
947
  } else {
975
- GRPC_STATS_INC_HTTP2_SPURIOUS_WRITES_BEGUN();
976
948
  set_write_state(t, GRPC_CHTTP2_WRITE_STATE_IDLE, "begin writing nothing");
977
949
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "writing");
978
950
  }
979
951
  }
980
952
 
981
953
  static void write_action(void* gt, grpc_error_handle /*error*/) {
982
- GPR_TIMER_SCOPE("write_action", 0);
983
954
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(gt);
984
955
  void* cl = t->cl;
985
956
  t->cl = nullptr;
957
+ // Choose max_frame_size as the prefered rx crypto frame size indicated by the
958
+ // peer.
959
+ int max_frame_size =
960
+ t->settings
961
+ [GRPC_PEER_SETTINGS]
962
+ [GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE];
963
+ // Note: max frame size is 0 if the remote peer does not support adjusting the
964
+ // sending frame size.
965
+ if (max_frame_size == 0) {
966
+ max_frame_size = INT_MAX;
967
+ }
986
968
  grpc_endpoint_write(
987
969
  t->ep, &t->outbuf,
988
970
  GRPC_CLOSURE_INIT(&t->write_action_end_locked, write_action_end, t,
989
971
  grpc_schedule_on_exec_ctx),
990
- cl);
972
+ cl, max_frame_size);
991
973
  }
992
974
 
993
975
  static void write_action_end(void* tp, grpc_error_handle error) {
994
976
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
995
977
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->write_action_end_locked,
996
978
  write_action_end_locked, t, nullptr),
997
- GRPC_ERROR_REF(error));
979
+ error);
998
980
  }
999
981
 
1000
982
  // Callback from the grpc_endpoint after bytes have been written by calling
1001
983
  // sendmsg
1002
984
  static void write_action_end_locked(void* tp, grpc_error_handle error) {
1003
- GPR_TIMER_SCOPE("terminate_writing_with_lock", 0);
1004
985
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
1005
986
 
1006
987
  bool closed = false;
1007
- if (error != GRPC_ERROR_NONE) {
1008
- close_transport_locked(t, GRPC_ERROR_REF(error));
988
+ if (!error.ok()) {
989
+ close_transport_locked(t, error);
1009
990
  closed = true;
1010
991
  }
1011
992
 
@@ -1013,8 +994,7 @@ static void write_action_end_locked(void* tp, grpc_error_handle error) {
1013
994
  t->sent_goaway_state = GRPC_CHTTP2_FINAL_GOAWAY_SENT;
1014
995
  closed = true;
1015
996
  if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
1016
- close_transport_locked(
1017
- t, GRPC_ERROR_CREATE_FROM_STATIC_STRING("goaway sent"));
997
+ close_transport_locked(t, GRPC_ERROR_CREATE("goaway sent"));
1018
998
  }
1019
999
  }
1020
1000
 
@@ -1022,11 +1002,9 @@ static void write_action_end_locked(void* tp, grpc_error_handle error) {
1022
1002
  case GRPC_CHTTP2_WRITE_STATE_IDLE:
1023
1003
  GPR_UNREACHABLE_CODE(break);
1024
1004
  case GRPC_CHTTP2_WRITE_STATE_WRITING:
1025
- GPR_TIMER_MARK("state=writing", 0);
1026
1005
  set_write_state(t, GRPC_CHTTP2_WRITE_STATE_IDLE, "finish writing");
1027
1006
  break;
1028
1007
  case GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE:
1029
- GPR_TIMER_MARK("state=writing_stale_no_poller", 0);
1030
1008
  set_write_state(t, GRPC_CHTTP2_WRITE_STATE_WRITING, "continue writing");
1031
1009
  GRPC_CHTTP2_REF_TRANSPORT(t, "writing");
1032
1010
  // If the transport is closed, we will retry writing on the endpoint
@@ -1040,11 +1018,11 @@ static void write_action_end_locked(void* tp, grpc_error_handle error) {
1040
1018
  t->combiner->FinallyRun(
1041
1019
  GRPC_CLOSURE_INIT(&t->write_action_begin_locked,
1042
1020
  write_action_begin_locked, t, nullptr),
1043
- GRPC_ERROR_NONE);
1021
+ absl::OkStatus());
1044
1022
  break;
1045
1023
  }
1046
1024
 
1047
- grpc_chttp2_end_write(t, GRPC_ERROR_REF(error));
1025
+ grpc_chttp2_end_write(t, error);
1048
1026
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "writing");
1049
1027
  }
1050
1028
 
@@ -1073,26 +1051,27 @@ static void cancel_unstarted_streams(grpc_chttp2_transport* t,
1073
1051
  s->trailing_metadata_buffer.Set(
1074
1052
  grpc_core::GrpcStreamNetworkState(),
1075
1053
  grpc_core::GrpcStreamNetworkState::kNotSentOnWire);
1076
- grpc_chttp2_cancel_stream(t, s, GRPC_ERROR_REF(error));
1054
+ grpc_chttp2_cancel_stream(t, s, error);
1077
1055
  }
1078
- GRPC_ERROR_UNREF(error);
1079
1056
  }
1080
1057
 
1081
1058
  void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1082
1059
  uint32_t goaway_error,
1083
1060
  uint32_t last_stream_id,
1084
1061
  absl::string_view goaway_text) {
1085
- // Discard the error from a previous goaway frame (if any)
1086
- if (t->goaway_error != GRPC_ERROR_NONE) {
1087
- GRPC_ERROR_UNREF(t->goaway_error);
1088
- }
1089
1062
  t->goaway_error = grpc_error_set_str(
1090
1063
  grpc_error_set_int(
1091
1064
  grpc_error_set_int(
1092
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("GOAWAY received"),
1093
- GRPC_ERROR_INT_HTTP2_ERROR, static_cast<intptr_t>(goaway_error)),
1094
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE),
1095
- GRPC_ERROR_STR_RAW_BYTES, goaway_text);
1065
+ grpc_core::StatusCreate(
1066
+ absl::StatusCode::kUnavailable,
1067
+ absl::StrFormat(
1068
+ "GOAWAY received; Error code: %u; Debug Text: %s",
1069
+ goaway_error, goaway_text),
1070
+ DEBUG_LOCATION, {}),
1071
+ grpc_core::StatusIntProperty::kHttp2Error,
1072
+ static_cast<intptr_t>(goaway_error)),
1073
+ grpc_core::StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE),
1074
+ grpc_core::StatusStrProperty::kRawBytes, goaway_text);
1096
1075
 
1097
1076
  GRPC_CHTTP2_IF_TRACING(
1098
1077
  gpr_log(GPR_INFO, "transport %p got goaway with last stream id %d", t,
@@ -1101,10 +1080,10 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1101
1080
  // received a GOAWAY with a non NO_ERROR code.
1102
1081
  if (goaway_error != GRPC_HTTP2_NO_ERROR) {
1103
1082
  gpr_log(GPR_INFO, "%s: Got goaway [%d] err=%s", t->peer_string.c_str(),
1104
- goaway_error, grpc_error_std_string(t->goaway_error).c_str());
1083
+ goaway_error, grpc_core::StatusToString(t->goaway_error).c_str());
1105
1084
  }
1106
1085
  if (t->is_client) {
1107
- cancel_unstarted_streams(t, GRPC_ERROR_REF(t->goaway_error));
1086
+ cancel_unstarted_streams(t, t->goaway_error);
1108
1087
  // Cancel all unseen streams
1109
1088
  grpc_chttp2_stream_map_for_each(
1110
1089
  &t->stream_map,
@@ -1115,8 +1094,7 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1115
1094
  s->trailing_metadata_buffer.Set(
1116
1095
  grpc_core::GrpcStreamNetworkState(),
1117
1096
  grpc_core::GrpcStreamNetworkState::kNotSeenByServer);
1118
- grpc_chttp2_cancel_stream(s->t, s,
1119
- GRPC_ERROR_REF(s->t->goaway_error));
1097
+ grpc_chttp2_cancel_stream(s->t, s, s->t->goaway_error);
1120
1098
  }
1121
1099
  },
1122
1100
  &last_stream_id);
@@ -1130,16 +1108,18 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1130
1108
  goaway_error == GRPC_HTTP2_ENHANCE_YOUR_CALM &&
1131
1109
  goaway_text == "too_many_pings")) {
1132
1110
  gpr_log(GPR_ERROR,
1133
- "Received a GOAWAY with error code ENHANCE_YOUR_CALM and debug "
1134
- "data equal to \"too_many_pings\"");
1135
- constexpr auto max_keepalive_time = grpc_core::Duration::Milliseconds(
1136
- INT_MAX / KEEPALIVE_TIME_BACKOFF_MULTIPLIER);
1137
- t->keepalive_time =
1138
- t->keepalive_time > max_keepalive_time
1139
- ? grpc_core::Duration::Infinity()
1140
- : t->keepalive_time * KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
1111
+ "%s: Received a GOAWAY with error code ENHANCE_YOUR_CALM and debug "
1112
+ "data equal to \"too_many_pings\". Current keepalive time (before "
1113
+ "throttling): %s",
1114
+ t->peer_string.c_str(), t->keepalive_time.ToString().c_str());
1115
+ constexpr int max_keepalive_time_millis =
1116
+ INT_MAX / KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
1117
+ int64_t throttled_keepalive_time =
1118
+ t->keepalive_time.millis() > max_keepalive_time_millis
1119
+ ? INT_MAX
1120
+ : t->keepalive_time.millis() * KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
1141
1121
  status.SetPayload(grpc_core::kKeepaliveThrottlingKey,
1142
- absl::Cord(std::to_string(t->keepalive_time.millis())));
1122
+ absl::Cord(std::to_string(throttled_keepalive_time)));
1143
1123
  }
1144
1124
  // lie: use transient failure from the transport to indicate goaway has been
1145
1125
  // received.
@@ -1153,8 +1133,8 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1153
1133
  grpc_chttp2_stream* s;
1154
1134
  // maybe cancel out streams that haven't yet started if we have received a
1155
1135
  // GOAWAY
1156
- if (t->goaway_error != GRPC_ERROR_NONE) {
1157
- cancel_unstarted_streams(t, GRPC_ERROR_REF(t->goaway_error));
1136
+ if (!t->goaway_error.ok()) {
1137
+ cancel_unstarted_streams(t, t->goaway_error);
1158
1138
  return;
1159
1139
  }
1160
1140
  // start streams where we have free grpc_chttp2_stream ids and free
@@ -1194,9 +1174,9 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1194
1174
  grpc_core::GrpcStreamNetworkState::kNotSentOnWire);
1195
1175
  grpc_chttp2_cancel_stream(
1196
1176
  t, s,
1197
- grpc_error_set_int(
1198
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Stream IDs exhausted"),
1199
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
1177
+ grpc_error_set_int(GRPC_ERROR_CREATE("Stream IDs exhausted"),
1178
+ grpc_core::StatusIntProperty::kRpcStatus,
1179
+ GRPC_STATUS_UNAVAILABLE));
1200
1180
  }
1201
1181
  }
1202
1182
  }
@@ -1217,7 +1197,13 @@ static grpc_closure* add_closure_barrier(grpc_closure* closure) {
1217
1197
  static void null_then_sched_closure(grpc_closure** closure) {
1218
1198
  grpc_closure* c = *closure;
1219
1199
  *closure = nullptr;
1220
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, c, GRPC_ERROR_NONE);
1200
+ // null_then_schedule_closure might be run during a start_batch which might
1201
+ // subsequently examine the batch for more operations contained within.
1202
+ // However, the closure run might make it back to the call object, push a
1203
+ // completion, have the application see it, and make a new operation on the
1204
+ // call which recycles the batch BEFORE the call to start_batch completes,
1205
+ // forcing a race.
1206
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, c, absl::OkStatus());
1221
1207
  }
1222
1208
 
1223
1209
  void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
@@ -1228,7 +1214,6 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1228
1214
  grpc_closure* closure = *pclosure;
1229
1215
  *pclosure = nullptr;
1230
1216
  if (closure == nullptr) {
1231
- GRPC_ERROR_UNREF(error);
1232
1217
  return;
1233
1218
  }
1234
1219
  closure->next_data.scratch -= CLOSURE_BARRIER_FIRST_REF_BIT;
@@ -1242,42 +1227,31 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1242
1227
  CLOSURE_BARRIER_FIRST_REF_BIT),
1243
1228
  static_cast<int>(closure->next_data.scratch %
1244
1229
  CLOSURE_BARRIER_FIRST_REF_BIT),
1245
- desc, grpc_error_std_string(error).c_str(),
1230
+ desc, grpc_core::StatusToString(error).c_str(),
1246
1231
  write_state_name(t->write_state));
1247
1232
  }
1248
- if (error != GRPC_ERROR_NONE) {
1249
- #ifdef GRPC_ERROR_IS_ABSEIL_STATUS
1233
+ if (!error.ok()) {
1250
1234
  grpc_error_handle cl_err =
1251
1235
  grpc_core::internal::StatusMoveFromHeapPtr(closure->error_data.error);
1252
- #else
1253
- grpc_error_handle cl_err =
1254
- reinterpret_cast<grpc_error_handle>(closure->error_data.error);
1255
- #endif
1256
- if (cl_err == GRPC_ERROR_NONE) {
1257
- cl_err = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1258
- "Error in HTTP transport completing operation");
1259
- cl_err = grpc_error_set_str(cl_err, GRPC_ERROR_STR_TARGET_ADDRESS,
1260
- t->peer_string);
1236
+ if (cl_err.ok()) {
1237
+ cl_err = GRPC_ERROR_CREATE(absl::StrCat(
1238
+ "Error in HTTP transport completing operation: ", desc,
1239
+ " write_state=", write_state_name(t->write_state), " refs=",
1240
+ closure->next_data.scratch / CLOSURE_BARRIER_FIRST_REF_BIT, " flags=",
1241
+ closure->next_data.scratch % CLOSURE_BARRIER_FIRST_REF_BIT));
1242
+ cl_err = grpc_error_set_str(
1243
+ cl_err, grpc_core::StatusStrProperty::kTargetAddress, t->peer_string);
1261
1244
  }
1262
1245
  cl_err = grpc_error_add_child(cl_err, error);
1263
- #ifdef GRPC_ERROR_IS_ABSEIL_STATUS
1264
1246
  closure->error_data.error = grpc_core::internal::StatusAllocHeapPtr(cl_err);
1265
- #else
1266
- closure->error_data.error = reinterpret_cast<intptr_t>(cl_err);
1267
- #endif
1268
1247
  }
1269
1248
  if (closure->next_data.scratch < CLOSURE_BARRIER_FIRST_REF_BIT) {
1270
1249
  if ((t->write_state == GRPC_CHTTP2_WRITE_STATE_IDLE) ||
1271
1250
  !(closure->next_data.scratch & CLOSURE_BARRIER_MAY_COVER_WRITE)) {
1272
1251
  // Using GRPC_CLOSURE_SCHED instead of GRPC_CLOSURE_RUN to avoid running
1273
1252
  // closures earlier than when it is safe to do so.
1274
- #ifdef GRPC_ERROR_IS_ABSEIL_STATUS
1275
1253
  grpc_error_handle run_error =
1276
1254
  grpc_core::internal::StatusMoveFromHeapPtr(closure->error_data.error);
1277
- #else
1278
- grpc_error_handle run_error =
1279
- reinterpret_cast<grpc_error_handle>(closure->error_data.error);
1280
- #endif
1281
1255
  closure->error_data.error = 0;
1282
1256
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, run_error);
1283
1257
  } else {
@@ -1291,96 +1265,9 @@ static bool contains_non_ok_status(grpc_metadata_batch* batch) {
1291
1265
  GRPC_STATUS_OK;
1292
1266
  }
1293
1267
 
1294
- static void maybe_become_writable_due_to_send_msg(grpc_chttp2_transport* t,
1295
- grpc_chttp2_stream* s) {
1296
- if (s->id != 0 && (!s->write_buffering ||
1297
- s->flow_controlled_buffer.length > t->write_buffer_size)) {
1298
- grpc_chttp2_mark_stream_writable(t, s);
1299
- grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_SEND_MESSAGE);
1300
- }
1301
- }
1302
-
1303
- static void add_fetched_slice_locked(grpc_chttp2_transport* t,
1304
- grpc_chttp2_stream* s) {
1305
- s->fetched_send_message_length +=
1306
- static_cast<uint32_t> GRPC_SLICE_LENGTH(s->fetching_slice);
1307
- grpc_slice_buffer_add(&s->flow_controlled_buffer, s->fetching_slice);
1308
- maybe_become_writable_due_to_send_msg(t, s);
1309
- }
1310
-
1311
- static void continue_fetching_send_locked(grpc_chttp2_transport* t,
1312
- grpc_chttp2_stream* s) {
1313
- for (;;) {
1314
- if (s->fetching_send_message == nullptr) {
1315
- // Stream was cancelled before message fetch completed
1316
- abort(); /* TODO(ctiller): what cleanup here? */
1317
- }
1318
- if (s->fetched_send_message_length == s->fetching_send_message->length()) {
1319
- int64_t notify_offset = s->next_message_end_offset;
1320
- if (notify_offset <= s->flow_controlled_bytes_written) {
1321
- grpc_chttp2_complete_closure_step(
1322
- t, s, &s->fetching_send_message_finished, GRPC_ERROR_NONE,
1323
- "fetching_send_message_finished");
1324
- } else {
1325
- grpc_chttp2_write_cb* cb = t->write_cb_pool;
1326
- if (cb == nullptr) {
1327
- cb = static_cast<grpc_chttp2_write_cb*>(gpr_malloc(sizeof(*cb)));
1328
- } else {
1329
- t->write_cb_pool = cb->next;
1330
- }
1331
- cb->call_at_byte = notify_offset;
1332
- cb->closure = s->fetching_send_message_finished;
1333
- s->fetching_send_message_finished = nullptr;
1334
- grpc_chttp2_write_cb** list =
1335
- s->fetching_send_message->flags() & GRPC_WRITE_THROUGH
1336
- ? &s->on_write_finished_cbs
1337
- : &s->on_flow_controlled_cbs;
1338
- cb->next = *list;
1339
- *list = cb;
1340
- }
1341
- s->fetching_send_message.reset();
1342
- return; /* early out */
1343
- } else if (s->fetching_send_message->Next(
1344
- UINT32_MAX, GRPC_CLOSURE_INIT(&s->complete_fetch_locked,
1345
- ::complete_fetch, s,
1346
- grpc_schedule_on_exec_ctx))) {
1347
- grpc_error_handle error =
1348
- s->fetching_send_message->Pull(&s->fetching_slice);
1349
- if (error != GRPC_ERROR_NONE) {
1350
- s->fetching_send_message.reset();
1351
- grpc_chttp2_cancel_stream(t, s, error);
1352
- } else {
1353
- add_fetched_slice_locked(t, s);
1354
- }
1355
- }
1356
- }
1357
- }
1358
-
1359
- static void complete_fetch(void* gs, grpc_error_handle error) {
1360
- grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
1361
- s->t->combiner->Run(GRPC_CLOSURE_INIT(&s->complete_fetch_locked,
1362
- ::complete_fetch_locked, s, nullptr),
1363
- GRPC_ERROR_REF(error));
1364
- }
1365
-
1366
- static void complete_fetch_locked(void* gs, grpc_error_handle error) {
1367
- grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
1368
- grpc_chttp2_transport* t = s->t;
1369
- if (error == GRPC_ERROR_NONE) {
1370
- error = s->fetching_send_message->Pull(&s->fetching_slice);
1371
- if (error == GRPC_ERROR_NONE) {
1372
- add_fetched_slice_locked(t, s);
1373
- continue_fetching_send_locked(t, s);
1374
- }
1375
- }
1376
- if (error != GRPC_ERROR_NONE) {
1377
- s->fetching_send_message.reset();
1378
- grpc_chttp2_cancel_stream(t, s, error);
1379
- }
1380
- }
1381
-
1382
1268
  static void log_metadata(const grpc_metadata_batch* md_batch, uint32_t id,
1383
1269
  bool is_client, bool is_initial) {
1270
+ gpr_log(GPR_INFO, "--metadata--");
1384
1271
  const std::string prefix = absl::StrCat(
1385
1272
  "HTTP:", id, is_initial ? ":HDR" : ":TRL", is_client ? ":CLI:" : ":SVR:");
1386
1273
  md_batch->Log([&prefix](absl::string_view key, absl::string_view value) {
@@ -1390,8 +1277,6 @@ static void log_metadata(const grpc_metadata_batch* md_batch, uint32_t id,
1390
1277
 
1391
1278
  static void perform_stream_op_locked(void* stream_op,
1392
1279
  grpc_error_handle /*error_ignored*/) {
1393
- GPR_TIMER_SCOPE("perform_stream_op_locked", 0);
1394
-
1395
1280
  grpc_transport_stream_op_batch* op =
1396
1281
  static_cast<grpc_transport_stream_op_batch*>(stream_op);
1397
1282
  grpc_chttp2_stream* s =
@@ -1399,8 +1284,6 @@ static void perform_stream_op_locked(void* stream_op,
1399
1284
  grpc_transport_stream_op_batch_payload* op_payload = op->payload;
1400
1285
  grpc_chttp2_transport* t = s->t;
1401
1286
 
1402
- GRPC_STATS_INC_HTTP2_OP_BATCHES();
1403
-
1404
1287
  s->context = op->payload->context;
1405
1288
  s->traced = op->is_traced;
1406
1289
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
@@ -1428,7 +1311,6 @@ static void perform_stream_op_locked(void* stream_op,
1428
1311
  }
1429
1312
 
1430
1313
  if (op->cancel_stream) {
1431
- GRPC_STATS_INC_HTTP2_OP_CANCEL();
1432
1314
  grpc_chttp2_cancel_stream(t, s, op_payload->cancel_stream.cancel_error);
1433
1315
  }
1434
1316
 
@@ -1436,7 +1318,6 @@ static void perform_stream_op_locked(void* stream_op,
1436
1318
  if (t->is_client && t->channelz_socket != nullptr) {
1437
1319
  t->channelz_socket->RecordStreamStartedFromLocal();
1438
1320
  }
1439
- GRPC_STATS_INC_HTTP2_OP_SEND_INITIAL_METADATA();
1440
1321
  GPR_ASSERT(s->send_initial_metadata_finished == nullptr);
1441
1322
  on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
1442
1323
 
@@ -1454,7 +1335,7 @@ static void perform_stream_op_locked(void* stream_op,
1454
1335
  }
1455
1336
  if (!s->write_closed) {
1456
1337
  if (t->is_client) {
1457
- if (t->closed_with_error == GRPC_ERROR_NONE) {
1338
+ if (t->closed_with_error.ok()) {
1458
1339
  GPR_ASSERT(s->id == 0);
1459
1340
  grpc_chttp2_list_add_waiting_for_concurrency(t, s);
1460
1341
  maybe_start_some_streams(t);
@@ -1465,16 +1346,16 @@ static void perform_stream_op_locked(void* stream_op,
1465
1346
  grpc_chttp2_cancel_stream(
1466
1347
  t, s,
1467
1348
  grpc_error_set_int(
1468
- GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1469
- "Transport closed", &t->closed_with_error, 1),
1470
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
1349
+ GRPC_ERROR_CREATE_REFERENCING("Transport closed",
1350
+ &t->closed_with_error, 1),
1351
+ grpc_core::StatusIntProperty::kRpcStatus,
1352
+ GRPC_STATUS_UNAVAILABLE));
1471
1353
  }
1472
1354
  } else {
1473
1355
  GPR_ASSERT(s->id != 0);
1474
1356
  grpc_chttp2_mark_stream_writable(t, s);
1475
1357
  if (!(op->send_message &&
1476
- (op->payload->send_message.send_message->flags() &
1477
- GRPC_WRITE_BUFFER_HINT))) {
1358
+ (op->payload->send_message.flags & GRPC_WRITE_BUFFER_HINT))) {
1478
1359
  grpc_chttp2_initiate_write(
1479
1360
  t, GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA);
1480
1361
  }
@@ -1483,7 +1364,7 @@ static void perform_stream_op_locked(void* stream_op,
1483
1364
  s->send_initial_metadata = nullptr;
1484
1365
  grpc_chttp2_complete_closure_step(
1485
1366
  t, s, &s->send_initial_metadata_finished,
1486
- GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1367
+ GRPC_ERROR_CREATE_REFERENCING(
1487
1368
  "Attempt to send initial metadata after stream was closed",
1488
1369
  &s->write_closed_error, 1),
1489
1370
  "send_initial_metadata_finished");
@@ -1495,35 +1376,30 @@ static void perform_stream_op_locked(void* stream_op,
1495
1376
  }
1496
1377
 
1497
1378
  if (op->send_message) {
1498
- GRPC_STATS_INC_HTTP2_OP_SEND_MESSAGE();
1499
1379
  t->num_messages_in_next_write++;
1500
- GRPC_STATS_INC_HTTP2_SEND_MESSAGE_SIZE(
1501
- op->payload->send_message.send_message->length());
1380
+ grpc_core::global_stats().IncrementHttp2SendMessageSize(
1381
+ op->payload->send_message.send_message->Length());
1502
1382
  on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
1503
- s->fetching_send_message_finished = add_closure_barrier(op->on_complete);
1383
+ s->send_message_finished = add_closure_barrier(op->on_complete);
1384
+ const uint32_t flags = op_payload->send_message.flags;
1504
1385
  if (s->write_closed) {
1505
1386
  op->payload->send_message.stream_write_closed = true;
1506
1387
  // We should NOT return an error here, so as to avoid a cancel OP being
1507
1388
  // started. The surface layer will notice that the stream has been closed
1508
1389
  // for writes and fail the send message op.
1509
- op->payload->send_message.send_message.reset();
1510
- grpc_chttp2_complete_closure_step(
1511
- t, s, &s->fetching_send_message_finished, GRPC_ERROR_NONE,
1512
- "fetching_send_message_finished");
1390
+ grpc_chttp2_complete_closure_step(t, s, &s->send_message_finished,
1391
+ absl::OkStatus(),
1392
+ "fetching_send_message_finished");
1513
1393
  } else {
1514
- GPR_ASSERT(s->fetching_send_message == nullptr);
1515
1394
  uint8_t* frame_hdr = grpc_slice_buffer_tiny_add(
1516
1395
  &s->flow_controlled_buffer, GRPC_HEADER_SIZE_IN_BYTES);
1517
- uint32_t flags = op_payload->send_message.send_message->flags();
1518
1396
  frame_hdr[0] = (flags & GRPC_WRITE_INTERNAL_COMPRESS) != 0;
1519
- size_t len = op_payload->send_message.send_message->length();
1397
+ size_t len = op_payload->send_message.send_message->Length();
1520
1398
  frame_hdr[1] = static_cast<uint8_t>(len >> 24);
1521
1399
  frame_hdr[2] = static_cast<uint8_t>(len >> 16);
1522
1400
  frame_hdr[3] = static_cast<uint8_t>(len >> 8);
1523
1401
  frame_hdr[4] = static_cast<uint8_t>(len);
1524
- s->fetching_send_message =
1525
- std::move(op_payload->send_message.send_message);
1526
- s->fetched_send_message_length = 0;
1402
+
1527
1403
  s->next_message_end_offset =
1528
1404
  s->flow_controlled_bytes_written +
1529
1405
  static_cast<int64_t>(s->flow_controlled_buffer.length) +
@@ -1534,13 +1410,48 @@ static void perform_stream_op_locked(void* stream_op,
1534
1410
  } else {
1535
1411
  s->write_buffering = false;
1536
1412
  }
1537
- continue_fetching_send_locked(t, s);
1538
- maybe_become_writable_due_to_send_msg(t, s);
1413
+
1414
+ grpc_slice* const slices =
1415
+ op_payload->send_message.send_message->c_slice_buffer()->slices;
1416
+ grpc_slice* const end =
1417
+ slices + op_payload->send_message.send_message->Count();
1418
+ for (grpc_slice* slice = slices; slice != end; slice++) {
1419
+ grpc_slice_buffer_add(&s->flow_controlled_buffer,
1420
+ grpc_core::CSliceRef(*slice));
1421
+ }
1422
+
1423
+ int64_t notify_offset = s->next_message_end_offset;
1424
+ if (notify_offset <= s->flow_controlled_bytes_written) {
1425
+ grpc_chttp2_complete_closure_step(t, s, &s->send_message_finished,
1426
+ absl::OkStatus(),
1427
+ "fetching_send_message_finished");
1428
+ } else {
1429
+ grpc_chttp2_write_cb* cb = t->write_cb_pool;
1430
+ if (cb == nullptr) {
1431
+ cb = static_cast<grpc_chttp2_write_cb*>(gpr_malloc(sizeof(*cb)));
1432
+ } else {
1433
+ t->write_cb_pool = cb->next;
1434
+ }
1435
+ cb->call_at_byte = notify_offset;
1436
+ cb->closure = s->send_message_finished;
1437
+ s->send_message_finished = nullptr;
1438
+ grpc_chttp2_write_cb** list = flags & GRPC_WRITE_THROUGH
1439
+ ? &s->on_write_finished_cbs
1440
+ : &s->on_flow_controlled_cbs;
1441
+ cb->next = *list;
1442
+ *list = cb;
1443
+ }
1444
+
1445
+ if (s->id != 0 &&
1446
+ (!s->write_buffering ||
1447
+ s->flow_controlled_buffer.length > t->write_buffer_size)) {
1448
+ grpc_chttp2_mark_stream_writable(t, s);
1449
+ grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_SEND_MESSAGE);
1450
+ }
1539
1451
  }
1540
1452
  }
1541
1453
 
1542
1454
  if (op->send_trailing_metadata) {
1543
- GRPC_STATS_INC_HTTP2_OP_SEND_TRAILING_METADATA();
1544
1455
  GPR_ASSERT(s->send_trailing_metadata_finished == nullptr);
1545
1456
  on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
1546
1457
  s->send_trailing_metadata_finished = add_closure_barrier(on_complete);
@@ -1557,10 +1468,9 @@ static void perform_stream_op_locked(void* stream_op,
1557
1468
  grpc_chttp2_complete_closure_step(
1558
1469
  t, s, &s->send_trailing_metadata_finished,
1559
1470
  op->payload->send_trailing_metadata.send_trailing_metadata->empty()
1560
- ? GRPC_ERROR_NONE
1561
- : GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1562
- "Attempt to send trailing metadata after "
1563
- "stream was closed"),
1471
+ ? absl::OkStatus()
1472
+ : GRPC_ERROR_CREATE("Attempt to send trailing metadata after "
1473
+ "stream was closed"),
1564
1474
  "send_trailing_metadata_finished");
1565
1475
  } else if (s->id != 0) {
1566
1476
  // TODO(ctiller): check if there's flow control for any outstanding
@@ -1572,7 +1482,6 @@ static void perform_stream_op_locked(void* stream_op,
1572
1482
  }
1573
1483
 
1574
1484
  if (op->recv_initial_metadata) {
1575
- GRPC_STATS_INC_HTTP2_OP_RECV_INITIAL_METADATA();
1576
1485
  GPR_ASSERT(s->recv_initial_metadata_ready == nullptr);
1577
1486
  s->recv_initial_metadata_ready =
1578
1487
  op_payload->recv_initial_metadata.recv_initial_metadata_ready;
@@ -1580,6 +1489,9 @@ static void perform_stream_op_locked(void* stream_op,
1580
1489
  op_payload->recv_initial_metadata.recv_initial_metadata;
1581
1490
  s->trailing_metadata_available =
1582
1491
  op_payload->recv_initial_metadata.trailing_metadata_available;
1492
+ if (s->parsed_trailers_only && s->trailing_metadata_available != nullptr) {
1493
+ *s->trailing_metadata_available = true;
1494
+ }
1583
1495
  if (op_payload->recv_initial_metadata.peer_string != nullptr) {
1584
1496
  gpr_atm_rel_store(op_payload->recv_initial_metadata.peer_string,
1585
1497
  (gpr_atm)t->peer_string.c_str());
@@ -1588,33 +1500,17 @@ static void perform_stream_op_locked(void* stream_op,
1588
1500
  }
1589
1501
 
1590
1502
  if (op->recv_message) {
1591
- GRPC_STATS_INC_HTTP2_OP_RECV_MESSAGE();
1592
- size_t before = 0;
1593
1503
  GPR_ASSERT(s->recv_message_ready == nullptr);
1594
- GPR_ASSERT(!s->pending_byte_stream);
1595
1504
  s->recv_message_ready = op_payload->recv_message.recv_message_ready;
1596
1505
  s->recv_message = op_payload->recv_message.recv_message;
1506
+ s->recv_message->emplace();
1507
+ s->recv_message_flags = op_payload->recv_message.flags;
1597
1508
  s->call_failed_before_recv_message =
1598
1509
  op_payload->recv_message.call_failed_before_recv_message;
1599
- if (s->id != 0) {
1600
- if (!s->read_closed) {
1601
- before = s->frame_storage.length +
1602
- s->unprocessed_incoming_frames_buffer.length;
1603
- }
1604
- }
1605
- grpc_chttp2_maybe_complete_recv_message(t, s);
1606
- if (s->id != 0) {
1607
- if (!s->read_closed && s->frame_storage.length == 0) {
1608
- size_t after = s->unprocessed_incoming_frames_buffer_cached_length;
1609
- s->flow_control->IncomingByteStreamUpdate(GRPC_HEADER_SIZE_IN_BYTES,
1610
- before - after);
1611
- grpc_chttp2_act_on_flowctl_action(s->flow_control->MakeAction(), t, s);
1612
- }
1613
- }
1510
+ grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
1614
1511
  }
1615
1512
 
1616
1513
  if (op->recv_trailing_metadata) {
1617
- GRPC_STATS_INC_HTTP2_OP_RECV_TRAILING_METADATA();
1618
1514
  GPR_ASSERT(s->collecting_stats == nullptr);
1619
1515
  s->collecting_stats = op_payload->recv_trailing_metadata.collect_stats;
1620
1516
  GPR_ASSERT(s->recv_trailing_metadata_finished == nullptr);
@@ -1627,7 +1523,7 @@ static void perform_stream_op_locked(void* stream_op,
1627
1523
  }
1628
1524
 
1629
1525
  if (on_complete != nullptr) {
1630
- grpc_chttp2_complete_closure_step(t, s, &on_complete, GRPC_ERROR_NONE,
1526
+ grpc_chttp2_complete_closure_step(t, s, &on_complete, absl::OkStatus(),
1631
1527
  "op->on_complete");
1632
1528
  }
1633
1529
 
@@ -1636,7 +1532,6 @@ static void perform_stream_op_locked(void* stream_op,
1636
1532
 
1637
1533
  static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
1638
1534
  grpc_transport_stream_op_batch* op) {
1639
- GPR_TIMER_SCOPE("perform_stream_op", 0);
1640
1535
  grpc_chttp2_transport* t = reinterpret_cast<grpc_chttp2_transport*>(gt);
1641
1536
  grpc_chttp2_stream* s = reinterpret_cast<grpc_chttp2_stream*>(gs);
1642
1537
 
@@ -1662,49 +1557,46 @@ static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
1662
1557
  op->handler_private.extra_arg = gs;
1663
1558
  t->combiner->Run(GRPC_CLOSURE_INIT(&op->handler_private.closure,
1664
1559
  perform_stream_op_locked, op, nullptr),
1665
- GRPC_ERROR_NONE);
1560
+ absl::OkStatus());
1666
1561
  }
1667
1562
 
1668
1563
  static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error) {
1669
1564
  // callback remaining pings: they're not allowed to call into the transport,
1670
1565
  // and maybe they hold resources that need to be freed
1671
1566
  grpc_chttp2_ping_queue* pq = &t->ping_queue;
1672
- GPR_ASSERT(error != GRPC_ERROR_NONE);
1567
+ GPR_ASSERT(!error.ok());
1673
1568
  for (size_t j = 0; j < GRPC_CHTTP2_PCL_COUNT; j++) {
1674
- grpc_closure_list_fail_all(&pq->lists[j], GRPC_ERROR_REF(error));
1569
+ grpc_closure_list_fail_all(&pq->lists[j], error);
1675
1570
  grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &pq->lists[j]);
1676
1571
  }
1677
- GRPC_ERROR_UNREF(error);
1678
1572
  }
1679
1573
 
1680
1574
  static void send_ping_locked(grpc_chttp2_transport* t,
1681
1575
  grpc_closure* on_initiate, grpc_closure* on_ack) {
1682
- if (t->closed_with_error != GRPC_ERROR_NONE) {
1683
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_initiate,
1684
- GRPC_ERROR_REF(t->closed_with_error));
1685
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_ack,
1686
- GRPC_ERROR_REF(t->closed_with_error));
1576
+ if (!t->closed_with_error.ok()) {
1577
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_initiate, t->closed_with_error);
1578
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_ack, t->closed_with_error);
1687
1579
  return;
1688
1580
  }
1689
1581
  grpc_chttp2_ping_queue* pq = &t->ping_queue;
1690
1582
  grpc_closure_list_append(&pq->lists[GRPC_CHTTP2_PCL_INITIATE], on_initiate,
1691
- GRPC_ERROR_NONE);
1583
+ absl::OkStatus());
1692
1584
  grpc_closure_list_append(&pq->lists[GRPC_CHTTP2_PCL_NEXT], on_ack,
1693
- GRPC_ERROR_NONE);
1585
+ absl::OkStatus());
1694
1586
  }
1695
1587
 
1696
1588
  // Specialized form of send_ping_locked for keepalive ping. If there is already
1697
1589
  // a ping in progress, the keepalive ping would piggyback onto that ping,
1698
1590
  // instead of waiting for that ping to complete and then starting a new ping.
1699
1591
  static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
1700
- if (t->closed_with_error != GRPC_ERROR_NONE) {
1592
+ if (!t->closed_with_error.ok()) {
1701
1593
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
1702
1594
  start_keepalive_ping_locked, t, nullptr),
1703
- GRPC_ERROR_REF(t->closed_with_error));
1595
+ t->closed_with_error);
1704
1596
  t->combiner->Run(
1705
1597
  GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
1706
1598
  finish_keepalive_ping_locked, t, nullptr),
1707
- GRPC_ERROR_REF(t->closed_with_error));
1599
+ t->closed_with_error);
1708
1600
  return;
1709
1601
  }
1710
1602
  grpc_chttp2_ping_queue* pq = &t->ping_queue;
@@ -1712,39 +1604,39 @@ static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
1712
1604
  // There is a ping in flight. Add yourself to the inflight closure list.
1713
1605
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
1714
1606
  start_keepalive_ping_locked, t, nullptr),
1715
- GRPC_ERROR_REF(t->closed_with_error));
1607
+ t->closed_with_error);
1716
1608
  grpc_closure_list_append(
1717
1609
  &pq->lists[GRPC_CHTTP2_PCL_INFLIGHT],
1718
1610
  GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
1719
1611
  finish_keepalive_ping, t, grpc_schedule_on_exec_ctx),
1720
- GRPC_ERROR_NONE);
1612
+ absl::OkStatus());
1721
1613
  return;
1722
1614
  }
1723
1615
  grpc_closure_list_append(
1724
1616
  &pq->lists[GRPC_CHTTP2_PCL_INITIATE],
1725
1617
  GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked, start_keepalive_ping,
1726
1618
  t, grpc_schedule_on_exec_ctx),
1727
- GRPC_ERROR_NONE);
1619
+ absl::OkStatus());
1728
1620
  grpc_closure_list_append(
1729
1621
  &pq->lists[GRPC_CHTTP2_PCL_NEXT],
1730
1622
  GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked, finish_keepalive_ping,
1731
1623
  t, grpc_schedule_on_exec_ctx),
1732
- GRPC_ERROR_NONE);
1624
+ absl::OkStatus());
1733
1625
  }
1734
1626
 
1735
- void grpc_chttp2_retry_initiate_ping(void* tp, grpc_error_handle error) {
1736
- grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
1627
+ void grpc_chttp2_retry_initiate_ping(grpc_chttp2_transport* t) {
1737
1628
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->retry_initiate_ping_locked,
1738
1629
  retry_initiate_ping_locked, t, nullptr),
1739
- GRPC_ERROR_REF(error));
1630
+ absl::OkStatus());
1740
1631
  }
1741
1632
 
1742
- static void retry_initiate_ping_locked(void* tp, grpc_error_handle error) {
1633
+ static void retry_initiate_ping_locked(void* tp,
1634
+ GRPC_UNUSED grpc_error_handle error) {
1635
+ GPR_DEBUG_ASSERT(error.ok());
1743
1636
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
1744
- t->ping_state.is_delayed_ping_timer_set = false;
1745
- if (error == GRPC_ERROR_NONE) {
1746
- grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RETRY_SEND_PING);
1747
- }
1637
+ GPR_ASSERT(t->ping_state.delayed_ping_timer_handle.has_value());
1638
+ t->ping_state.delayed_ping_timer_handle.reset();
1639
+ grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RETRY_SEND_PING);
1748
1640
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "retry_initiate_ping_locked");
1749
1641
  }
1750
1642
 
@@ -1789,8 +1681,7 @@ class GracefulGoaway : public grpc_core::RefCounted<GracefulGoaway> {
1789
1681
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT);
1790
1682
  Ref().release(); // Ref for the timer
1791
1683
  grpc_timer_init(
1792
- &timer_,
1793
- grpc_core::ExecCtx::Get()->Now() + grpc_core::Duration::Seconds(20),
1684
+ &timer_, grpc_core::Timestamp::Now() + grpc_core::Duration::Seconds(20),
1794
1685
  GRPC_CLOSURE_INIT(&on_timer_, OnTimer, this, nullptr));
1795
1686
  }
1796
1687
 
@@ -1799,7 +1690,7 @@ class GracefulGoaway : public grpc_core::RefCounted<GracefulGoaway> {
1799
1690
  // We already sent the final GOAWAY.
1800
1691
  return;
1801
1692
  }
1802
- if (t_->destroying || t_->closed_with_error != GRPC_ERROR_NONE) {
1693
+ if (t_->destroying || !t_->closed_with_error.ok()) {
1803
1694
  GRPC_CHTTP2_IF_TRACING(gpr_log(
1804
1695
  GPR_INFO,
1805
1696
  "transport:%p %s peer:%s Transport already shutting down. "
@@ -1824,7 +1715,7 @@ class GracefulGoaway : public grpc_core::RefCounted<GracefulGoaway> {
1824
1715
  auto* self = static_cast<GracefulGoaway*>(arg);
1825
1716
  self->t_->combiner->Run(
1826
1717
  GRPC_CLOSURE_INIT(&self->on_ping_ack_, OnPingAckLocked, self, nullptr),
1827
- GRPC_ERROR_NONE);
1718
+ absl::OkStatus());
1828
1719
  }
1829
1720
 
1830
1721
  static void OnPingAckLocked(void* arg, grpc_error_handle /* error */) {
@@ -1836,13 +1727,13 @@ class GracefulGoaway : public grpc_core::RefCounted<GracefulGoaway> {
1836
1727
 
1837
1728
  static void OnTimer(void* arg, grpc_error_handle error) {
1838
1729
  auto* self = static_cast<GracefulGoaway*>(arg);
1839
- if (error != GRPC_ERROR_NONE) {
1730
+ if (!error.ok()) {
1840
1731
  self->Unref();
1841
1732
  return;
1842
1733
  }
1843
1734
  self->t_->combiner->Run(
1844
1735
  GRPC_CLOSURE_INIT(&self->on_timer_, OnTimerLocked, self, nullptr),
1845
- GRPC_ERROR_NONE);
1736
+ absl::OkStatus());
1846
1737
  }
1847
1738
 
1848
1739
  static void OnTimerLocked(void* arg, grpc_error_handle /* error */) {
@@ -1859,39 +1750,48 @@ class GracefulGoaway : public grpc_core::RefCounted<GracefulGoaway> {
1859
1750
 
1860
1751
  } // namespace
1861
1752
 
1862
- static void send_goaway(grpc_chttp2_transport* t, grpc_error_handle error) {
1753
+ static void send_goaway(grpc_chttp2_transport* t, grpc_error_handle error,
1754
+ bool immediate_disconnect_hint) {
1863
1755
  grpc_http2_error_code http_error;
1864
1756
  std::string message;
1865
1757
  grpc_error_get_status(error, grpc_core::Timestamp::InfFuture(), nullptr,
1866
1758
  &message, &http_error, nullptr);
1867
- if (!t->is_client && http_error == GRPC_HTTP2_NO_ERROR) {
1759
+ if (!t->is_client && http_error == GRPC_HTTP2_NO_ERROR &&
1760
+ !immediate_disconnect_hint) {
1868
1761
  // Do a graceful shutdown.
1869
- GracefulGoaway::Start(t);
1870
- } else {
1762
+ if (t->sent_goaway_state == GRPC_CHTTP2_NO_GOAWAY_SEND) {
1763
+ GracefulGoaway::Start(t);
1764
+ } else {
1765
+ // Graceful GOAWAY is already in progress.
1766
+ }
1767
+ } else if (t->sent_goaway_state == GRPC_CHTTP2_NO_GOAWAY_SEND ||
1768
+ t->sent_goaway_state == GRPC_CHTTP2_GRACEFUL_GOAWAY) {
1871
1769
  // We want to log this irrespective of whether http tracing is enabled
1872
1770
  gpr_log(GPR_DEBUG, "%s: Sending goaway err=%s", t->peer_string.c_str(),
1873
- grpc_error_std_string(error).c_str());
1771
+ grpc_core::StatusToString(error).c_str());
1874
1772
  t->sent_goaway_state = GRPC_CHTTP2_FINAL_GOAWAY_SEND_SCHEDULED;
1875
1773
  grpc_chttp2_goaway_append(
1876
1774
  t->last_new_stream_id, static_cast<uint32_t>(http_error),
1877
1775
  grpc_slice_from_cpp_string(std::move(message)), &t->qbuf);
1776
+ } else {
1777
+ // Final GOAWAY has already been sent.
1878
1778
  }
1879
1779
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT);
1880
- GRPC_ERROR_UNREF(error);
1881
1780
  }
1882
1781
 
1883
1782
  void grpc_chttp2_add_ping_strike(grpc_chttp2_transport* t) {
1884
1783
  if (++t->ping_recv_state.ping_strikes > t->ping_policy.max_ping_strikes &&
1885
1784
  t->ping_policy.max_ping_strikes != 0) {
1886
1785
  send_goaway(t,
1887
- grpc_error_set_int(
1888
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("too_many_pings"),
1889
- GRPC_ERROR_INT_HTTP2_ERROR, GRPC_HTTP2_ENHANCE_YOUR_CALM));
1786
+ grpc_error_set_int(GRPC_ERROR_CREATE("too_many_pings"),
1787
+ grpc_core::StatusIntProperty::kHttp2Error,
1788
+ GRPC_HTTP2_ENHANCE_YOUR_CALM),
1789
+ /*immediate_disconnect_hint=*/true);
1890
1790
  // The transport will be closed after the write is done
1891
1791
  close_transport_locked(
1892
- t, grpc_error_set_int(
1893
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Too many pings"),
1894
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
1792
+ t, grpc_error_set_int(GRPC_ERROR_CREATE("Too many pings"),
1793
+ grpc_core::StatusIntProperty::kRpcStatus,
1794
+ GRPC_STATUS_UNAVAILABLE));
1895
1795
  }
1896
1796
  }
1897
1797
 
@@ -1910,8 +1810,8 @@ static void perform_transport_op_locked(void* stream_op,
1910
1810
  grpc_chttp2_transport* t =
1911
1811
  static_cast<grpc_chttp2_transport*>(op->handler_private.extra_arg);
1912
1812
 
1913
- if (op->goaway_error != GRPC_ERROR_NONE) {
1914
- send_goaway(t, op->goaway_error);
1813
+ if (!op->goaway_error.ok()) {
1814
+ send_goaway(t, op->goaway_error, /*immediate_disconnect_hint=*/false);
1915
1815
  }
1916
1816
 
1917
1817
  if (op->set_accept_stream) {
@@ -1940,11 +1840,13 @@ static void perform_transport_op_locked(void* stream_op,
1940
1840
  t->state_tracker.RemoveWatcher(op->stop_connectivity_watch);
1941
1841
  }
1942
1842
 
1943
- if (op->disconnect_with_error != GRPC_ERROR_NONE) {
1843
+ if (!op->disconnect_with_error.ok()) {
1844
+ send_goaway(t, op->disconnect_with_error,
1845
+ /*immediate_disconnect_hint=*/true);
1944
1846
  close_transport_locked(t, op->disconnect_with_error);
1945
1847
  }
1946
1848
 
1947
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, op->on_consumed, GRPC_ERROR_NONE);
1849
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, op->on_consumed, absl::OkStatus());
1948
1850
 
1949
1851
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "transport_op");
1950
1852
  }
@@ -1959,7 +1861,7 @@ static void perform_transport_op(grpc_transport* gt, grpc_transport_op* op) {
1959
1861
  GRPC_CHTTP2_REF_TRANSPORT(t, "transport_op");
1960
1862
  t->combiner->Run(GRPC_CLOSURE_INIT(&op->handler_private.closure,
1961
1863
  perform_transport_op_locked, op, nullptr),
1962
- GRPC_ERROR_NONE);
1864
+ absl::OkStatus());
1963
1865
  }
1964
1866
 
1965
1867
  //
@@ -1971,11 +1873,7 @@ void grpc_chttp2_maybe_complete_recv_initial_metadata(grpc_chttp2_transport* t,
1971
1873
  if (s->recv_initial_metadata_ready != nullptr &&
1972
1874
  s->published_metadata[0] != GRPC_METADATA_NOT_PUBLISHED) {
1973
1875
  if (s->seen_error) {
1974
- grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
1975
- if (!s->pending_byte_stream) {
1976
- grpc_slice_buffer_reset_and_unref_internal(
1977
- &s->unprocessed_incoming_frames_buffer);
1978
- }
1876
+ grpc_slice_buffer_reset_and_unref(&s->frame_storage);
1979
1877
  }
1980
1878
  *s->recv_initial_metadata = std::move(s->initial_metadata_buffer);
1981
1879
  s->recv_initial_metadata->Set(grpc_core::PeerString(), t->peer_string);
@@ -1992,84 +1890,103 @@ void grpc_chttp2_maybe_complete_recv_initial_metadata(grpc_chttp2_transport* t,
1992
1890
  }
1993
1891
  }
1994
1892
 
1995
- void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* /*t*/,
1893
+ void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* t,
1996
1894
  grpc_chttp2_stream* s) {
1997
- grpc_error_handle error = GRPC_ERROR_NONE;
1998
- if (s->recv_message_ready != nullptr) {
1999
- *s->recv_message = nullptr;
2000
- if (s->final_metadata_requested && s->seen_error) {
2001
- grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
2002
- if (!s->pending_byte_stream) {
2003
- grpc_slice_buffer_reset_and_unref_internal(
2004
- &s->unprocessed_incoming_frames_buffer);
2005
- }
1895
+ if (s->recv_message_ready == nullptr) return;
1896
+
1897
+ grpc_core::chttp2::StreamFlowControl::IncomingUpdateContext upd(
1898
+ &s->flow_control);
1899
+ grpc_error_handle error;
1900
+
1901
+ // Lambda is immediately invoked as a big scoped section that can be
1902
+ // exited out of at any point by returning.
1903
+ [&]() {
1904
+ if (grpc_http_trace.enabled()) {
1905
+ gpr_log(GPR_DEBUG,
1906
+ "maybe_complete_recv_message %p final_metadata_requested=%d "
1907
+ "seen_error=%d",
1908
+ s, s->final_metadata_requested, s->seen_error);
2006
1909
  }
2007
- if (!s->pending_byte_stream) {
2008
- while (s->unprocessed_incoming_frames_buffer.length > 0 ||
2009
- s->frame_storage.length > 0) {
2010
- if (s->unprocessed_incoming_frames_buffer.length == 0) {
2011
- grpc_slice_buffer_swap(&s->unprocessed_incoming_frames_buffer,
2012
- &s->frame_storage);
2013
- }
2014
- error = grpc_deframe_unprocessed_incoming_frames(
2015
- &s->data_parser, s, &s->unprocessed_incoming_frames_buffer, nullptr,
2016
- s->recv_message);
2017
- if (error != GRPC_ERROR_NONE) {
2018
- s->seen_error = true;
2019
- grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
2020
- grpc_slice_buffer_reset_and_unref_internal(
2021
- &s->unprocessed_incoming_frames_buffer);
2022
- break;
2023
- } else if (*s->recv_message != nullptr) {
2024
- break;
1910
+ if (s->final_metadata_requested && s->seen_error) {
1911
+ grpc_slice_buffer_reset_and_unref(&s->frame_storage);
1912
+ s->recv_message->reset();
1913
+ } else {
1914
+ if (s->frame_storage.length != 0) {
1915
+ while (true) {
1916
+ GPR_ASSERT(s->frame_storage.length > 0);
1917
+ int64_t min_progress_size;
1918
+ auto r = grpc_deframe_unprocessed_incoming_frames(
1919
+ s, &min_progress_size, &**s->recv_message, s->recv_message_flags);
1920
+ if (grpc_http_trace.enabled()) {
1921
+ gpr_log(GPR_DEBUG, "Deframe data frame: %s",
1922
+ grpc_core::PollToString(r, [](absl::Status r) {
1923
+ return r.ToString();
1924
+ }).c_str());
1925
+ }
1926
+ if (r.pending()) {
1927
+ if (s->read_closed) {
1928
+ grpc_slice_buffer_reset_and_unref(&s->frame_storage);
1929
+ s->recv_message->reset();
1930
+ break;
1931
+ } else {
1932
+ upd.SetMinProgressSize(min_progress_size);
1933
+ return; // Out of lambda to enclosing function
1934
+ }
1935
+ } else {
1936
+ error = std::move(r.value());
1937
+ if (!error.ok()) {
1938
+ s->seen_error = true;
1939
+ grpc_slice_buffer_reset_and_unref(&s->frame_storage);
1940
+ break;
1941
+ } else {
1942
+ if (t->channelz_socket != nullptr) {
1943
+ t->channelz_socket->RecordMessageReceived();
1944
+ }
1945
+ break;
1946
+ }
1947
+ }
2025
1948
  }
1949
+ } else if (s->read_closed) {
1950
+ s->recv_message->reset();
1951
+ } else {
1952
+ upd.SetMinProgressSize(GRPC_HEADER_SIZE_IN_BYTES);
1953
+ return; // Out of lambda to enclosing function
2026
1954
  }
2027
1955
  }
2028
1956
  // save the length of the buffer before handing control back to application
2029
1957
  // threads. Needed to support correct flow control bookkeeping
2030
- s->unprocessed_incoming_frames_buffer_cached_length =
2031
- s->unprocessed_incoming_frames_buffer.length;
2032
- if (error == GRPC_ERROR_NONE && *s->recv_message != nullptr) {
1958
+ if (error.ok() && s->recv_message->has_value()) {
2033
1959
  null_then_sched_closure(&s->recv_message_ready);
2034
1960
  } else if (s->published_metadata[1] != GRPC_METADATA_NOT_PUBLISHED) {
2035
- *s->recv_message = nullptr;
2036
1961
  if (s->call_failed_before_recv_message != nullptr) {
2037
1962
  *s->call_failed_before_recv_message =
2038
1963
  (s->published_metadata[1] != GRPC_METADATA_PUBLISHED_AT_CLOSE);
2039
1964
  }
2040
1965
  null_then_sched_closure(&s->recv_message_ready);
2041
1966
  }
2042
- GRPC_ERROR_UNREF(error);
2043
- }
1967
+ }();
1968
+
1969
+ upd.SetPendingSize(s->frame_storage.length);
1970
+ grpc_chttp2_act_on_flowctl_action(upd.MakeAction(), t, s);
2044
1971
  }
2045
1972
 
2046
1973
  void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
2047
1974
  grpc_chttp2_stream* s) {
2048
1975
  grpc_chttp2_maybe_complete_recv_message(t, s);
1976
+ if (grpc_http_trace.enabled()) {
1977
+ gpr_log(GPR_DEBUG,
1978
+ "maybe_complete_recv_trailing_metadata cli=%d s=%p closure=%p "
1979
+ "read_closed=%d "
1980
+ "write_closed=%d %" PRIdPTR,
1981
+ t->is_client, s, s->recv_trailing_metadata_finished, s->read_closed,
1982
+ s->write_closed, s->frame_storage.length);
1983
+ }
2049
1984
  if (s->recv_trailing_metadata_finished != nullptr && s->read_closed &&
2050
1985
  s->write_closed) {
2051
1986
  if (s->seen_error || !t->is_client) {
2052
- grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
2053
- if (!s->pending_byte_stream) {
2054
- grpc_slice_buffer_reset_and_unref_internal(
2055
- &s->unprocessed_incoming_frames_buffer);
2056
- }
1987
+ grpc_slice_buffer_reset_and_unref(&s->frame_storage);
2057
1988
  }
2058
- bool pending_data = s->pending_byte_stream ||
2059
- s->unprocessed_incoming_frames_buffer.length > 0;
2060
- if (s->read_closed && s->frame_storage.length > 0 && !pending_data &&
2061
- !s->seen_error && s->recv_trailing_metadata_finished != nullptr) {
2062
- // Maybe some SYNC_FLUSH data is left in frame_storage. Consume them and
2063
- // maybe decompress the next 5 bytes in the stream.
2064
- grpc_slice_buffer_move_first(
2065
- &s->frame_storage,
2066
- std::min(s->frame_storage.length, size_t(GRPC_HEADER_SIZE_IN_BYTES)),
2067
- &s->unprocessed_incoming_frames_buffer);
2068
- if (s->unprocessed_incoming_frames_buffer.length > 0) {
2069
- pending_data = true;
2070
- }
2071
- }
2072
- if (s->read_closed && s->frame_storage.length == 0 && !pending_data &&
1989
+ if (s->read_closed && s->frame_storage.length == 0 &&
2073
1990
  s->recv_trailing_metadata_finished != nullptr) {
2074
1991
  grpc_transport_move_stats(&s->stats, s->collecting_stats);
2075
1992
  s->collecting_stats = nullptr;
@@ -2089,26 +2006,12 @@ static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
2089
2006
  t->incoming_stream = nullptr;
2090
2007
  grpc_chttp2_parsing_become_skip_parser(t);
2091
2008
  }
2092
- if (s->pending_byte_stream) {
2093
- if (s->on_next != nullptr) {
2094
- grpc_core::Chttp2IncomingByteStream* bs = s->data_parser.parsing_frame;
2095
- if (error == GRPC_ERROR_NONE) {
2096
- error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
2097
- }
2098
- bs->PublishError(error);
2099
- bs->Unref();
2100
- s->data_parser.parsing_frame = nullptr;
2101
- } else {
2102
- GRPC_ERROR_UNREF(s->byte_stream_error);
2103
- s->byte_stream_error = GRPC_ERROR_REF(error);
2104
- }
2105
- }
2106
2009
 
2107
2010
  if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
2108
2011
  post_benign_reclaimer(t);
2109
2012
  if (t->sent_goaway_state == GRPC_CHTTP2_FINAL_GOAWAY_SENT) {
2110
2013
  close_transport_locked(
2111
- t, GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
2014
+ t, GRPC_ERROR_CREATE_REFERENCING(
2112
2015
  "Last stream closed after sending GOAWAY", &error, 1));
2113
2016
  }
2114
2017
  }
@@ -2118,8 +2021,6 @@ static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
2118
2021
  grpc_chttp2_list_remove_stalled_by_stream(t, s);
2119
2022
  grpc_chttp2_list_remove_stalled_by_transport(t, s);
2120
2023
 
2121
- GRPC_ERROR_UNREF(error);
2122
-
2123
2024
  maybe_start_some_streams(t);
2124
2025
  }
2125
2026
 
@@ -2141,7 +2042,7 @@ void grpc_chttp2_cancel_stream(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2141
2042
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM);
2142
2043
  }
2143
2044
  }
2144
- if (due_to_error != GRPC_ERROR_NONE && !s->seen_error) {
2045
+ if (!due_to_error.ok() && !s->seen_error) {
2145
2046
  s->seen_error = true;
2146
2047
  }
2147
2048
  grpc_chttp2_mark_stream_closed(t, s, 1, 1, due_to_error);
@@ -2163,7 +2064,8 @@ void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2163
2064
  // what we want - which is safe because we haven't told anyone
2164
2065
  // about the metadata yet
2165
2066
  if (s->published_metadata[1] == GRPC_METADATA_NOT_PUBLISHED ||
2166
- s->recv_trailing_metadata_finished != nullptr) {
2067
+ s->recv_trailing_metadata_finished != nullptr ||
2068
+ !s->final_metadata_requested) {
2167
2069
  s->trailing_metadata_buffer.Set(grpc_core::GrpcStatusMetadata(), status);
2168
2070
  if (!message.empty()) {
2169
2071
  s->trailing_metadata_buffer.Set(
@@ -2173,13 +2075,11 @@ void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2173
2075
  s->published_metadata[1] = GRPC_METADATA_SYNTHESIZED_FROM_FAKE;
2174
2076
  grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
2175
2077
  }
2176
-
2177
- GRPC_ERROR_UNREF(error);
2178
2078
  }
2179
2079
 
2180
2080
  static void add_error(grpc_error_handle error, grpc_error_handle* refs,
2181
2081
  size_t* nrefs) {
2182
- if (error == GRPC_ERROR_NONE) return;
2082
+ if (error.ok()) return;
2183
2083
  for (size_t i = 0; i < *nrefs; i++) {
2184
2084
  if (error == refs[i]) {
2185
2085
  return;
@@ -2197,12 +2097,10 @@ static grpc_error_handle removal_error(grpc_error_handle extra_error,
2197
2097
  add_error(s->read_closed_error, refs, &nrefs);
2198
2098
  add_error(s->write_closed_error, refs, &nrefs);
2199
2099
  add_error(extra_error, refs, &nrefs);
2200
- grpc_error_handle error = GRPC_ERROR_NONE;
2100
+ grpc_error_handle error;
2201
2101
  if (nrefs > 0) {
2202
- error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(main_error_msg,
2203
- refs, nrefs);
2102
+ error = GRPC_ERROR_CREATE_REFERENCING(main_error_msg, refs, nrefs);
2204
2103
  }
2205
- GRPC_ERROR_UNREF(extra_error);
2206
2104
  return error;
2207
2105
  }
2208
2106
 
@@ -2212,12 +2110,11 @@ static void flush_write_list(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2212
2110
  while (*list) {
2213
2111
  grpc_chttp2_write_cb* cb = *list;
2214
2112
  *list = cb->next;
2215
- grpc_chttp2_complete_closure_step(t, s, &cb->closure, GRPC_ERROR_REF(error),
2113
+ grpc_chttp2_complete_closure_step(t, s, &cb->closure, error,
2216
2114
  "on_write_finished_cb");
2217
2115
  cb->next = t->write_cb_pool;
2218
2116
  t->write_cb_pool = cb;
2219
2117
  }
2220
- GRPC_ERROR_UNREF(error);
2221
2118
  }
2222
2119
 
2223
2120
  void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
@@ -2227,30 +2124,34 @@ void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
2227
2124
  removal_error(error, s, "Pending writes failed due to stream closure");
2228
2125
  s->send_initial_metadata = nullptr;
2229
2126
  grpc_chttp2_complete_closure_step(t, s, &s->send_initial_metadata_finished,
2230
- GRPC_ERROR_REF(error),
2231
- "send_initial_metadata_finished");
2127
+ error, "send_initial_metadata_finished");
2232
2128
 
2233
2129
  s->send_trailing_metadata = nullptr;
2234
2130
  s->sent_trailing_metadata_op = nullptr;
2235
2131
  grpc_chttp2_complete_closure_step(t, s, &s->send_trailing_metadata_finished,
2236
- GRPC_ERROR_REF(error),
2237
- "send_trailing_metadata_finished");
2132
+ error, "send_trailing_metadata_finished");
2238
2133
 
2239
- s->fetching_send_message.reset();
2240
- grpc_chttp2_complete_closure_step(t, s, &s->fetching_send_message_finished,
2241
- GRPC_ERROR_REF(error),
2134
+ grpc_chttp2_complete_closure_step(t, s, &s->send_message_finished, error,
2242
2135
  "fetching_send_message_finished");
2243
- flush_write_list(t, s, &s->on_write_finished_cbs, GRPC_ERROR_REF(error));
2136
+ flush_write_list(t, s, &s->on_write_finished_cbs, error);
2244
2137
  flush_write_list(t, s, &s->on_flow_controlled_cbs, error);
2245
2138
  }
2246
2139
 
2247
2140
  void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2248
2141
  grpc_chttp2_stream* s, int close_reads,
2249
2142
  int close_writes, grpc_error_handle error) {
2143
+ if (grpc_http_trace.enabled()) {
2144
+ gpr_log(
2145
+ GPR_DEBUG, "MARK_STREAM_CLOSED: t=%p s=%p(id=%d) %s [%s]", t, s, s->id,
2146
+ (close_reads && close_writes)
2147
+ ? "read+write"
2148
+ : (close_reads ? "read" : (close_writes ? "write" : "nothing??")),
2149
+ error.ToString().c_str());
2150
+ }
2250
2151
  if (s->read_closed && s->write_closed) {
2251
2152
  // already closed, but we should still fake the status if needed.
2252
2153
  grpc_error_handle overall_error = removal_error(error, s, "Stream removed");
2253
- if (overall_error != GRPC_ERROR_NONE) {
2154
+ if (!overall_error.ok()) {
2254
2155
  grpc_chttp2_fake_status(t, s, overall_error);
2255
2156
  }
2256
2157
  grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
@@ -2259,26 +2160,25 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2259
2160
  bool closed_read = false;
2260
2161
  bool became_closed = false;
2261
2162
  if (close_reads && !s->read_closed) {
2262
- s->read_closed_error = GRPC_ERROR_REF(error);
2163
+ s->read_closed_error = error;
2263
2164
  s->read_closed = true;
2264
2165
  closed_read = true;
2265
2166
  }
2266
2167
  if (close_writes && !s->write_closed) {
2267
- s->write_closed_error = GRPC_ERROR_REF(error);
2168
+ s->write_closed_error = error;
2268
2169
  s->write_closed = true;
2269
- grpc_chttp2_fail_pending_writes(t, s, GRPC_ERROR_REF(error));
2170
+ grpc_chttp2_fail_pending_writes(t, s, error);
2270
2171
  }
2271
2172
  if (s->read_closed && s->write_closed) {
2272
2173
  became_closed = true;
2273
- grpc_error_handle overall_error =
2274
- removal_error(GRPC_ERROR_REF(error), s, "Stream removed");
2174
+ grpc_error_handle overall_error = removal_error(error, s, "Stream removed");
2275
2175
  if (s->id != 0) {
2276
- remove_stream(t, s->id, GRPC_ERROR_REF(overall_error));
2176
+ remove_stream(t, s->id, overall_error);
2277
2177
  } else {
2278
2178
  // Purge streams waiting on concurrency still waiting for id assignment
2279
2179
  grpc_chttp2_list_remove_waiting_for_concurrency(t, s);
2280
2180
  }
2281
- if (overall_error != GRPC_ERROR_NONE) {
2181
+ if (!overall_error.ok()) {
2282
2182
  grpc_chttp2_fake_status(t, s, overall_error);
2283
2183
  }
2284
2184
  }
@@ -2292,10 +2192,11 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2292
2192
  grpc_chttp2_maybe_complete_recv_message(t, s);
2293
2193
  }
2294
2194
  if (became_closed) {
2195
+ s->stats.latency =
2196
+ gpr_time_sub(gpr_now(GPR_CLOCK_MONOTONIC), s->creation_time);
2295
2197
  grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
2296
2198
  GRPC_CHTTP2_STREAM_UNREF(s, "chttp2");
2297
2199
  }
2298
- GRPC_ERROR_UNREF(error);
2299
2200
  }
2300
2201
 
2301
2202
  static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
@@ -2378,8 +2279,8 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2378
2279
 
2379
2280
  status_hdr = GRPC_SLICE_MALLOC(15 + (grpc_status >= 10));
2380
2281
  p = GRPC_SLICE_START_PTR(status_hdr);
2381
- *p++ = 0x00; /* literal header, not indexed */
2382
- *p++ = 11; /* len(grpc-status) */
2282
+ *p++ = 0x00; // literal header, not indexed
2283
+ *p++ = 11; // len(grpc-status)
2383
2284
  *p++ = 'g';
2384
2285
  *p++ = 'r';
2385
2286
  *p++ = 'p';
@@ -2404,11 +2305,11 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2404
2305
 
2405
2306
  size_t msg_len = message.length();
2406
2307
  GPR_ASSERT(msg_len <= UINT32_MAX);
2407
- grpc_core::VarintWriter<1> msg_len_writer(msg_len);
2308
+ grpc_core::VarintWriter<1> msg_len_writer(static_cast<uint32_t>(msg_len));
2408
2309
  message_pfx = GRPC_SLICE_MALLOC(14 + msg_len_writer.length());
2409
2310
  p = GRPC_SLICE_START_PTR(message_pfx);
2410
- *p++ = 0x00; /* literal header, not indexed */
2411
- *p++ = 12; /* len(grpc-message) */
2311
+ *p++ = 0x00; // literal header, not indexed
2312
+ *p++ = 12; // len(grpc-message)
2412
2313
  *p++ = 'g';
2413
2314
  *p++ = 'r';
2414
2315
  *p++ = 'p';
@@ -2465,7 +2366,7 @@ struct cancel_stream_cb_args {
2465
2366
  static void cancel_stream_cb(void* user_data, uint32_t /*key*/, void* stream) {
2466
2367
  cancel_stream_cb_args* args = static_cast<cancel_stream_cb_args*>(user_data);
2467
2368
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(stream);
2468
- grpc_chttp2_cancel_stream(args->t, s, GRPC_ERROR_REF(args->error));
2369
+ grpc_chttp2_cancel_stream(args->t, s, args->error);
2469
2370
  }
2470
2371
 
2471
2372
  static void end_all_the_calls(grpc_chttp2_transport* t,
@@ -2473,14 +2374,14 @@ static void end_all_the_calls(grpc_chttp2_transport* t,
2473
2374
  intptr_t http2_error;
2474
2375
  // If there is no explicit grpc or HTTP/2 error, set to UNAVAILABLE on server.
2475
2376
  if (!t->is_client && !grpc_error_has_clear_grpc_status(error) &&
2476
- !grpc_error_get_int(error, GRPC_ERROR_INT_HTTP2_ERROR, &http2_error)) {
2477
- error = grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS,
2377
+ !grpc_error_get_int(error, grpc_core::StatusIntProperty::kHttp2Error,
2378
+ &http2_error)) {
2379
+ error = grpc_error_set_int(error, grpc_core::StatusIntProperty::kRpcStatus,
2478
2380
  GRPC_STATUS_UNAVAILABLE);
2479
2381
  }
2480
- cancel_unstarted_streams(t, GRPC_ERROR_REF(error));
2382
+ cancel_unstarted_streams(t, error);
2481
2383
  cancel_stream_cb_args args = {error, t};
2482
2384
  grpc_chttp2_stream_map_for_each(&t->stream_map, cancel_stream_cb, &args);
2483
- GRPC_ERROR_UNREF(error);
2484
2385
  }
2485
2386
 
2486
2387
  //
@@ -2507,8 +2408,11 @@ void grpc_chttp2_act_on_flowctl_action(
2507
2408
  const grpc_core::chttp2::FlowControlAction& action,
2508
2409
  grpc_chttp2_transport* t, grpc_chttp2_stream* s) {
2509
2410
  WithUrgency(t, action.send_stream_update(),
2510
- GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL,
2511
- [t, s]() { grpc_chttp2_mark_stream_writable(t, s); });
2411
+ GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL, [t, s]() {
2412
+ if (s->id != 0 && !s->read_closed) {
2413
+ grpc_chttp2_mark_stream_writable(t, s);
2414
+ }
2415
+ });
2512
2416
  WithUrgency(t, action.send_transport_update(),
2513
2417
  GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL, []() {});
2514
2418
  WithUrgency(t, action.send_initial_window_update(),
@@ -2522,31 +2426,39 @@ void grpc_chttp2_act_on_flowctl_action(
2522
2426
  queue_setting_update(t, GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
2523
2427
  action.max_frame_size());
2524
2428
  });
2429
+ if (t->enable_preferred_rx_crypto_frame_advertisement) {
2430
+ WithUrgency(
2431
+ t, action.preferred_rx_crypto_frame_size_update(),
2432
+ GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS, [t, &action]() {
2433
+ queue_setting_update(
2434
+ t, GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE,
2435
+ action.preferred_rx_crypto_frame_size());
2436
+ });
2437
+ }
2525
2438
  }
2526
2439
 
2527
2440
  static grpc_error_handle try_http_parsing(grpc_chttp2_transport* t) {
2528
2441
  grpc_http_parser parser;
2529
2442
  size_t i = 0;
2530
- grpc_error_handle error = GRPC_ERROR_NONE;
2443
+ grpc_error_handle error;
2531
2444
  grpc_http_response response;
2532
2445
 
2533
2446
  grpc_http_parser_init(&parser, GRPC_HTTP_RESPONSE, &response);
2534
2447
 
2535
- grpc_error_handle parse_error = GRPC_ERROR_NONE;
2536
- for (; i < t->read_buffer.count && parse_error == GRPC_ERROR_NONE; i++) {
2448
+ grpc_error_handle parse_error;
2449
+ for (; i < t->read_buffer.count && parse_error.ok(); i++) {
2537
2450
  parse_error =
2538
2451
  grpc_http_parser_parse(&parser, t->read_buffer.slices[i], nullptr);
2539
2452
  }
2540
- if (parse_error == GRPC_ERROR_NONE &&
2541
- (parse_error = grpc_http_parser_eof(&parser)) == GRPC_ERROR_NONE) {
2453
+ if (parse_error.ok() &&
2454
+ (parse_error = grpc_http_parser_eof(&parser)) == absl::OkStatus()) {
2542
2455
  error = grpc_error_set_int(
2543
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2544
- "Trying to connect an http1.x server"),
2545
- GRPC_ERROR_INT_HTTP_STATUS, response.status),
2546
- GRPC_ERROR_INT_GRPC_STATUS,
2456
+ grpc_error_set_int(
2457
+ GRPC_ERROR_CREATE("Trying to connect an http1.x server"),
2458
+ grpc_core::StatusIntProperty::kHttpStatus, response.status),
2459
+ grpc_core::StatusIntProperty::kRpcStatus,
2547
2460
  grpc_http2_status_to_grpc_status(response.status));
2548
2461
  }
2549
- GRPC_ERROR_UNREF(parse_error);
2550
2462
 
2551
2463
  grpc_http_parser_destroy(&parser);
2552
2464
  grpc_http_response_destroy(&response);
@@ -2557,44 +2469,31 @@ static void read_action(void* tp, grpc_error_handle error) {
2557
2469
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2558
2470
  t->combiner->Run(
2559
2471
  GRPC_CLOSURE_INIT(&t->read_action_locked, read_action_locked, t, nullptr),
2560
- GRPC_ERROR_REF(error));
2472
+ error);
2561
2473
  }
2562
2474
 
2563
2475
  static void read_action_locked(void* tp, grpc_error_handle error) {
2564
- GPR_TIMER_SCOPE("reading_action_locked", 0);
2565
-
2566
2476
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2567
2477
 
2568
- (void)GRPC_ERROR_REF(error);
2569
-
2570
2478
  grpc_error_handle err = error;
2571
- if (err != GRPC_ERROR_NONE) {
2572
- err = grpc_error_set_int(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
2573
- "Endpoint read failed", &err, 1),
2574
- GRPC_ERROR_INT_OCCURRED_DURING_WRITE,
2575
- t->write_state);
2479
+ if (!err.ok()) {
2480
+ err = grpc_error_set_int(
2481
+ GRPC_ERROR_CREATE_REFERENCING("Endpoint read failed", &err, 1),
2482
+ grpc_core::StatusIntProperty::kOccurredDuringWrite, t->write_state);
2576
2483
  }
2577
2484
  std::swap(err, error);
2578
- GRPC_ERROR_UNREF(err);
2579
- if (t->closed_with_error == GRPC_ERROR_NONE) {
2580
- GPR_TIMER_SCOPE("reading_action.parse", 0);
2485
+ if (t->closed_with_error.ok()) {
2581
2486
  size_t i = 0;
2582
- grpc_error_handle errors[3] = {GRPC_ERROR_REF(error), GRPC_ERROR_NONE,
2583
- GRPC_ERROR_NONE};
2584
- for (; i < t->read_buffer.count && errors[1] == GRPC_ERROR_NONE; i++) {
2487
+ grpc_error_handle errors[3] = {error, absl::OkStatus(), absl::OkStatus()};
2488
+ for (; i < t->read_buffer.count && errors[1] == absl::OkStatus(); i++) {
2585
2489
  errors[1] = grpc_chttp2_perform_read(t, t->read_buffer.slices[i]);
2586
2490
  }
2587
- if (errors[1] != GRPC_ERROR_NONE) {
2491
+ if (errors[1] != absl::OkStatus()) {
2588
2492
  errors[2] = try_http_parsing(t);
2589
- GRPC_ERROR_UNREF(error);
2590
- error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
2591
- "Failed parsing HTTP/2", errors, GPR_ARRAY_SIZE(errors));
2592
- }
2593
- for (i = 0; i < GPR_ARRAY_SIZE(errors); i++) {
2594
- GRPC_ERROR_UNREF(errors[i]);
2493
+ error = GRPC_ERROR_CREATE_REFERENCING("Failed parsing HTTP/2", errors,
2494
+ GPR_ARRAY_SIZE(errors));
2595
2495
  }
2596
2496
 
2597
- GPR_TIMER_SCOPE("post_parse_locked", 0);
2598
2497
  if (t->initial_window_update != 0) {
2599
2498
  if (t->initial_window_update > 0) {
2600
2499
  grpc_chttp2_stream* s;
@@ -2608,29 +2507,28 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
2608
2507
  }
2609
2508
  }
2610
2509
 
2611
- GPR_TIMER_SCOPE("post_reading_action_locked", 0);
2612
2510
  bool keep_reading = false;
2613
- if (error == GRPC_ERROR_NONE && t->closed_with_error != GRPC_ERROR_NONE) {
2614
- error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
2615
- "Transport closed", &t->closed_with_error, 1);
2511
+ if (error.ok() && !t->closed_with_error.ok()) {
2512
+ error = GRPC_ERROR_CREATE_REFERENCING("Transport closed",
2513
+ &t->closed_with_error, 1);
2616
2514
  }
2617
- if (error != GRPC_ERROR_NONE) {
2515
+ if (!error.ok()) {
2618
2516
  // If a goaway frame was received, this might be the reason why the read
2619
2517
  // failed. Add this info to the error
2620
- if (t->goaway_error != GRPC_ERROR_NONE) {
2621
- error = grpc_error_add_child(error, GRPC_ERROR_REF(t->goaway_error));
2518
+ if (!t->goaway_error.ok()) {
2519
+ error = grpc_error_add_child(error, t->goaway_error);
2622
2520
  }
2623
2521
 
2624
- close_transport_locked(t, GRPC_ERROR_REF(error));
2522
+ close_transport_locked(t, error);
2625
2523
  t->endpoint_reading = 0;
2626
- } else if (t->closed_with_error == GRPC_ERROR_NONE) {
2524
+ } else if (t->closed_with_error.ok()) {
2627
2525
  keep_reading = true;
2628
2526
  // Since we have read a byte, reset the keepalive timer
2629
2527
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
2630
- grpc_timer_cancel(&t->keepalive_ping_timer);
2528
+ maybe_reset_keepalive_ping_timer_locked(t);
2631
2529
  }
2632
2530
  }
2633
- grpc_slice_buffer_reset_and_unref_internal(&t->read_buffer);
2531
+ grpc_slice_buffer_reset_and_unref(&t->read_buffer);
2634
2532
 
2635
2533
  if (keep_reading) {
2636
2534
  if (t->num_pending_induced_frames >= DEFAULT_MAX_PENDING_INDUCED_FRAMES) {
@@ -2646,22 +2544,20 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
2646
2544
  } else {
2647
2545
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "reading_action");
2648
2546
  }
2649
-
2650
- GRPC_ERROR_UNREF(error);
2651
2547
  }
2652
2548
 
2653
2549
  static void continue_read_action_locked(grpc_chttp2_transport* t) {
2654
- const bool urgent = t->goaway_error != GRPC_ERROR_NONE;
2550
+ const bool urgent = !t->goaway_error.ok();
2655
2551
  GRPC_CLOSURE_INIT(&t->read_action_locked, read_action, t,
2656
2552
  grpc_schedule_on_exec_ctx);
2657
- grpc_endpoint_read(t->ep, &t->read_buffer, &t->read_action_locked, urgent);
2658
- grpc_chttp2_act_on_flowctl_action(t->flow_control->MakeAction(), t, nullptr);
2553
+ grpc_endpoint_read(t->ep, &t->read_buffer, &t->read_action_locked, urgent,
2554
+ grpc_chttp2_min_read_progress_size(t));
2659
2555
  }
2660
2556
 
2661
2557
  // t is reffed prior to calling the first time, and once the callback chain
2662
2558
  // that kicks off finishes, it's unreffed
2663
2559
  void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
2664
- t->flow_control->bdp_estimator()->SchedulePing();
2560
+ t->flow_control.bdp_estimator()->SchedulePing();
2665
2561
  send_ping_locked(
2666
2562
  t,
2667
2563
  GRPC_CLOSURE_INIT(&t->start_bdp_ping_locked, start_bdp_ping, t,
@@ -2675,23 +2571,23 @@ static void start_bdp_ping(void* tp, grpc_error_handle error) {
2675
2571
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2676
2572
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_bdp_ping_locked,
2677
2573
  start_bdp_ping_locked, t, nullptr),
2678
- GRPC_ERROR_REF(error));
2574
+ error);
2679
2575
  }
2680
2576
 
2681
2577
  static void start_bdp_ping_locked(void* tp, grpc_error_handle error) {
2682
2578
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2683
2579
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
2684
2580
  gpr_log(GPR_INFO, "%s: Start BDP ping err=%s", t->peer_string.c_str(),
2685
- grpc_error_std_string(error).c_str());
2581
+ grpc_core::StatusToString(error).c_str());
2686
2582
  }
2687
- if (error != GRPC_ERROR_NONE || t->closed_with_error != GRPC_ERROR_NONE) {
2583
+ if (!error.ok() || !t->closed_with_error.ok()) {
2688
2584
  return;
2689
2585
  }
2690
2586
  // Reset the keepalive ping timer
2691
2587
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
2692
- grpc_timer_cancel(&t->keepalive_ping_timer);
2588
+ maybe_reset_keepalive_ping_timer_locked(t);
2693
2589
  }
2694
- t->flow_control->bdp_estimator()->StartPing();
2590
+ t->flow_control.bdp_estimator()->StartPing();
2695
2591
  t->bdp_ping_started = true;
2696
2592
  }
2697
2593
 
@@ -2699,16 +2595,16 @@ static void finish_bdp_ping(void* tp, grpc_error_handle error) {
2699
2595
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2700
2596
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked,
2701
2597
  finish_bdp_ping_locked, t, nullptr),
2702
- GRPC_ERROR_REF(error));
2598
+ error);
2703
2599
  }
2704
2600
 
2705
2601
  static void finish_bdp_ping_locked(void* tp, grpc_error_handle error) {
2706
2602
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2707
2603
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
2708
2604
  gpr_log(GPR_INFO, "%s: Complete BDP ping err=%s", t->peer_string.c_str(),
2709
- grpc_error_std_string(error).c_str());
2605
+ grpc_core::StatusToString(error).c_str());
2710
2606
  }
2711
- if (error != GRPC_ERROR_NONE || t->closed_with_error != GRPC_ERROR_NONE) {
2607
+ if (!error.ok() || !t->closed_with_error.ok()) {
2712
2608
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
2713
2609
  return;
2714
2610
  }
@@ -2717,40 +2613,37 @@ static void finish_bdp_ping_locked(void* tp, grpc_error_handle error) {
2717
2613
  // finish_bdp_ping_locked to be run later.
2718
2614
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked,
2719
2615
  finish_bdp_ping_locked, t, nullptr),
2720
- GRPC_ERROR_REF(error));
2616
+ error);
2721
2617
  return;
2722
2618
  }
2723
2619
  t->bdp_ping_started = false;
2724
2620
  grpc_core::Timestamp next_ping =
2725
- t->flow_control->bdp_estimator()->CompletePing();
2726
- grpc_chttp2_act_on_flowctl_action(t->flow_control->PeriodicUpdate(), t,
2621
+ t->flow_control.bdp_estimator()->CompletePing();
2622
+ grpc_chttp2_act_on_flowctl_action(t->flow_control.PeriodicUpdate(), t,
2727
2623
  nullptr);
2728
- GPR_ASSERT(!t->have_next_bdp_ping_timer);
2729
- t->have_next_bdp_ping_timer = true;
2730
- GRPC_CLOSURE_INIT(&t->next_bdp_ping_timer_expired_locked,
2731
- next_bdp_ping_timer_expired, t, grpc_schedule_on_exec_ctx);
2732
- grpc_timer_init(&t->next_bdp_ping_timer, next_ping,
2733
- &t->next_bdp_ping_timer_expired_locked);
2624
+ GPR_ASSERT(!t->next_bdp_ping_timer_handle.has_value());
2625
+ t->next_bdp_ping_timer_handle =
2626
+ t->event_engine->RunAfter(next_ping - grpc_core::Timestamp::Now(), [t] {
2627
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
2628
+ grpc_core::ExecCtx exec_ctx;
2629
+ next_bdp_ping_timer_expired(t);
2630
+ });
2734
2631
  }
2735
2632
 
2736
- static void next_bdp_ping_timer_expired(void* tp, grpc_error_handle error) {
2737
- grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2633
+ static void next_bdp_ping_timer_expired(grpc_chttp2_transport* t) {
2738
2634
  t->combiner->Run(
2739
2635
  GRPC_CLOSURE_INIT(&t->next_bdp_ping_timer_expired_locked,
2740
2636
  next_bdp_ping_timer_expired_locked, t, nullptr),
2741
- GRPC_ERROR_REF(error));
2637
+ absl::OkStatus());
2742
2638
  }
2743
2639
 
2744
- static void next_bdp_ping_timer_expired_locked(void* tp,
2745
- grpc_error_handle error) {
2640
+ static void next_bdp_ping_timer_expired_locked(
2641
+ void* tp, GRPC_UNUSED grpc_error_handle error) {
2642
+ GPR_DEBUG_ASSERT(error.ok());
2746
2643
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2747
- GPR_ASSERT(t->have_next_bdp_ping_timer);
2748
- t->have_next_bdp_ping_timer = false;
2749
- if (error != GRPC_ERROR_NONE) {
2750
- GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
2751
- return;
2752
- }
2753
- if (t->flow_control->bdp_estimator()->accumulator() == 0) {
2644
+ GPR_ASSERT(t->next_bdp_ping_timer_handle.has_value());
2645
+ t->next_bdp_ping_timer_handle.reset();
2646
+ if (t->flow_control.bdp_estimator()->accumulator() == 0) {
2754
2647
  // Block the bdp ping till we receive more data.
2755
2648
  t->bdp_ping_blocked = true;
2756
2649
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
@@ -2818,42 +2711,37 @@ void grpc_chttp2_config_default_keepalive_args(grpc_channel_args* args,
2818
2711
  }
2819
2712
  }
2820
2713
 
2821
- static void init_keepalive_ping(void* arg, grpc_error_handle error) {
2822
- grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2714
+ static void init_keepalive_ping(grpc_chttp2_transport* t) {
2823
2715
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->init_keepalive_ping_locked,
2824
2716
  init_keepalive_ping_locked, t, nullptr),
2825
- GRPC_ERROR_REF(error));
2717
+ absl::OkStatus());
2826
2718
  }
2827
2719
 
2828
- static void init_keepalive_ping_locked(void* arg, grpc_error_handle error) {
2720
+ static void init_keepalive_ping_locked(void* arg,
2721
+ GRPC_UNUSED grpc_error_handle error) {
2722
+ GPR_DEBUG_ASSERT(error.ok());
2829
2723
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2830
2724
  GPR_ASSERT(t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING);
2831
- if (t->destroying || t->closed_with_error != GRPC_ERROR_NONE) {
2725
+ GPR_ASSERT(t->keepalive_ping_timer_handle.has_value());
2726
+ t->keepalive_ping_timer_handle.reset();
2727
+ if (t->destroying || !t->closed_with_error.ok()) {
2832
2728
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
2833
- } else if (error == GRPC_ERROR_NONE) {
2729
+ } else {
2834
2730
  if (t->keepalive_permit_without_calls ||
2835
2731
  grpc_chttp2_stream_map_size(&t->stream_map) > 0) {
2836
2732
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_PINGING;
2837
2733
  GRPC_CHTTP2_REF_TRANSPORT(t, "keepalive ping end");
2838
- grpc_timer_init_unset(&t->keepalive_watchdog_timer);
2839
2734
  send_keepalive_ping_locked(t);
2840
2735
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_KEEPALIVE_PING);
2841
2736
  } else {
2842
2737
  GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
2843
- GRPC_CLOSURE_INIT(&t->init_keepalive_ping_locked, init_keepalive_ping, t,
2844
- grpc_schedule_on_exec_ctx);
2845
- grpc_timer_init(&t->keepalive_ping_timer,
2846
- grpc_core::ExecCtx::Get()->Now() + t->keepalive_time,
2847
- &t->init_keepalive_ping_locked);
2848
- }
2849
- } else if (error == GRPC_ERROR_CANCELLED) {
2850
- // The keepalive ping timer may be cancelled by bdp
2851
- GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
2852
- GRPC_CLOSURE_INIT(&t->init_keepalive_ping_locked, init_keepalive_ping, t,
2853
- grpc_schedule_on_exec_ctx);
2854
- grpc_timer_init(&t->keepalive_ping_timer,
2855
- grpc_core::ExecCtx::Get()->Now() + t->keepalive_time,
2856
- &t->init_keepalive_ping_locked);
2738
+ t->keepalive_ping_timer_handle =
2739
+ t->event_engine->RunAfter(t->keepalive_time, [t] {
2740
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
2741
+ grpc_core::ExecCtx exec_ctx;
2742
+ init_keepalive_ping(t);
2743
+ });
2744
+ }
2857
2745
  }
2858
2746
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "init keepalive ping");
2859
2747
  }
@@ -2862,12 +2750,12 @@ static void start_keepalive_ping(void* arg, grpc_error_handle error) {
2862
2750
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2863
2751
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
2864
2752
  start_keepalive_ping_locked, t, nullptr),
2865
- GRPC_ERROR_REF(error));
2753
+ error);
2866
2754
  }
2867
2755
 
2868
2756
  static void start_keepalive_ping_locked(void* arg, grpc_error_handle error) {
2869
2757
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2870
- if (error != GRPC_ERROR_NONE) {
2758
+ if (!error.ok()) {
2871
2759
  return;
2872
2760
  }
2873
2761
  if (t->channelz_socket != nullptr) {
@@ -2878,11 +2766,12 @@ static void start_keepalive_ping_locked(void* arg, grpc_error_handle error) {
2878
2766
  gpr_log(GPR_INFO, "%s: Start keepalive ping", t->peer_string.c_str());
2879
2767
  }
2880
2768
  GRPC_CHTTP2_REF_TRANSPORT(t, "keepalive watchdog");
2881
- GRPC_CLOSURE_INIT(&t->keepalive_watchdog_fired_locked,
2882
- keepalive_watchdog_fired, t, grpc_schedule_on_exec_ctx);
2883
- grpc_timer_init(&t->keepalive_watchdog_timer,
2884
- grpc_core::ExecCtx::Get()->Now() + t->keepalive_timeout,
2885
- &t->keepalive_watchdog_fired_locked);
2769
+ t->keepalive_watchdog_timer_handle =
2770
+ t->event_engine->RunAfter(t->keepalive_timeout, [t] {
2771
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
2772
+ grpc_core::ExecCtx exec_ctx;
2773
+ keepalive_watchdog_fired(t);
2774
+ });
2886
2775
  t->keepalive_ping_started = true;
2887
2776
  }
2888
2777
 
@@ -2890,13 +2779,13 @@ static void finish_keepalive_ping(void* arg, grpc_error_handle error) {
2890
2779
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2891
2780
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
2892
2781
  finish_keepalive_ping_locked, t, nullptr),
2893
- GRPC_ERROR_REF(error));
2782
+ error);
2894
2783
  }
2895
2784
 
2896
2785
  static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error) {
2897
2786
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2898
2787
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
2899
- if (error == GRPC_ERROR_NONE) {
2788
+ if (error.ok()) {
2900
2789
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
2901
2790
  GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
2902
2791
  gpr_log(GPR_INFO, "%s: Finish keepalive ping", t->peer_string.c_str());
@@ -2907,56 +2796,81 @@ static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error) {
2907
2796
  t->combiner->Run(
2908
2797
  GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
2909
2798
  finish_keepalive_ping_locked, t, nullptr),
2910
- GRPC_ERROR_REF(error));
2799
+ error);
2911
2800
  return;
2912
2801
  }
2913
2802
  t->keepalive_ping_started = false;
2914
2803
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_WAITING;
2915
- grpc_timer_cancel(&t->keepalive_watchdog_timer);
2804
+ if (t->keepalive_watchdog_timer_handle.has_value()) {
2805
+ if (t->event_engine->Cancel(*t->keepalive_watchdog_timer_handle)) {
2806
+ GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive watchdog");
2807
+ t->keepalive_watchdog_timer_handle.reset();
2808
+ }
2809
+ }
2810
+ GPR_ASSERT(!t->keepalive_ping_timer_handle.has_value());
2916
2811
  GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
2917
- GRPC_CLOSURE_INIT(&t->init_keepalive_ping_locked, init_keepalive_ping, t,
2918
- grpc_schedule_on_exec_ctx);
2919
- grpc_timer_init(&t->keepalive_ping_timer,
2920
- grpc_core::ExecCtx::Get()->Now() + t->keepalive_time,
2921
- &t->init_keepalive_ping_locked);
2812
+ t->keepalive_ping_timer_handle =
2813
+ t->event_engine->RunAfter(t->keepalive_time, [t] {
2814
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
2815
+ grpc_core::ExecCtx exec_ctx;
2816
+ init_keepalive_ping(t);
2817
+ });
2922
2818
  }
2923
2819
  }
2924
2820
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive ping end");
2925
2821
  }
2926
2822
 
2927
- static void keepalive_watchdog_fired(void* arg, grpc_error_handle error) {
2928
- grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2823
+ static void keepalive_watchdog_fired(grpc_chttp2_transport* t) {
2929
2824
  t->combiner->Run(
2930
2825
  GRPC_CLOSURE_INIT(&t->keepalive_watchdog_fired_locked,
2931
2826
  keepalive_watchdog_fired_locked, t, nullptr),
2932
- GRPC_ERROR_REF(error));
2827
+ absl::OkStatus());
2933
2828
  }
2934
2829
 
2935
- static void keepalive_watchdog_fired_locked(void* arg,
2936
- grpc_error_handle error) {
2830
+ static void keepalive_watchdog_fired_locked(
2831
+ void* arg, GRPC_UNUSED grpc_error_handle error) {
2832
+ GPR_DEBUG_ASSERT(error.ok());
2937
2833
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2834
+ GPR_ASSERT(t->keepalive_watchdog_timer_handle.has_value());
2835
+ t->keepalive_watchdog_timer_handle.reset();
2938
2836
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
2939
- if (error == GRPC_ERROR_NONE) {
2940
- gpr_log(GPR_INFO, "%s: Keepalive watchdog fired. Closing transport.",
2941
- t->peer_string.c_str());
2942
- t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
2943
- close_transport_locked(
2944
- t, grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2945
- "keepalive watchdog timeout"),
2946
- GRPC_ERROR_INT_GRPC_STATUS,
2947
- GRPC_STATUS_UNAVAILABLE));
2948
- }
2837
+ gpr_log(GPR_INFO, "%s: Keepalive watchdog fired. Closing transport.",
2838
+ t->peer_string.c_str());
2839
+ t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
2840
+ close_transport_locked(
2841
+ t, grpc_error_set_int(GRPC_ERROR_CREATE("keepalive watchdog timeout"),
2842
+ grpc_core::StatusIntProperty::kRpcStatus,
2843
+ GRPC_STATUS_UNAVAILABLE));
2949
2844
  } else {
2950
- // The watchdog timer should have been cancelled by
2951
- // finish_keepalive_ping_locked.
2952
- if (GPR_UNLIKELY(error != GRPC_ERROR_CANCELLED)) {
2953
- gpr_log(GPR_ERROR, "keepalive_ping_end state error: %d (expect: %d)",
2954
- t->keepalive_state, GRPC_CHTTP2_KEEPALIVE_STATE_PINGING);
2955
- }
2845
+ // If keepalive_state is not PINGING, we consider it as an error. Maybe the
2846
+ // cancellation failed in finish_keepalive_ping_locked. Users have seen
2847
+ // other states: https://github.com/grpc/grpc/issues/32085.
2848
+ gpr_log(GPR_ERROR, "keepalive_ping_end state error: %d (expect: %d)",
2849
+ t->keepalive_state, GRPC_CHTTP2_KEEPALIVE_STATE_PINGING);
2956
2850
  }
2957
2851
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive watchdog");
2958
2852
  }
2959
2853
 
2854
+ static void maybe_reset_keepalive_ping_timer_locked(grpc_chttp2_transport* t) {
2855
+ if (t->keepalive_ping_timer_handle.has_value()) {
2856
+ if (t->event_engine->Cancel(*t->keepalive_ping_timer_handle)) {
2857
+ // Cancel succeeds, resets the keepalive ping timer. Note that we don't
2858
+ // need to Ref or Unref here since we still hold the Ref.
2859
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
2860
+ GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
2861
+ gpr_log(GPR_INFO, "%s: Keepalive ping cancelled. Resetting timer.",
2862
+ t->peer_string.c_str());
2863
+ }
2864
+ t->keepalive_ping_timer_handle =
2865
+ t->event_engine->RunAfter(t->keepalive_time, [t] {
2866
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
2867
+ grpc_core::ExecCtx exec_ctx;
2868
+ init_keepalive_ping(t);
2869
+ });
2870
+ }
2871
+ }
2872
+ }
2873
+
2960
2874
  //
2961
2875
  // CALLBACK LOOP
2962
2876
  //
@@ -2986,187 +2900,6 @@ static void set_pollset_set(grpc_transport* gt, grpc_stream* /*gs*/,
2986
2900
  grpc_endpoint_add_to_pollset_set(t->ep, pollset_set);
2987
2901
  }
2988
2902
 
2989
- //
2990
- // BYTE STREAM
2991
- //
2992
-
2993
- static void reset_byte_stream(void* arg, grpc_error_handle error) {
2994
- grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(arg);
2995
- s->pending_byte_stream = false;
2996
- if (error == GRPC_ERROR_NONE) {
2997
- grpc_chttp2_maybe_complete_recv_message(s->t, s);
2998
- grpc_chttp2_maybe_complete_recv_trailing_metadata(s->t, s);
2999
- } else {
3000
- GPR_ASSERT(error != GRPC_ERROR_NONE);
3001
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, s->on_next, GRPC_ERROR_REF(error));
3002
- s->on_next = nullptr;
3003
- GRPC_ERROR_UNREF(s->byte_stream_error);
3004
- s->byte_stream_error = GRPC_ERROR_NONE;
3005
- grpc_chttp2_cancel_stream(s->t, s, GRPC_ERROR_REF(error));
3006
- s->byte_stream_error = GRPC_ERROR_REF(error);
3007
- }
3008
- }
3009
-
3010
- namespace grpc_core {
3011
-
3012
- Chttp2IncomingByteStream::Chttp2IncomingByteStream(
3013
- grpc_chttp2_transport* transport, grpc_chttp2_stream* stream,
3014
- uint32_t frame_size, uint32_t flags)
3015
- : ByteStream(frame_size, flags),
3016
- transport_(transport),
3017
- stream_(stream),
3018
- refs_(2),
3019
- remaining_bytes_(frame_size) {
3020
- GRPC_ERROR_UNREF(stream->byte_stream_error);
3021
- stream->byte_stream_error = GRPC_ERROR_NONE;
3022
- }
3023
-
3024
- void Chttp2IncomingByteStream::OrphanLocked(
3025
- void* arg, grpc_error_handle /*error_ignored*/) {
3026
- Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
3027
- grpc_chttp2_stream* s = bs->stream_;
3028
- grpc_chttp2_transport* t = s->t;
3029
- bs->Unref();
3030
- s->pending_byte_stream = false;
3031
- grpc_chttp2_maybe_complete_recv_message(t, s);
3032
- grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
3033
- }
3034
-
3035
- void Chttp2IncomingByteStream::Orphan() {
3036
- GPR_TIMER_SCOPE("incoming_byte_stream_destroy", 0);
3037
- transport_->combiner->Run(
3038
- GRPC_CLOSURE_INIT(&destroy_action_,
3039
- &Chttp2IncomingByteStream::OrphanLocked, this, nullptr),
3040
- GRPC_ERROR_NONE);
3041
- }
3042
-
3043
- void Chttp2IncomingByteStream::NextLocked(void* arg,
3044
- grpc_error_handle /*error_ignored*/) {
3045
- Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
3046
- grpc_chttp2_transport* t = bs->transport_;
3047
- grpc_chttp2_stream* s = bs->stream_;
3048
- size_t cur_length = s->frame_storage.length;
3049
- if (!s->read_closed) {
3050
- s->flow_control->IncomingByteStreamUpdate(bs->next_action_.max_size_hint,
3051
- cur_length);
3052
- grpc_chttp2_act_on_flowctl_action(s->flow_control->MakeAction(), t, s);
3053
- }
3054
- GPR_ASSERT(s->unprocessed_incoming_frames_buffer.length == 0);
3055
- if (s->frame_storage.length > 0) {
3056
- grpc_slice_buffer_swap(&s->frame_storage,
3057
- &s->unprocessed_incoming_frames_buffer);
3058
- ExecCtx::Run(DEBUG_LOCATION, bs->next_action_.on_complete, GRPC_ERROR_NONE);
3059
- } else if (s->byte_stream_error != GRPC_ERROR_NONE) {
3060
- ExecCtx::Run(DEBUG_LOCATION, bs->next_action_.on_complete,
3061
- GRPC_ERROR_REF(s->byte_stream_error));
3062
- if (s->data_parser.parsing_frame != nullptr) {
3063
- s->data_parser.parsing_frame->Unref();
3064
- s->data_parser.parsing_frame = nullptr;
3065
- }
3066
- } else if (s->read_closed) {
3067
- if (bs->remaining_bytes_ != 0) {
3068
- s->byte_stream_error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
3069
- "Truncated message", &s->read_closed_error, 1);
3070
- ExecCtx::Run(DEBUG_LOCATION, bs->next_action_.on_complete,
3071
- GRPC_ERROR_REF(s->byte_stream_error));
3072
- if (s->data_parser.parsing_frame != nullptr) {
3073
- s->data_parser.parsing_frame->Unref();
3074
- s->data_parser.parsing_frame = nullptr;
3075
- }
3076
- } else {
3077
- // Should never reach here.
3078
- GPR_ASSERT(false);
3079
- }
3080
- } else {
3081
- s->on_next = bs->next_action_.on_complete;
3082
- }
3083
- bs->Unref();
3084
- }
3085
-
3086
- bool Chttp2IncomingByteStream::Next(size_t max_size_hint,
3087
- grpc_closure* on_complete) {
3088
- GPR_TIMER_SCOPE("incoming_byte_stream_next", 0);
3089
- if (stream_->unprocessed_incoming_frames_buffer.length > 0) {
3090
- return true;
3091
- } else {
3092
- Ref();
3093
- next_action_.max_size_hint = max_size_hint;
3094
- next_action_.on_complete = on_complete;
3095
- transport_->combiner->Run(
3096
- GRPC_CLOSURE_INIT(&next_action_.closure,
3097
- &Chttp2IncomingByteStream::NextLocked, this, nullptr),
3098
- GRPC_ERROR_NONE);
3099
- return false;
3100
- }
3101
- }
3102
-
3103
- grpc_error_handle Chttp2IncomingByteStream::Pull(grpc_slice* slice) {
3104
- GPR_TIMER_SCOPE("incoming_byte_stream_pull", 0);
3105
- grpc_error_handle error;
3106
- if (stream_->unprocessed_incoming_frames_buffer.length > 0) {
3107
- error = grpc_deframe_unprocessed_incoming_frames(
3108
- &stream_->data_parser, stream_,
3109
- &stream_->unprocessed_incoming_frames_buffer, slice, nullptr);
3110
- if (error != GRPC_ERROR_NONE) {
3111
- return error;
3112
- }
3113
- } else {
3114
- error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
3115
- stream_->t->combiner->Run(&stream_->reset_byte_stream,
3116
- GRPC_ERROR_REF(error));
3117
- return error;
3118
- }
3119
- return GRPC_ERROR_NONE;
3120
- }
3121
-
3122
- void Chttp2IncomingByteStream::PublishError(grpc_error_handle error) {
3123
- GPR_ASSERT(error != GRPC_ERROR_NONE);
3124
- ExecCtx::Run(DEBUG_LOCATION, stream_->on_next, GRPC_ERROR_REF(error));
3125
- stream_->on_next = nullptr;
3126
- GRPC_ERROR_UNREF(stream_->byte_stream_error);
3127
- stream_->byte_stream_error = GRPC_ERROR_REF(error);
3128
- grpc_chttp2_cancel_stream(transport_, stream_, GRPC_ERROR_REF(error));
3129
- }
3130
-
3131
- grpc_error_handle Chttp2IncomingByteStream::Push(const grpc_slice& slice,
3132
- grpc_slice* slice_out) {
3133
- if (remaining_bytes_ < GRPC_SLICE_LENGTH(slice)) {
3134
- grpc_error_handle error =
3135
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Too many bytes in stream");
3136
- transport_->combiner->Run(&stream_->reset_byte_stream,
3137
- GRPC_ERROR_REF(error));
3138
- grpc_slice_unref_internal(slice);
3139
- return error;
3140
- } else {
3141
- remaining_bytes_ -= static_cast<uint32_t> GRPC_SLICE_LENGTH(slice);
3142
- if (slice_out != nullptr) {
3143
- *slice_out = slice;
3144
- }
3145
- return GRPC_ERROR_NONE;
3146
- }
3147
- }
3148
-
3149
- grpc_error_handle Chttp2IncomingByteStream::Finished(grpc_error_handle error,
3150
- bool reset_on_error) {
3151
- if (error == GRPC_ERROR_NONE) {
3152
- if (remaining_bytes_ != 0) {
3153
- error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
3154
- }
3155
- }
3156
- if (error != GRPC_ERROR_NONE && reset_on_error) {
3157
- transport_->combiner->Run(&stream_->reset_byte_stream,
3158
- GRPC_ERROR_REF(error));
3159
- }
3160
- Unref();
3161
- return error;
3162
- }
3163
-
3164
- void Chttp2IncomingByteStream::Shutdown(grpc_error_handle error) {
3165
- GRPC_ERROR_UNREF(Finished(error, true /* reset_on_error */));
3166
- }
3167
-
3168
- } // namespace grpc_core
3169
-
3170
2903
  //
3171
2904
  // RESOURCE QUOTAS
3172
2905
  //
@@ -3183,7 +2916,7 @@ static void post_benign_reclaimer(grpc_chttp2_transport* t) {
3183
2916
  benign_reclaimer_locked, t,
3184
2917
  grpc_schedule_on_exec_ctx);
3185
2918
  t->active_reclamation = std::move(*sweep);
3186
- t->combiner->Run(&t->benign_reclaimer_locked, GRPC_ERROR_NONE);
2919
+ t->combiner->Run(&t->benign_reclaimer_locked, absl::OkStatus());
3187
2920
  } else {
3188
2921
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "benign_reclaimer");
3189
2922
  }
@@ -3203,9 +2936,10 @@ static void post_destructive_reclaimer(grpc_chttp2_transport* t) {
3203
2936
  destructive_reclaimer_locked, t,
3204
2937
  grpc_schedule_on_exec_ctx);
3205
2938
  t->active_reclamation = std::move(*sweep);
3206
- t->combiner->Run(&t->destructive_reclaimer_locked, GRPC_ERROR_NONE);
2939
+ t->combiner->Run(&t->destructive_reclaimer_locked,
2940
+ absl::OkStatus());
3207
2941
  } else {
3208
- GRPC_CHTTP2_UNREF_TRANSPORT(t, "benign_reclaimer");
2942
+ GRPC_CHTTP2_UNREF_TRANSPORT(t, "destructive_reclaimer");
3209
2943
  }
3210
2944
  });
3211
2945
  }
@@ -3213,8 +2947,7 @@ static void post_destructive_reclaimer(grpc_chttp2_transport* t) {
3213
2947
 
3214
2948
  static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
3215
2949
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3216
- if (error == GRPC_ERROR_NONE &&
3217
- grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
2950
+ if (error.ok() && grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
3218
2951
  // Channel with no active streams: send a goaway to try and make it
3219
2952
  // disconnect cleanly
3220
2953
  if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
@@ -3222,11 +2955,11 @@ static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
3222
2955
  t->peer_string.c_str());
3223
2956
  }
3224
2957
  send_goaway(t,
3225
- grpc_error_set_int(
3226
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Buffers full"),
3227
- GRPC_ERROR_INT_HTTP2_ERROR, GRPC_HTTP2_ENHANCE_YOUR_CALM));
3228
- } else if (error == GRPC_ERROR_NONE &&
3229
- GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
2958
+ grpc_error_set_int(GRPC_ERROR_CREATE("Buffers full"),
2959
+ grpc_core::StatusIntProperty::kHttp2Error,
2960
+ GRPC_HTTP2_ENHANCE_YOUR_CALM),
2961
+ /*immediate_disconnect_hint=*/true);
2962
+ } else if (error.ok() && GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
3230
2963
  gpr_log(GPR_INFO,
3231
2964
  "HTTP2: %s - skip benign reclamation, there are still %" PRIdPTR
3232
2965
  " streams",
@@ -3234,7 +2967,7 @@ static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
3234
2967
  grpc_chttp2_stream_map_size(&t->stream_map));
3235
2968
  }
3236
2969
  t->benign_reclaimer_registered = false;
3237
- if (error != GRPC_ERROR_CANCELLED) {
2970
+ if (error != absl::CancelledError()) {
3238
2971
  t->active_reclamation.Finish();
3239
2972
  }
3240
2973
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "benign_reclaimer");
@@ -3244,7 +2977,7 @@ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
3244
2977
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3245
2978
  size_t n = grpc_chttp2_stream_map_size(&t->stream_map);
3246
2979
  t->destructive_reclaimer_registered = false;
3247
- if (error == GRPC_ERROR_NONE && n > 0) {
2980
+ if (error.ok() && n > 0) {
3248
2981
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(
3249
2982
  grpc_chttp2_stream_map_rand(&t->stream_map));
3250
2983
  if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
@@ -3253,8 +2986,8 @@ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
3253
2986
  }
3254
2987
  grpc_chttp2_cancel_stream(
3255
2988
  t, s,
3256
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING("Buffers full"),
3257
- GRPC_ERROR_INT_HTTP2_ERROR,
2989
+ grpc_error_set_int(GRPC_ERROR_CREATE("Buffers full"),
2990
+ grpc_core::StatusIntProperty::kHttp2Error,
3258
2991
  GRPC_HTTP2_ENHANCE_YOUR_CALM));
3259
2992
  if (n > 1) {
3260
2993
  // Since we cancel one stream per destructive reclamation, if
@@ -3264,7 +2997,7 @@ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
3264
2997
  post_destructive_reclaimer(t);
3265
2998
  }
3266
2999
  }
3267
- if (error != GRPC_ERROR_CANCELLED) {
3000
+ if (error != absl::CancelledError()) {
3268
3001
  t->active_reclamation.Finish();
3269
3002
  }
3270
3003
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "destructive_reclaimer");
@@ -3351,7 +3084,8 @@ grpc_chttp2_transport_get_socket_node(grpc_transport* transport) {
3351
3084
  }
3352
3085
 
3353
3086
  grpc_transport* grpc_create_chttp2_transport(
3354
- const grpc_channel_args* channel_args, grpc_endpoint* ep, bool is_client) {
3087
+ const grpc_core::ChannelArgs& channel_args, grpc_endpoint* ep,
3088
+ bool is_client) {
3355
3089
  auto t = new grpc_chttp2_transport(channel_args, ep, is_client);
3356
3090
  return &t->base;
3357
3091
  }
@@ -3362,7 +3096,7 @@ void grpc_chttp2_transport_start_reading(
3362
3096
  grpc_chttp2_transport* t =
3363
3097
  reinterpret_cast<grpc_chttp2_transport*>(transport);
3364
3098
  GRPC_CHTTP2_REF_TRANSPORT(
3365
- t, "reading_action"); /* matches unref inside reading_action */
3099
+ t, "reading_action"); // matches unref inside reading_action
3366
3100
  if (read_buffer != nullptr) {
3367
3101
  grpc_slice_buffer_move_into(read_buffer, &t->read_buffer);
3368
3102
  gpr_free(read_buffer);
@@ -3371,5 +3105,5 @@ void grpc_chttp2_transport_start_reading(
3371
3105
  t->notify_on_close = notify_on_close;
3372
3106
  t->combiner->Run(
3373
3107
  GRPC_CLOSURE_INIT(&t->read_action_locked, read_action_locked, t, nullptr),
3374
- GRPC_ERROR_NONE);
3108
+ absl::OkStatus());
3375
3109
  }