grpc 1.43.1 → 1.53.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

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