grpc 1.42.0 → 1.49.1

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

Potentially problematic release.


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

Files changed (1877) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +622 -358
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +114 -43
  5. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -31
  6. data/include/grpc/event_engine/memory_allocator.h +27 -26
  7. data/include/grpc/event_engine/memory_request.h +57 -0
  8. data/include/grpc/event_engine/port.h +1 -1
  9. data/include/grpc/event_engine/slice.h +286 -0
  10. data/include/grpc/event_engine/slice_buffer.h +118 -0
  11. data/include/grpc/grpc.h +43 -17
  12. data/include/grpc/grpc_posix.h +20 -19
  13. data/include/grpc/grpc_security.h +323 -195
  14. data/include/grpc/grpc_security_constants.h +1 -14
  15. data/include/grpc/impl/codegen/compression_types.h +2 -3
  16. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  17. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  18. data/include/grpc/impl/codegen/grpc_types.h +24 -25
  19. data/include/grpc/impl/codegen/port_platform.h +107 -44
  20. data/include/grpc/impl/codegen/slice.h +5 -2
  21. data/include/grpc/slice.h +0 -11
  22. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  23. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +309 -0
  24. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +141 -0
  25. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.cc +1 -1
  26. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.h +7 -5
  27. data/src/core/ext/filters/client_channel/backend_metric.cc +20 -16
  28. data/src/core/ext/filters/client_channel/backend_metric.h +19 -8
  29. data/src/core/ext/filters/client_channel/backup_poller.cc +20 -14
  30. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  31. data/src/core/ext/filters/client_channel/channel_connectivity.cc +48 -26
  32. data/src/core/ext/filters/client_channel/client_channel.cc +574 -496
  33. data/src/core/ext/filters/client_channel/client_channel.h +100 -54
  34. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
  35. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  36. data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -26
  37. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -8
  38. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -25
  39. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  40. data/src/core/ext/filters/client_channel/config_selector.h +21 -11
  41. data/src/core/ext/filters/client_channel/connector.h +12 -7
  42. data/src/core/ext/filters/client_channel/dynamic_filters.cc +24 -12
  43. data/src/core/ext/filters/client_channel/dynamic_filters.h +14 -4
  44. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +4 -22
  45. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +6 -15
  46. data/src/core/ext/filters/client_channel/health/health_check_client.cc +140 -583
  47. data/src/core/ext/filters/client_channel/health/health_check_client.h +26 -160
  48. data/src/core/ext/filters/client_channel/http_proxy.cc +100 -126
  49. data/src/core/ext/filters/client_channel/http_proxy.h +23 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +10 -5
  51. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  52. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  53. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +25 -11
  54. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +10 -5
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +15 -12
  56. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  57. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +285 -225
  58. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
  59. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +16 -3
  60. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +6 -2
  61. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -2
  62. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +8 -2
  63. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +26 -16
  64. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +10 -8
  65. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +407 -0
  66. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  67. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1142 -0
  68. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +78 -0
  69. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +206 -190
  70. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +420 -292
  71. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +419 -272
  72. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +11 -5
  73. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +302 -236
  74. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +269 -241
  75. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +142 -124
  76. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +210 -164
  77. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +231 -205
  78. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +7 -1
  79. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +252 -167
  80. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +103 -86
  81. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +534 -548
  82. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  83. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  84. data/src/core/ext/filters/client_channel/proxy_mapper.h +14 -15
  85. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +20 -16
  86. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +12 -6
  87. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +38 -28
  88. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +676 -325
  89. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +30 -13
  90. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +29 -23
  91. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +37 -56
  92. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +332 -329
  93. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +55 -40
  94. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +3 -2
  95. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  96. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  97. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +126 -255
  98. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +39 -49
  99. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +18 -3
  100. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +167 -85
  101. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +212 -0
  102. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +112 -0
  103. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +58 -61
  104. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +598 -472
  105. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  106. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +52 -54
  107. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +26 -17
  108. data/src/core/ext/filters/client_channel/retry_filter.cc +322 -208
  109. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  110. data/src/core/ext/filters/client_channel/retry_service_config.cc +52 -44
  111. data/src/core/ext/filters/client_channel/retry_service_config.h +31 -19
  112. data/src/core/ext/filters/client_channel/retry_throttle.cc +10 -31
  113. data/src/core/ext/filters/client_channel/retry_throttle.h +18 -6
  114. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +35 -17
  115. data/src/core/ext/filters/client_channel/subchannel.cc +250 -298
  116. data/src/core/ext/filters/client_channel/subchannel.h +91 -47
  117. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  118. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +17 -77
  119. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +20 -26
  120. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +472 -0
  121. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +222 -0
  122. data/src/core/ext/filters/deadline/deadline_filter.cc +35 -25
  123. data/src/core/ext/filters/deadline/deadline_filter.h +11 -4
  124. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +171 -402
  125. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +31 -3
  126. data/src/core/ext/filters/fault_injection/service_config_parser.cc +30 -24
  127. data/src/core/ext/filters/fault_injection/service_config_parser.h +29 -10
  128. data/src/core/ext/filters/http/client/http_client_filter.cc +107 -551
  129. data/src/core/ext/filters/http/client/http_client_filter.h +35 -5
  130. data/src/core/ext/filters/http/client_authority_filter.cc +43 -112
  131. data/src/core/ext/filters/http/client_authority_filter.h +28 -6
  132. data/src/core/ext/filters/http/http_filters_plugin.cc +35 -28
  133. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +101 -320
  134. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  135. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +59 -133
  136. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  137. data/src/core/ext/filters/http/server/http_server_filter.cc +100 -476
  138. data/src/core/ext/filters/http/server/http_server_filter.h +37 -3
  139. data/src/core/ext/filters/message_size/message_size_filter.cc +78 -76
  140. data/src/core/ext/filters/message_size/message_size_filter.h +25 -8
  141. data/src/core/ext/filters/rbac/rbac_filter.cc +174 -0
  142. data/src/core/ext/filters/rbac/rbac_filter.h +84 -0
  143. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +621 -0
  144. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +85 -0
  145. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +62 -0
  146. data/src/core/ext/filters/server_config_selector/server_config_selector.h +85 -0
  147. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +161 -0
  148. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +33 -0
  149. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +256 -98
  150. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -9
  151. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +346 -166
  152. data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -5
  153. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
  154. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  155. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  156. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +646 -888
  157. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +16 -5
  158. data/src/core/ext/transport/chttp2/transport/context_list.cc +6 -3
  159. data/src/core/ext/transport/chttp2/transport/context_list.h +6 -4
  160. data/src/core/ext/transport/chttp2/transport/flow_control.cc +215 -266
  161. data/src/core/ext/transport/chttp2/transport/flow_control.h +183 -291
  162. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  163. data/src/core/ext/transport/chttp2/transport/frame_data.cc +59 -212
  164. data/src/core/ext/transport/chttp2/transport/frame_data.h +13 -36
  165. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
  166. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  167. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +9 -4
  168. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  169. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +11 -2
  170. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  171. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -42
  172. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  173. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +10 -12
  174. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  175. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  176. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +389 -249
  177. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +106 -147
  178. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -1
  179. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +12 -1
  180. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +106 -170
  181. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -2
  182. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +146 -37
  183. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +41 -46
  184. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  185. data/src/core/ext/transport/chttp2/transport/internal.h +48 -155
  186. data/src/core/ext/transport/chttp2/transport/parsing.cc +87 -51
  187. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +11 -11
  188. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  189. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  190. data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
  191. data/src/core/ext/transport/chttp2/transport/writing.cc +135 -157
  192. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -5
  193. data/src/core/ext/transport/inproc/inproc_transport.cc +161 -227
  194. data/src/core/ext/transport/inproc/inproc_transport.h +4 -5
  195. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +117 -0
  196. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +502 -0
  197. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -0
  198. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +569 -0
  199. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +60 -341
  200. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +280 -1355
  201. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  202. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  203. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
  204. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +159 -0
  205. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +64 -0
  206. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +189 -0
  207. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
  208. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +128 -0
  209. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
  210. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +106 -0
  211. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
  212. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +101 -0
  213. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +106 -0
  214. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +613 -0
  215. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
  216. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +107 -0
  217. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +43 -0
  218. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +51 -0
  219. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +30 -4
  220. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +54 -17
  221. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +143 -116
  222. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +730 -385
  223. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +241 -199
  224. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1360 -663
  225. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +49 -28
  226. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +213 -90
  227. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +321 -271
  228. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1776 -826
  229. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +20 -7
  230. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +47 -23
  231. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +60 -27
  232. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +277 -98
  233. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +299 -0
  234. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1437 -0
  235. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +74 -53
  236. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +383 -189
  237. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +21 -7
  238. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +50 -24
  239. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +215 -176
  240. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1179 -583
  241. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +105 -45
  242. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +554 -166
  243. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +19 -6
  244. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +43 -23
  245. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +16 -22
  246. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +46 -100
  247. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
  248. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +159 -0
  249. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +145 -117
  250. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +821 -409
  251. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +141 -92
  252. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +773 -348
  253. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +21 -8
  254. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +62 -30
  255. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +204 -125
  256. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1068 -398
  257. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +17 -4
  258. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +33 -16
  259. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +27 -13
  260. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +92 -48
  261. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +22 -9
  262. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +80 -33
  263. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +26 -13
  264. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +98 -48
  265. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +21 -8
  266. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +51 -25
  267. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +51 -35
  268. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +207 -108
  269. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +74 -55
  270. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +374 -189
  271. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +70 -53
  272. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +378 -187
  273. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +19 -6
  274. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +39 -20
  275. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +122 -71
  276. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +660 -259
  277. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +104 -79
  278. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +589 -300
  279. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +31 -16
  280. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +109 -48
  281. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +27 -10
  282. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +98 -39
  283. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
  284. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +140 -0
  285. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +82 -61
  286. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +446 -234
  287. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +86 -65
  288. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +443 -236
  289. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +139 -103
  290. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +649 -293
  291. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +45 -41
  292. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +255 -165
  293. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +706 -570
  294. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +4125 -1898
  295. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +38 -19
  296. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +161 -71
  297. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +241 -0
  298. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +1191 -0
  299. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
  300. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +92 -0
  301. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
  302. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +107 -0
  303. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +27 -13
  304. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +86 -45
  305. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
  306. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +138 -0
  307. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +63 -0
  308. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +254 -0
  309. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  310. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  311. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
  312. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +98 -0
  313. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
  314. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +221 -0
  315. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +33 -0
  316. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +43 -0
  317. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
  318. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +226 -0
  319. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
  320. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +150 -0
  321. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +17 -4
  322. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +39 -23
  323. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +45 -28
  324. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +208 -111
  325. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +51 -36
  326. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +273 -131
  327. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +71 -0
  328. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +237 -0
  329. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +26 -13
  330. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +91 -42
  331. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +292 -224
  332. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1679 -733
  333. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  334. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +168 -0
  335. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  336. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  337. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +9 -0
  338. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +6 -3
  339. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +107 -60
  340. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +607 -234
  341. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +41 -26
  342. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +169 -86
  343. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +126 -83
  344. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +651 -262
  345. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
  346. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +168 -0
  347. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +15 -2
  348. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +26 -14
  349. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +206 -72
  350. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +1095 -255
  351. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +31 -17
  352. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +116 -61
  353. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +74 -57
  354. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +368 -185
  355. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
  356. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +116 -0
  357. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +34 -18
  358. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +140 -80
  359. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
  360. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +230 -0
  361. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +28 -14
  362. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +108 -56
  363. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +21 -8
  364. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +55 -30
  365. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +20 -7
  366. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +53 -26
  367. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +19 -6
  368. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +43 -23
  369. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +35 -20
  370. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +130 -68
  371. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +31 -17
  372. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +132 -64
  373. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +26 -12
  374. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +94 -52
  375. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +37 -22
  376. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +163 -82
  377. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +50 -31
  378. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -144
  379. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +53 -36
  380. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +256 -130
  381. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
  382. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +213 -0
  383. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +9 -0
  384. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +3 -0
  385. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
  386. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +143 -0
  387. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +23 -9
  388. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +71 -35
  389. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +30 -15
  390. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -51
  391. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  392. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  393. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +26 -0
  394. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +41 -0
  395. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +19 -6
  396. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +45 -18
  397. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
  398. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +131 -0
  399. data/src/core/ext/upb-generated/google/api/annotations.upb.c +22 -0
  400. data/src/core/ext/upb-generated/google/api/annotations.upb.h +23 -0
  401. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +154 -125
  402. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +765 -381
  403. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +158 -126
  404. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +844 -401
  405. data/src/core/ext/upb-generated/google/api/http.upb.c +43 -28
  406. data/src/core/ext/upb-generated/google/api/http.upb.h +229 -114
  407. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
  408. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +115 -0
  409. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +18 -5
  410. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +43 -21
  411. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +374 -282
  412. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2199 -1029
  413. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +18 -5
  414. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +41 -19
  415. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +15 -2
  416. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +26 -14
  417. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +47 -31
  418. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +190 -92
  419. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +18 -5
  420. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +41 -19
  421. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +57 -36
  422. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +277 -148
  423. data/src/core/ext/upb-generated/google/rpc/status.upb.c +21 -8
  424. data/src/core/ext/upb-generated/google/rpc/status.upb.h +57 -29
  425. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
  426. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +335 -0
  427. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +32 -18
  428. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +108 -47
  429. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +135 -107
  430. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +726 -358
  431. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +27 -12
  432. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +85 -40
  433. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +22 -8
  434. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +65 -34
  435. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +81 -61
  436. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +435 -237
  437. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +34 -19
  438. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +124 -62
  439. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  440. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +792 -0
  441. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +75 -13
  442. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +206 -56
  443. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -5
  444. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +59 -17
  445. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +21 -0
  446. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +16 -0
  447. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +31 -5
  448. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +61 -19
  449. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +30 -4
  450. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +54 -17
  451. data/src/core/ext/upb-generated/validate/validate.upb.c +406 -310
  452. data/src/core/ext/upb-generated/validate/validate.upb.h +2822 -1164
  453. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
  454. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +290 -0
  455. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
  456. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +112 -0
  457. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
  458. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +46 -0
  459. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +64 -17
  460. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +191 -67
  461. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
  462. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +103 -0
  463. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +17 -4
  464. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +35 -18
  465. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +30 -16
  466. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +107 -54
  467. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +25 -11
  468. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +58 -29
  469. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
  470. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +107 -0
  471. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +22 -9
  472. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +60 -29
  473. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +33 -19
  474. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +139 -69
  475. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +22 -9
  476. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +63 -29
  477. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +36 -21
  478. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +106 -45
  479. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  480. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +113 -0
  481. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +207 -0
  482. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +914 -0
  483. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
  484. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +151 -0
  485. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
  486. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +226 -0
  487. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +20 -7
  488. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +47 -23
  489. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
  490. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
  491. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
  492. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
  493. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +75 -327
  494. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +16 -101
  495. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  496. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  497. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
  498. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
  499. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +56 -0
  500. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
  501. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
  502. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
  503. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
  504. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
  505. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
  506. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
  507. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
  508. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
  509. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
  510. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
  511. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +10 -8
  512. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +1 -1
  513. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +10 -13
  514. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +4 -4
  515. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +120 -150
  516. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +46 -46
  517. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +253 -280
  518. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +55 -55
  519. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +60 -62
  520. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +10 -10
  521. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +387 -424
  522. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +76 -76
  523. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +16 -18
  524. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +4 -4
  525. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +25 -23
  526. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +4 -4
  527. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
  528. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
  529. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +17 -32
  530. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +22 -22
  531. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +17 -19
  532. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +4 -4
  533. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +203 -246
  534. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +73 -73
  535. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +140 -116
  536. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +26 -16
  537. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +16 -19
  538. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +4 -4
  539. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +24 -43
  540. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +4 -9
  541. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
  542. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
  543. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +23 -51
  544. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +43 -43
  545. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +179 -187
  546. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +30 -25
  547. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +16 -19
  548. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +4 -4
  549. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +254 -254
  550. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +53 -43
  551. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +14 -16
  552. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +4 -4
  553. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +16 -20
  554. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +7 -7
  555. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +16 -18
  556. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +4 -4
  557. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +26 -28
  558. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +4 -4
  559. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +15 -18
  560. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +4 -4
  561. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +20 -28
  562. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +13 -13
  563. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +21 -33
  564. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +19 -19
  565. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +20 -30
  566. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +16 -16
  567. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +16 -18
  568. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +4 -4
  569. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +180 -165
  570. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +24 -19
  571. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +155 -166
  572. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +22 -22
  573. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +21 -23
  574. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +4 -4
  575. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +46 -42
  576. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +7 -7
  577. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
  578. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
  579. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +19 -35
  580. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +25 -25
  581. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +19 -37
  582. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +28 -28
  583. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +194 -0
  584. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +75 -0
  585. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -85
  586. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +7 -12
  587. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +874 -917
  588. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +170 -160
  589. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +54 -48
  590. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +10 -10
  591. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +199 -0
  592. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +90 -0
  593. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
  594. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
  595. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
  596. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
  597. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +17 -21
  598. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +7 -7
  599. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
  600. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
  601. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
  602. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
  603. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  604. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  605. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
  606. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
  607. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
  608. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
  609. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +61 -0
  610. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
  611. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
  612. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
  613. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
  614. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
  615. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +17 -18
  616. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +4 -4
  617. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +19 -29
  618. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +16 -16
  619. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +20 -26
  620. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +10 -10
  621. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +80 -0
  622. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  623. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +19 -20
  624. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +4 -4
  625. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +405 -410
  626. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +63 -58
  627. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +17 -13
  628. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +1 -1
  629. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +174 -157
  630. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +24 -19
  631. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +21 -27
  632. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +10 -10
  633. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +219 -216
  634. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +24 -19
  635. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
  636. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
  637. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +16 -18
  638. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +4 -4
  639. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +162 -107
  640. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +57 -22
  641. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +18 -22
  642. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +7 -7
  643. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +125 -135
  644. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +16 -16
  645. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
  646. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
  647. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +15 -23
  648. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +13 -13
  649. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
  650. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
  651. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +17 -21
  652. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +7 -7
  653. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +17 -19
  654. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +4 -4
  655. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +17 -19
  656. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +4 -4
  657. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +17 -19
  658. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +4 -4
  659. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +38 -43
  660. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +10 -10
  661. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +17 -21
  662. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +7 -7
  663. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +16 -21
  664. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +7 -7
  665. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +18 -24
  666. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +10 -10
  667. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +15 -29
  668. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +22 -22
  669. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +16 -26
  670. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +16 -16
  671. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
  672. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
  673. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +12 -10
  674. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +1 -1
  675. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
  676. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
  677. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +14 -19
  678. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +7 -7
  679. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +13 -19
  680. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +10 -10
  681. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  682. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  683. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
  684. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
  685. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +13 -16
  686. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +4 -4
  687. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
  688. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
  689. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +7 -7
  690. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +1 -1
  691. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  692. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  693. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  694. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  695. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +5 -14
  696. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +10 -10
  697. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
  698. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
  699. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +5 -10
  700. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +4 -4
  701. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +96 -151
  702. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
  703. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +5 -10
  704. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
  705. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +5 -10
  706. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
  707. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +5 -16
  708. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
  709. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +5 -10
  710. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
  711. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +5 -26
  712. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
  713. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +6 -11
  714. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +4 -4
  715. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
  716. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
  717. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  718. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  719. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +6 -15
  720. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
  721. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +7 -12
  722. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
  723. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +6 -6
  724. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
  725. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +6 -11
  726. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
  727. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +6 -11
  728. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
  729. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +8 -57
  730. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +70 -70
  731. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
  732. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
  733. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
  734. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
  735. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
  736. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
  737. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +6 -17
  738. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +13 -13
  739. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
  740. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
  741. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +7 -12
  742. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +4 -4
  743. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +9 -16
  744. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +7 -7
  745. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +6 -13
  746. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +7 -7
  747. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
  748. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
  749. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +8 -13
  750. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +4 -4
  751. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +8 -15
  752. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +7 -7
  753. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +8 -13
  754. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +4 -4
  755. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
  756. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
  757. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
  758. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
  759. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
  760. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
  761. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +7 -12
  762. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +4 -4
  763. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  764. data/src/core/ext/xds/certificate_provider_registry.cc +9 -9
  765. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  766. data/src/core/ext/xds/certificate_provider_store.cc +12 -0
  767. data/src/core/ext/xds/certificate_provider_store.h +19 -1
  768. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +13 -4
  769. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +10 -2
  770. data/src/core/ext/xds/upb_utils.h +45 -0
  771. data/src/core/ext/xds/xds_api.cc +331 -3601
  772. data/src/core/ext/xds/xds_api.h +75 -630
  773. data/src/core/ext/xds/xds_bootstrap.cc +279 -180
  774. data/src/core/ext/xds/xds_bootstrap.h +64 -28
  775. data/src/core/ext/xds/xds_certificate_provider.cc +17 -3
  776. data/src/core/ext/xds/xds_certificate_provider.h +35 -3
  777. data/src/core/ext/xds/xds_channel_stack_modifier.cc +27 -20
  778. data/src/core/ext/xds/xds_channel_stack_modifier.h +17 -4
  779. data/src/core/ext/xds/xds_client.cc +1185 -2050
  780. data/src/core/ext/xds/xds_client.h +143 -189
  781. data/src/core/ext/xds/xds_client_grpc.cc +291 -0
  782. data/src/core/ext/xds/xds_client_grpc.h +102 -0
  783. data/src/core/ext/xds/xds_client_stats.cc +18 -19
  784. data/src/core/ext/xds/xds_client_stats.h +9 -7
  785. data/src/core/ext/xds/xds_cluster.cc +543 -0
  786. data/src/core/ext/xds/xds_cluster.h +120 -0
  787. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +147 -0
  788. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +73 -0
  789. data/src/core/ext/xds/xds_common_types.cc +426 -0
  790. data/src/core/ext/xds/xds_common_types.h +102 -0
  791. data/src/core/ext/xds/xds_endpoint.cc +381 -0
  792. data/src/core/ext/xds/xds_endpoint.h +143 -0
  793. data/src/core/ext/xds/xds_http_fault_filter.cc +21 -26
  794. data/src/core/ext/xds/xds_http_fault_filter.h +8 -6
  795. data/src/core/ext/xds/xds_http_filters.cc +18 -5
  796. data/src/core/ext/xds/xds_http_filters.h +9 -9
  797. data/src/core/ext/xds/xds_http_rbac_filter.cc +560 -0
  798. data/src/core/ext/xds/xds_http_rbac_filter.h +61 -0
  799. data/src/core/ext/xds/xds_lb_policy_registry.cc +288 -0
  800. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  801. data/src/core/ext/xds/xds_listener.cc +1097 -0
  802. data/src/core/ext/xds/xds_listener.h +229 -0
  803. data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → xds/xds_resource_type.cc} +12 -9
  804. data/src/core/ext/xds/xds_resource_type.h +109 -0
  805. data/src/core/ext/xds/xds_resource_type_impl.h +91 -0
  806. data/src/core/ext/xds/xds_route_config.cc +1153 -0
  807. data/src/core/ext/xds/xds_route_config.h +241 -0
  808. data/src/core/ext/xds/xds_routing.cc +263 -0
  809. data/src/core/ext/xds/xds_routing.h +104 -0
  810. data/src/core/ext/xds/xds_server_config_fetcher.cc +1138 -324
  811. data/src/core/ext/xds/xds_transport.h +86 -0
  812. data/src/core/ext/xds/xds_transport_grpc.cc +349 -0
  813. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  814. data/src/core/lib/address_utils/parse_address.cc +27 -8
  815. data/src/core/lib/address_utils/parse_address.h +11 -2
  816. data/src/core/lib/address_utils/sockaddr_utils.cc +82 -51
  817. data/src/core/lib/address_utils/sockaddr_utils.h +9 -19
  818. data/src/core/lib/avl/avl.h +476 -88
  819. data/src/core/lib/backoff/backoff.cc +10 -39
  820. data/src/core/lib/backoff/backoff.h +12 -12
  821. data/src/core/lib/channel/call_finalization.h +90 -0
  822. data/src/core/lib/channel/call_tracer.h +16 -7
  823. data/src/core/lib/channel/channel_args.cc +274 -48
  824. data/src/core/lib/channel/channel_args.h +298 -12
  825. data/src/core/lib/channel/channel_args_preconditioning.cc +43 -0
  826. data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
  827. data/src/core/lib/channel/channel_fwd.h +26 -0
  828. data/src/core/lib/channel/channel_stack.cc +54 -10
  829. data/src/core/lib/channel/channel_stack.h +83 -14
  830. data/src/core/lib/channel/channel_stack_builder.cc +19 -278
  831. data/src/core/lib/channel/channel_stack_builder.h +104 -150
  832. data/src/core/lib/channel/channel_stack_builder_impl.cc +95 -0
  833. data/src/core/lib/channel/channel_stack_builder_impl.h +46 -0
  834. data/src/core/lib/channel/channel_trace.cc +11 -19
  835. data/src/core/lib/channel/channel_trace.h +6 -3
  836. data/src/core/lib/channel/channelz.cc +36 -49
  837. data/src/core/lib/channel/channelz.h +24 -7
  838. data/src/core/lib/channel/channelz_registry.cc +11 -19
  839. data/src/core/lib/channel/channelz_registry.h +10 -9
  840. data/src/core/lib/channel/connected_channel.cc +26 -30
  841. data/src/core/lib/channel/connected_channel.h +4 -1
  842. data/src/core/lib/channel/context.h +11 -0
  843. data/src/core/lib/channel/promise_based_filter.cc +1263 -0
  844. data/src/core/lib/channel/promise_based_filter.h +571 -0
  845. data/src/core/lib/channel/status_util.cc +2 -0
  846. data/src/core/lib/channel/status_util.h +0 -3
  847. data/src/core/lib/compression/compression.cc +26 -113
  848. data/src/core/lib/compression/compression_internal.cc +170 -204
  849. data/src/core/lib/compression/compression_internal.h +68 -72
  850. data/src/core/lib/compression/message_compress.cc +14 -12
  851. data/src/core/lib/compression/message_compress.h +4 -5
  852. data/src/core/lib/config/core_configuration.cc +14 -3
  853. data/src/core/lib/config/core_configuration.h +100 -36
  854. data/src/core/lib/debug/stats.cc +15 -18
  855. data/src/core/lib/debug/stats.h +13 -4
  856. data/src/core/lib/debug/stats_data.cc +4 -7
  857. data/src/core/lib/debug/stats_data.h +18 -25
  858. data/src/core/lib/debug/trace.h +15 -14
  859. data/src/core/lib/event_engine/{endpoint_config.cc → channel_args_endpoint_config.cc} +6 -3
  860. data/src/core/lib/event_engine/{endpoint_config_internal.h → channel_args_endpoint_config.h} +6 -5
  861. data/src/core/lib/event_engine/default_event_engine.cc +71 -0
  862. data/src/core/lib/{iomgr/event_engine/resolved_address_internal.cc → event_engine/default_event_engine.h} +13 -17
  863. data/src/core/lib/event_engine/default_event_engine_factory.cc +50 -0
  864. data/src/core/lib/{iomgr/event_engine/resolved_address_internal.h → event_engine/default_event_engine_factory.h} +8 -10
  865. data/src/core/lib/event_engine/executor/executor.h +38 -0
  866. data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
  867. data/src/core/lib/{iomgr/event_engine/promise.h → event_engine/executor/threaded_executor.h} +18 -25
  868. data/src/core/lib/event_engine/forkable.cc +101 -0
  869. data/src/core/lib/event_engine/forkable.h +61 -0
  870. data/src/core/lib/event_engine/handle_containers.h +67 -0
  871. data/src/core/lib/event_engine/memory_allocator.cc +74 -0
  872. data/src/core/lib/event_engine/poller.h +54 -0
  873. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +142 -0
  874. data/src/core/lib/event_engine/posix_engine/posix_engine.h +121 -0
  875. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  876. data/src/core/lib/event_engine/posix_engine/timer.h +193 -0
  877. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  878. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  879. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +290 -0
  880. data/src/core/lib/event_engine/posix_engine/timer_manager.h +120 -0
  881. data/src/core/lib/event_engine/promise.h +78 -0
  882. data/src/core/lib/event_engine/{event_engine.cc → resolved_address.cc} +3 -12
  883. data/src/core/lib/event_engine/slice.cc +102 -0
  884. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  885. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  886. data/src/core/lib/event_engine/thread_pool.cc +158 -0
  887. data/src/core/lib/event_engine/thread_pool.h +81 -0
  888. data/src/core/lib/event_engine/trace.cc +18 -0
  889. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
  890. data/src/core/lib/event_engine/utils.cc +49 -0
  891. data/src/core/lib/event_engine/utils.h +40 -0
  892. data/src/core/lib/event_engine/windows/iocp.cc +149 -0
  893. data/src/core/lib/event_engine/windows/iocp.h +68 -0
  894. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  895. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  896. data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
  897. data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
  898. data/src/core/lib/gpr/log.cc +5 -0
  899. data/src/core/lib/gpr/sync_posix.cc +1 -0
  900. data/src/core/lib/gpr/time.cc +13 -10
  901. data/src/core/lib/gpr/time_posix.cc +6 -9
  902. data/src/core/lib/gpr/time_windows.cc +10 -7
  903. data/src/core/lib/gpr/tls.h +10 -5
  904. data/src/core/lib/gpr/useful.h +47 -0
  905. data/src/core/lib/gprpp/bitset.h +27 -14
  906. data/src/core/lib/gprpp/chunked_vector.h +49 -3
  907. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  908. data/src/core/lib/gprpp/cpp_impl_of.h +49 -0
  909. data/src/core/lib/gprpp/debug_location.h +41 -7
  910. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  911. data/src/core/lib/gprpp/examine_stack.h +0 -1
  912. data/src/core/lib/gprpp/fork.cc +3 -6
  913. data/src/core/lib/gprpp/global_config.h +2 -4
  914. data/src/core/lib/gprpp/global_config_env.cc +10 -9
  915. data/src/core/lib/gprpp/global_config_env.h +5 -3
  916. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  917. data/src/core/lib/gprpp/host_port.cc +2 -0
  918. data/src/core/lib/gprpp/manual_constructor.h +0 -70
  919. data/src/core/lib/gprpp/match.h +2 -0
  920. data/src/core/lib/gprpp/memory.h +1 -5
  921. data/src/core/lib/gprpp/no_destruct.h +94 -0
  922. data/src/core/lib/gprpp/orphanable.h +2 -5
  923. data/src/core/lib/gprpp/ref_counted.h +4 -4
  924. data/src/core/lib/gprpp/ref_counted_ptr.h +3 -6
  925. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  926. data/src/core/lib/gprpp/stat.h +0 -2
  927. data/src/core/lib/gprpp/stat_posix.cc +7 -2
  928. data/src/core/lib/gprpp/status_helper.cc +75 -48
  929. data/src/core/lib/gprpp/status_helper.h +10 -19
  930. data/src/core/lib/gprpp/sync.h +3 -1
  931. data/src/core/lib/gprpp/table.h +33 -1
  932. data/src/core/lib/gprpp/thd.h +2 -5
  933. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  934. data/src/core/lib/gprpp/thd_windows.cc +2 -0
  935. data/src/core/lib/gprpp/time.cc +214 -0
  936. data/src/core/lib/gprpp/time.h +301 -0
  937. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  938. data/src/core/lib/{iomgr → gprpp}/time_averaged_stats.h +29 -22
  939. data/src/core/lib/gprpp/time_util.cc +4 -0
  940. data/src/core/lib/gprpp/time_util.h +1 -1
  941. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  942. data/src/core/lib/gprpp/work_serializer.cc +247 -0
  943. data/src/core/lib/gprpp/work_serializer.h +86 -0
  944. data/src/core/lib/http/format_request.cc +62 -29
  945. data/src/core/lib/http/format_request.h +10 -7
  946. data/src/core/lib/http/httpcli.cc +316 -243
  947. data/src/core/lib/http/httpcli.h +233 -90
  948. data/src/core/lib/http/httpcli_security_connector.cc +80 -80
  949. data/src/core/lib/http/httpcli_ssl_credentials.h +39 -0
  950. data/src/core/lib/http/parser.cc +85 -15
  951. data/src/core/lib/http/parser.h +18 -2
  952. data/src/core/lib/iomgr/buffer_list.cc +9 -9
  953. data/src/core/lib/iomgr/buffer_list.h +18 -18
  954. data/src/core/lib/iomgr/call_combiner.cc +10 -26
  955. data/src/core/lib/iomgr/closure.h +20 -9
  956. data/src/core/lib/iomgr/combiner.cc +9 -7
  957. data/src/core/lib/iomgr/endpoint.cc +4 -4
  958. data/src/core/lib/iomgr/endpoint.h +7 -6
  959. data/src/core/lib/iomgr/endpoint_cfstream.cc +16 -30
  960. data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
  961. data/src/core/lib/iomgr/endpoint_pair_posix.cc +11 -11
  962. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
  963. data/src/core/lib/iomgr/error.cc +7 -775
  964. data/src/core/lib/iomgr/error.h +6 -149
  965. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  966. data/src/core/lib/iomgr/ev_apple.cc +6 -5
  967. data/src/core/lib/iomgr/ev_epoll1_linux.cc +65 -25
  968. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  969. data/src/core/lib/iomgr/ev_poll_posix.cc +101 -68
  970. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  971. data/src/core/lib/iomgr/ev_posix.cc +58 -100
  972. data/src/core/lib/iomgr/ev_posix.h +6 -4
  973. data/src/core/lib/iomgr/exec_ctx.cc +14 -98
  974. data/src/core/lib/iomgr/exec_ctx.h +19 -36
  975. data/src/core/lib/iomgr/executor.cc +16 -20
  976. data/src/core/lib/iomgr/executor.h +1 -4
  977. data/src/core/lib/iomgr/fork_posix.cc +1 -0
  978. data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
  979. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  980. data/src/core/lib/iomgr/iocp_windows.cc +9 -9
  981. data/src/core/lib/iomgr/iocp_windows.h +1 -1
  982. data/src/core/lib/iomgr/iomgr.cc +7 -1
  983. data/src/core/lib/iomgr/iomgr_fwd.h +25 -0
  984. data/src/core/lib/iomgr/iomgr_posix.cc +3 -2
  985. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +3 -2
  986. data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
  987. data/src/core/lib/iomgr/load_file.cc +1 -1
  988. data/src/core/lib/iomgr/lockfree_event.cc +0 -17
  989. data/src/core/lib/iomgr/polling_entity.h +6 -0
  990. data/src/core/lib/iomgr/pollset.cc +1 -1
  991. data/src/core/lib/iomgr/pollset.h +4 -4
  992. data/src/core/lib/iomgr/pollset_set.h +1 -2
  993. data/src/core/lib/iomgr/pollset_windows.cc +2 -2
  994. data/src/core/lib/iomgr/port.h +29 -12
  995. data/src/core/lib/iomgr/resolve_address.cc +12 -23
  996. data/src/core/lib/iomgr/resolve_address.h +79 -46
  997. data/src/core/lib/iomgr/resolve_address_impl.h +58 -0
  998. data/src/core/lib/iomgr/resolve_address_posix.cc +109 -65
  999. data/src/core/lib/iomgr/resolve_address_posix.h +64 -0
  1000. data/src/core/lib/iomgr/resolve_address_windows.cc +122 -76
  1001. data/src/core/lib/iomgr/resolve_address_windows.h +64 -0
  1002. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/resolved_address.h} +21 -10
  1003. data/src/core/lib/iomgr/sockaddr.h +2 -3
  1004. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  1005. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +62 -0
  1006. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  1007. data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -19
  1008. data/src/core/lib/iomgr/socket_windows.h +0 -2
  1009. data/src/core/lib/iomgr/tcp_client.cc +12 -9
  1010. data/src/core/lib/iomgr/tcp_client.h +25 -15
  1011. data/src/core/lib/iomgr/tcp_client_cfstream.cc +25 -19
  1012. data/src/core/lib/iomgr/tcp_client_posix.cc +161 -52
  1013. data/src/core/lib/iomgr/tcp_client_posix.h +4 -5
  1014. data/src/core/lib/iomgr/tcp_client_windows.cc +28 -26
  1015. data/src/core/lib/iomgr/tcp_posix.cc +307 -97
  1016. data/src/core/lib/iomgr/tcp_posix.h +1 -3
  1017. data/src/core/lib/iomgr/tcp_server.cc +4 -6
  1018. data/src/core/lib/iomgr/tcp_server.h +6 -8
  1019. data/src/core/lib/iomgr/tcp_server_posix.cc +72 -53
  1020. data/src/core/lib/iomgr/tcp_server_utils_posix.h +19 -18
  1021. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +42 -38
  1022. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +10 -6
  1023. data/src/core/lib/iomgr/tcp_server_windows.cc +25 -24
  1024. data/src/core/lib/iomgr/tcp_windows.cc +31 -26
  1025. data/src/core/lib/iomgr/tcp_windows.h +1 -2
  1026. data/src/core/lib/iomgr/timer.cc +2 -2
  1027. data/src/core/lib/iomgr/timer.h +11 -6
  1028. data/src/core/lib/iomgr/timer_generic.cc +100 -83
  1029. data/src/core/lib/iomgr/timer_manager.cc +15 -14
  1030. data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
  1031. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
  1032. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  1033. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  1034. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  1035. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  1036. data/src/core/lib/json/json.h +20 -24
  1037. data/src/core/lib/json/json_args.h +34 -0
  1038. data/src/core/lib/json/json_object_loader.cc +233 -0
  1039. data/src/core/lib/json/json_object_loader.h +618 -0
  1040. data/src/core/lib/json/json_reader.cc +155 -75
  1041. data/src/core/lib/json/json_util.cc +11 -32
  1042. data/src/core/lib/json/json_util.h +15 -6
  1043. data/src/core/lib/json/json_writer.cc +6 -1
  1044. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +7 -45
  1045. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +105 -95
  1046. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  1047. data/src/core/lib/load_balancing/lb_policy_registry.cc +167 -0
  1048. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.h +31 -26
  1049. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +57 -47
  1050. data/src/core/lib/matchers/matchers.cc +7 -4
  1051. data/src/core/lib/matchers/matchers.h +2 -0
  1052. data/src/core/lib/promise/activity.cc +120 -0
  1053. data/src/core/lib/promise/activity.h +582 -0
  1054. data/src/core/lib/promise/arena_promise.h +201 -0
  1055. data/src/core/lib/promise/call_push_pull.h +148 -0
  1056. data/src/core/lib/promise/context.h +85 -0
  1057. data/src/core/lib/promise/detail/basic_seq.h +516 -0
  1058. data/src/core/lib/promise/detail/promise_factory.h +187 -0
  1059. data/src/core/lib/promise/detail/promise_like.h +85 -0
  1060. data/src/core/lib/promise/detail/status.h +50 -0
  1061. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
  1062. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  1063. data/src/core/lib/promise/latch.h +103 -0
  1064. data/src/core/lib/promise/loop.h +136 -0
  1065. data/src/core/lib/promise/map.h +87 -0
  1066. data/src/core/lib/promise/poll.h +66 -0
  1067. data/src/core/lib/promise/promise.h +96 -0
  1068. data/src/core/lib/promise/race.h +83 -0
  1069. data/src/core/lib/promise/seq.h +108 -0
  1070. data/src/core/lib/promise/sleep.cc +77 -0
  1071. data/src/core/lib/promise/sleep.h +79 -0
  1072. data/src/core/lib/promise/try_seq.h +177 -0
  1073. data/src/core/lib/{iomgr/ev_epollex_linux.h → resolver/resolver.cc} +15 -8
  1074. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +45 -53
  1075. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +36 -34
  1076. data/src/core/lib/resolver/resolver_registry.cc +149 -0
  1077. data/src/core/lib/resolver/resolver_registry.h +123 -0
  1078. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +28 -18
  1079. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +19 -16
  1080. data/src/core/lib/resource_quota/api.cc +96 -0
  1081. data/src/core/lib/resource_quota/api.h +43 -0
  1082. data/src/core/lib/{gprpp → resource_quota}/arena.cc +37 -20
  1083. data/src/core/lib/{gprpp → resource_quota}/arena.h +49 -17
  1084. data/src/core/lib/resource_quota/memory_quota.cc +618 -0
  1085. data/src/core/lib/resource_quota/memory_quota.h +543 -0
  1086. data/src/core/lib/resource_quota/periodic_update.cc +79 -0
  1087. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  1088. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc → lib/resource_quota/resource_quota.cc} +13 -11
  1089. data/src/core/lib/resource_quota/resource_quota.h +74 -0
  1090. data/src/core/lib/resource_quota/thread_quota.cc +45 -0
  1091. data/src/core/lib/resource_quota/thread_quota.h +61 -0
  1092. data/src/core/lib/{iomgr/event_engine/pollset.h → resource_quota/trace.cc} +3 -9
  1093. data/src/core/{ext/filters/max_age/max_age_filter.h → lib/resource_quota/trace.h} +6 -8
  1094. data/src/core/lib/security/authorization/authorization_policy_provider.h +14 -0
  1095. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  1096. data/src/core/lib/security/authorization/evaluate_args.cc +53 -45
  1097. data/src/core/lib/security/authorization/evaluate_args.h +9 -5
  1098. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +66 -0
  1099. data/src/core/lib/security/authorization/grpc_authorization_engine.h +69 -0
  1100. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +120 -0
  1101. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +61 -0
  1102. data/src/core/lib/security/authorization/matchers.cc +238 -0
  1103. data/src/core/lib/security/authorization/matchers.h +218 -0
  1104. data/src/core/lib/security/authorization/rbac_policy.cc +446 -0
  1105. data/src/core/lib/security/authorization/rbac_policy.h +178 -0
  1106. data/src/core/lib/security/context/security_context.cc +9 -4
  1107. data/src/core/lib/security/context/security_context.h +23 -4
  1108. data/src/core/lib/security/credentials/alts/alts_credentials.cc +18 -10
  1109. data/src/core/lib/security/credentials/alts/alts_credentials.h +18 -4
  1110. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  1111. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  1112. data/src/core/lib/security/credentials/call_creds_util.cc +97 -0
  1113. data/src/core/lib/security/credentials/call_creds_util.h +43 -0
  1114. data/src/core/lib/security/credentials/channel_creds_registry.h +103 -0
  1115. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +80 -0
  1116. data/src/core/lib/security/credentials/composite/composite_credentials.cc +32 -91
  1117. data/src/core/lib/security/credentials/composite/composite_credentials.h +42 -16
  1118. data/src/core/lib/security/credentials/credentials.cc +6 -11
  1119. data/src/core/lib/security/credentials/credentials.h +106 -99
  1120. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +173 -52
  1121. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +19 -0
  1122. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  1123. data/src/core/lib/security/credentials/external/external_account_credentials.cc +108 -64
  1124. data/src/core/lib/security/credentials/external/external_account_credentials.h +16 -9
  1125. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +15 -9
  1126. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  1127. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +58 -23
  1128. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +11 -0
  1129. data/src/core/lib/security/credentials/fake/fake_credentials.cc +42 -43
  1130. data/src/core/lib/security/credentials/fake/fake_credentials.h +35 -26
  1131. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  1132. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +91 -56
  1133. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +20 -7
  1134. data/src/core/lib/security/credentials/iam/iam_credentials.cc +31 -30
  1135. data/src/core/lib/security/credentials/iam/iam_credentials.h +25 -9
  1136. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +35 -26
  1137. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +61 -0
  1138. data/src/core/lib/security/credentials/jwt/json_token.cc +21 -11
  1139. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  1140. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +46 -55
  1141. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +30 -12
  1142. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +90 -56
  1143. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +5 -3
  1144. data/src/core/lib/security/credentials/local/local_credentials.cc +19 -13
  1145. data/src/core/lib/security/credentials/local/local_credentials.h +19 -3
  1146. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +201 -202
  1147. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +81 -34
  1148. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +103 -156
  1149. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +80 -27
  1150. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +31 -35
  1151. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +29 -6
  1152. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  1153. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  1154. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +50 -22
  1155. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +69 -12
  1156. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +241 -0
  1157. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +168 -0
  1158. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +37 -92
  1159. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +73 -149
  1160. data/src/core/lib/security/credentials/tls/tls_credentials.cc +59 -42
  1161. data/src/core/lib/security/credentials/tls/tls_credentials.h +13 -4
  1162. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  1163. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  1164. data/src/core/lib/security/credentials/xds/xds_credentials.cc +81 -89
  1165. data/src/core/lib/security/credentials/xds/xds_credentials.h +53 -8
  1166. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +41 -35
  1167. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +9 -6
  1168. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +50 -55
  1169. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +3 -5
  1170. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +21 -22
  1171. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +32 -21
  1172. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  1173. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +28 -21
  1174. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  1175. data/src/core/lib/security/security_connector/local/local_security_connector.cc +45 -29
  1176. data/src/core/lib/security/security_connector/local/local_security_connector.h +7 -3
  1177. data/src/core/lib/security/security_connector/security_connector.cc +22 -32
  1178. data/src/core/lib/security/security_connector/security_connector.h +49 -31
  1179. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +32 -22
  1180. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  1181. data/src/core/lib/security/security_connector/ssl_utils.cc +50 -34
  1182. data/src/core/lib/security/security_connector/ssl_utils.h +23 -24
  1183. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  1184. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +387 -220
  1185. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +97 -54
  1186. data/src/core/lib/security/transport/auth_filters.h +45 -5
  1187. data/src/core/lib/security/transport/client_auth_filter.cc +111 -368
  1188. data/src/core/lib/security/transport/secure_endpoint.cc +267 -137
  1189. data/src/core/lib/security/transport/secure_endpoint.h +5 -4
  1190. data/src/core/lib/security/transport/security_handshaker.cc +81 -50
  1191. data/src/core/lib/security/transport/security_handshaker.h +7 -2
  1192. data/src/core/lib/security/transport/server_auth_filter.cc +70 -41
  1193. data/src/core/lib/security/util/json_util.cc +3 -2
  1194. data/src/core/lib/security/util/json_util.h +0 -2
  1195. data/src/core/lib/service_config/service_config.h +89 -0
  1196. data/src/core/{ext → lib}/service_config/service_config_call_data.h +11 -7
  1197. data/src/core/lib/service_config/service_config_impl.cc +238 -0
  1198. data/src/core/{ext/service_config/service_config.h → lib/service_config/service_config_impl.h} +33 -32
  1199. data/src/core/lib/service_config/service_config_parser.cc +98 -0
  1200. data/src/core/lib/service_config/service_config_parser.h +101 -0
  1201. data/src/core/lib/slice/b64.cc +1 -1
  1202. data/src/core/lib/slice/b64.h +2 -0
  1203. data/src/core/lib/slice/percent_encoding.cc +35 -97
  1204. data/src/core/lib/slice/percent_encoding.h +4 -16
  1205. data/src/core/lib/slice/slice.cc +88 -184
  1206. data/src/core/lib/slice/slice.h +389 -0
  1207. data/src/core/lib/slice/slice_api.cc +1 -1
  1208. data/src/core/lib/slice/slice_buffer.cc +83 -23
  1209. data/src/core/lib/slice/slice_buffer.h +137 -0
  1210. data/src/core/lib/{iomgr/is_epollexclusive_available.h → slice/slice_buffer_api.cc} +11 -12
  1211. data/src/core/lib/slice/slice_internal.h +16 -34
  1212. data/src/core/lib/slice/slice_refcount.cc +18 -0
  1213. data/src/core/lib/slice/slice_refcount.h +7 -83
  1214. data/src/core/lib/slice/slice_refcount_base.h +20 -133
  1215. data/src/core/lib/slice/slice_string_helpers.cc +0 -16
  1216. data/src/core/lib/slice/slice_string_helpers.h +1 -8
  1217. data/src/core/lib/surface/builtins.cc +11 -6
  1218. data/src/core/lib/surface/byte_buffer.cc +7 -1
  1219. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  1220. data/src/core/lib/surface/call.cc +1159 -1289
  1221. data/src/core/lib/surface/call.h +26 -22
  1222. data/src/core/lib/surface/call_details.cc +4 -4
  1223. data/src/core/lib/surface/call_log_batch.cc +7 -1
  1224. data/src/core/lib/surface/call_test_only.h +4 -1
  1225. data/src/core/lib/surface/channel.cc +218 -312
  1226. data/src/core/lib/surface/channel.h +102 -74
  1227. data/src/core/lib/surface/channel_init.cc +2 -3
  1228. data/src/core/lib/surface/channel_init.h +4 -6
  1229. data/src/core/lib/surface/channel_ping.cc +8 -2
  1230. data/src/core/lib/surface/channel_stack_type.cc +0 -2
  1231. data/src/core/lib/surface/channel_stack_type.h +0 -2
  1232. data/src/core/lib/surface/completion_queue.cc +41 -33
  1233. data/src/core/lib/surface/completion_queue.h +7 -5
  1234. data/src/core/lib/surface/completion_queue_factory.cc +1 -0
  1235. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  1236. data/src/core/lib/surface/event_string.cc +1 -7
  1237. data/src/core/lib/surface/event_string.h +1 -1
  1238. data/src/core/lib/surface/init.cc +68 -33
  1239. data/src/core/lib/surface/init.h +0 -10
  1240. data/src/core/lib/surface/lame_client.cc +63 -103
  1241. data/src/core/lib/surface/lame_client.h +41 -3
  1242. data/src/core/lib/surface/metadata_array.cc +2 -0
  1243. data/src/core/lib/surface/server.cc +121 -146
  1244. data/src/core/lib/surface/server.h +60 -29
  1245. data/src/core/lib/surface/validate_metadata.cc +7 -20
  1246. data/src/core/lib/surface/validate_metadata.h +3 -0
  1247. data/src/core/lib/surface/version.cc +2 -2
  1248. data/src/core/lib/transport/bdp_estimator.cc +13 -12
  1249. data/src/core/lib/transport/bdp_estimator.h +4 -5
  1250. data/src/core/lib/transport/connectivity_state.cc +5 -4
  1251. data/src/core/lib/transport/connectivity_state.h +3 -4
  1252. data/src/core/lib/transport/error_utils.cc +17 -43
  1253. data/src/core/lib/transport/error_utils.h +7 -2
  1254. data/src/core/lib/{channel → transport}/handshaker.cc +20 -17
  1255. data/src/core/lib/{channel → transport}/handshaker.h +16 -10
  1256. data/src/core/lib/{channel → transport}/handshaker_factory.h +10 -12
  1257. data/src/core/lib/{channel → transport}/handshaker_registry.cc +7 -2
  1258. data/src/core/lib/{channel → transport}/handshaker_registry.h +7 -8
  1259. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +62 -53
  1260. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
  1261. data/src/core/lib/transport/metadata_batch.cc +267 -69
  1262. data/src/core/lib/transport/metadata_batch.h +1088 -835
  1263. data/src/core/lib/transport/parsed_metadata.cc +39 -0
  1264. data/src/core/lib/transport/parsed_metadata.h +237 -93
  1265. data/src/core/lib/transport/pid_controller.cc +4 -4
  1266. data/src/core/lib/transport/status_conversion.cc +4 -2
  1267. data/src/core/lib/transport/status_conversion.h +3 -3
  1268. data/src/core/lib/transport/tcp_connect_handshaker.cc +247 -0
  1269. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  1270. data/src/core/lib/transport/timeout_encoding.cc +203 -70
  1271. data/src/core/lib/transport/timeout_encoding.h +44 -10
  1272. data/src/core/lib/transport/transport.cc +25 -47
  1273. data/src/core/lib/transport/transport.h +151 -27
  1274. data/src/core/lib/transport/transport_fwd.h +20 -0
  1275. data/src/core/lib/transport/transport_impl.h +25 -0
  1276. data/src/core/lib/transport/transport_op_string.cc +21 -64
  1277. data/src/core/lib/uri/uri_parser.cc +248 -66
  1278. data/src/core/lib/uri/uri_parser.h +39 -25
  1279. data/src/core/plugin_registry/grpc_plugin_registry.cc +35 -92
  1280. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +85 -0
  1281. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +67 -43
  1282. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  1283. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +9 -1
  1284. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +36 -21
  1285. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  1286. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -2
  1287. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  1288. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -2
  1289. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
  1290. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  1291. data/src/core/tsi/fake_transport_security.cc +66 -31
  1292. data/src/core/tsi/fake_transport_security.h +6 -0
  1293. data/src/core/tsi/local_transport_security.cc +24 -28
  1294. data/src/core/tsi/local_transport_security.h +1 -4
  1295. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +141 -0
  1296. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
  1297. data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -3
  1298. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
  1299. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +13 -6
  1300. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
  1301. data/src/core/tsi/ssl_transport_security.cc +249 -68
  1302. data/src/core/tsi/ssl_transport_security.h +47 -8
  1303. data/src/core/tsi/transport_security.cc +18 -6
  1304. data/src/core/tsi/transport_security.h +2 -1
  1305. data/src/core/tsi/transport_security_grpc.cc +3 -2
  1306. data/src/core/tsi/transport_security_grpc.h +5 -2
  1307. data/src/core/tsi/transport_security_interface.h +19 -5
  1308. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  1309. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  1310. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  1311. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  1312. data/src/ruby/ext/grpc/extconf.rb +61 -21
  1313. data/src/ruby/ext/grpc/rb_channel.c +5 -2
  1314. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +26 -34
  1315. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +40 -52
  1316. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  1317. data/src/ruby/ext/grpc/rb_server.c +7 -4
  1318. data/src/ruby/lib/grpc/errors.rb +1 -1
  1319. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  1320. data/src/ruby/lib/grpc/grpc.rb +1 -1
  1321. data/src/ruby/lib/grpc/version.rb +1 -1
  1322. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  1323. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  1324. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
  1325. data/src/ruby/pb/test/client.rb +769 -0
  1326. data/src/ruby/pb/test/server.rb +252 -0
  1327. data/src/ruby/pb/test/xds_client.rb +415 -0
  1328. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  1329. data/third_party/abseil-cpp/absl/algorithm/container.h +102 -92
  1330. data/third_party/abseil-cpp/absl/base/attributes.h +112 -52
  1331. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  1332. data/third_party/abseil-cpp/absl/base/config.h +245 -74
  1333. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
  1334. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  1335. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  1336. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  1337. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  1338. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +50 -0
  1339. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  1340. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  1341. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  1342. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  1343. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  1344. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +11 -1
  1345. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  1346. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
  1347. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  1348. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  1349. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +68 -0
  1350. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  1351. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -4
  1352. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +22 -7
  1353. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +15 -6
  1354. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  1355. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  1356. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  1357. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  1358. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  1359. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -5
  1360. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  1361. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +510 -0
  1362. data/third_party/abseil-cpp/absl/container/inlined_vector.h +118 -99
  1363. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  1364. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  1365. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
  1366. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +77 -113
  1367. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +62 -85
  1368. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +417 -431
  1369. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
  1370. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +18 -8
  1371. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +724 -262
  1372. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  1373. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
  1374. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -11
  1375. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +7 -2
  1376. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  1377. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  1378. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +13 -5
  1379. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  1380. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  1381. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +236 -0
  1382. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +33 -10
  1383. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
  1384. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +35 -4
  1385. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
  1386. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +7 -0
  1387. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +60 -7
  1388. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  1389. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  1390. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  1391. data/third_party/abseil-cpp/absl/functional/function_ref.h +6 -2
  1392. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  1393. data/third_party/abseil-cpp/absl/hash/hash.h +104 -8
  1394. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
  1395. data/third_party/abseil-cpp/absl/hash/internal/hash.h +297 -51
  1396. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.cc → low_level_hash.cc} +23 -11
  1397. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.h → low_level_hash.h} +14 -12
  1398. data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
  1399. data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
  1400. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  1401. data/third_party/abseil-cpp/absl/numeric/int128.cc +7 -12
  1402. data/third_party/abseil-cpp/absl/numeric/int128.h +148 -75
  1403. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  1404. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  1405. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
  1406. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
  1407. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +245 -0
  1408. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  1409. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  1410. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  1411. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  1412. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  1413. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  1414. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  1415. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  1416. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +95 -0
  1417. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +269 -0
  1418. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  1419. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  1420. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  1421. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +161 -0
  1422. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  1423. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  1424. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  1425. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  1426. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  1427. data/third_party/abseil-cpp/absl/random/internal/randen.h +96 -0
  1428. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +225 -0
  1429. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  1430. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +264 -0
  1431. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  1432. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  1433. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  1434. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  1435. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  1436. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  1437. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +165 -0
  1438. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  1439. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  1440. data/third_party/abseil-cpp/absl/random/internal/traits.h +149 -0
  1441. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  1442. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +96 -0
  1443. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +256 -0
  1444. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +261 -0
  1445. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  1446. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  1447. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  1448. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  1449. data/third_party/abseil-cpp/absl/random/seed_sequences.h +111 -0
  1450. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  1451. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  1452. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +272 -0
  1453. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +22 -5
  1454. data/third_party/abseil-cpp/absl/status/status.cc +183 -19
  1455. data/third_party/abseil-cpp/absl/status/status.h +41 -27
  1456. data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
  1457. data/third_party/abseil-cpp/absl/status/statusor.h +40 -24
  1458. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  1459. data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
  1460. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  1461. data/third_party/abseil-cpp/absl/strings/cord.cc +469 -1094
  1462. data/third_party/abseil-cpp/absl/strings/cord.h +392 -144
  1463. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  1464. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  1465. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  1466. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  1467. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
  1468. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  1469. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +23 -29
  1470. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +208 -96
  1471. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1228 -0
  1472. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +924 -0
  1473. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +187 -0
  1474. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +267 -0
  1475. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +69 -0
  1476. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +212 -0
  1477. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +62 -0
  1478. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  1479. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  1480. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  1481. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +60 -19
  1482. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +48 -172
  1483. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
  1484. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
  1485. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  1486. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  1487. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  1488. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  1489. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +418 -0
  1490. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  1491. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +88 -0
  1492. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  1493. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +123 -0
  1494. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  1495. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  1496. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  1497. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  1498. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +9 -1
  1499. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
  1500. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +39 -8
  1501. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  1502. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +10 -11
  1503. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +41 -20
  1504. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  1505. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
  1506. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +28 -18
  1507. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  1508. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
  1509. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  1510. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  1511. data/third_party/abseil-cpp/absl/strings/numbers.cc +9 -9
  1512. data/third_party/abseil-cpp/absl/strings/numbers.h +60 -23
  1513. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1514. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  1515. data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
  1516. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  1517. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  1518. data/third_party/abseil-cpp/absl/strings/string_view.cc +18 -34
  1519. data/third_party/abseil-cpp/absl/strings/string_view.h +123 -41
  1520. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  1521. data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
  1522. data/third_party/abseil-cpp/absl/strings/substitute.h +109 -76
  1523. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
  1524. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
  1525. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  1526. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  1527. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  1528. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  1529. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -26
  1530. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  1531. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  1532. data/third_party/abseil-cpp/absl/synchronization/mutex.h +20 -12
  1533. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  1534. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
  1535. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  1536. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  1537. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
  1538. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  1539. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  1540. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
  1541. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  1542. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
  1543. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
  1544. data/third_party/abseil-cpp/absl/time/time.h +82 -47
  1545. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  1546. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
  1547. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  1548. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  1549. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  1550. data/third_party/abseil-cpp/absl/types/span.h +5 -4
  1551. data/third_party/boringssl-with-bazel/err_data.c +681 -677
  1552. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
  1553. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
  1554. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
  1555. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
  1556. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
  1557. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
  1558. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +28 -0
  1559. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
  1560. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
  1561. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
  1562. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
  1563. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
  1564. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  1565. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
  1566. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  1567. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  1568. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
  1569. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
  1570. data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
  1571. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
  1572. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  1573. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  1574. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  1575. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  1576. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
  1577. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
  1578. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
  1579. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
  1580. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
  1581. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  1582. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  1583. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
  1584. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  1585. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
  1586. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
  1587. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
  1588. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
  1589. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +971 -253
  1590. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
  1591. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +0 -1
  1592. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  1593. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
  1594. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
  1595. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
  1596. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  1597. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
  1598. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
  1599. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  1600. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -13
  1601. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  1602. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  1603. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
  1604. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +29 -11
  1605. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +12 -43
  1606. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
  1607. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
  1608. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
  1609. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
  1610. data/third_party/cares/cares/{ares.h → include/ares.h} +73 -1
  1611. data/third_party/cares/cares/{ares_dns.h → include/ares_dns.h} +9 -0
  1612. data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
  1613. data/third_party/cares/cares/{ares_version.h → include/ares_version.h} +3 -3
  1614. data/third_party/cares/cares/{ares__close_sockets.c → src/lib/ares__close_sockets.c} +2 -2
  1615. data/third_party/cares/cares/{ares__get_hostent.c → src/lib/ares__get_hostent.c} +1 -2
  1616. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
  1617. data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
  1618. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
  1619. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
  1620. data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
  1621. data/third_party/cares/cares/src/lib/ares_android.c +444 -0
  1622. data/third_party/cares/cares/src/lib/ares_android.h +27 -0
  1623. data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
  1624. data/third_party/cares/cares/{ares_create_query.c → src/lib/ares_create_query.c} +8 -17
  1625. data/third_party/cares/cares/{ares_data.c → src/lib/ares_data.c} +18 -0
  1626. data/third_party/cares/cares/{ares_data.h → src/lib/ares_data.h} +2 -0
  1627. data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
  1628. data/third_party/cares/cares/{ares_expand_name.c → src/lib/ares_expand_name.c} +114 -23
  1629. data/third_party/cares/cares/{ares_expand_string.c → src/lib/ares_expand_string.c} +2 -5
  1630. data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
  1631. data/third_party/cares/cares/{ares_free_hostent.c → src/lib/ares_free_hostent.c} +6 -4
  1632. data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
  1633. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
  1634. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
  1635. data/third_party/cares/cares/{ares_getenv.c → src/lib/ares_getenv.c} +0 -2
  1636. data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
  1637. data/third_party/cares/cares/{ares_gethostbyaddr.c → src/lib/ares_gethostbyaddr.c} +2 -9
  1638. data/third_party/cares/cares/{ares_gethostbyname.c → src/lib/ares_gethostbyname.c} +25 -20
  1639. data/third_party/cares/cares/{ares_getnameinfo.c → src/lib/ares_getnameinfo.c} +4 -10
  1640. data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
  1641. data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
  1642. data/third_party/cares/cares/{ares_init.c → src/lib/ares_init.c} +79 -40
  1643. data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
  1644. data/third_party/cares/cares/{ares_ipv6.h → src/lib/ares_ipv6.h} +7 -0
  1645. data/third_party/cares/cares/{ares_library_init.c → src/lib/ares_library_init.c} +7 -2
  1646. data/third_party/cares/cares/{ares_library_init.h → src/lib/ares_library_init.h} +1 -1
  1647. data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
  1648. data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
  1649. data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
  1650. data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
  1651. data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
  1652. data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
  1653. data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
  1654. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
  1655. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
  1656. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
  1657. data/third_party/cares/cares/{ares_parse_mx_reply.c → src/lib/ares_parse_mx_reply.c} +2 -8
  1658. data/third_party/cares/cares/{ares_parse_naptr_reply.c → src/lib/ares_parse_naptr_reply.c} +2 -13
  1659. data/third_party/cares/cares/{ares_parse_ns_reply.c → src/lib/ares_parse_ns_reply.c} +5 -11
  1660. data/third_party/cares/cares/{ares_parse_ptr_reply.c → src/lib/ares_parse_ptr_reply.c} +53 -46
  1661. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
  1662. data/third_party/cares/cares/{ares_parse_srv_reply.c → src/lib/ares_parse_srv_reply.c} +2 -13
  1663. data/third_party/cares/cares/{ares_parse_txt_reply.c → src/lib/ares_parse_txt_reply.c} +3 -9
  1664. data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
  1665. data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
  1666. data/third_party/cares/cares/{ares_private.h → src/lib/ares_private.h} +52 -11
  1667. data/third_party/cares/cares/{ares_process.c → src/lib/ares_process.c} +127 -52
  1668. data/third_party/cares/cares/{ares_query.c → src/lib/ares_query.c} +3 -9
  1669. data/third_party/cares/cares/{ares_search.c → src/lib/ares_search.c} +5 -7
  1670. data/third_party/cares/cares/{ares_send.c → src/lib/ares_send.c} +2 -8
  1671. data/third_party/cares/cares/{ares_setup.h → src/lib/ares_setup.h} +4 -1
  1672. data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
  1673. data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
  1674. data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
  1675. data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
  1676. data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
  1677. data/third_party/cares/cares/{ares_strsplit.c → src/lib/ares_strsplit.c} +4 -0
  1678. data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
  1679. data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
  1680. data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
  1681. data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
  1682. data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
  1683. data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
  1684. data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
  1685. data/third_party/cares/cares/src/lib/config-dos.h +115 -0
  1686. data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
  1687. data/third_party/cares/cares/{inet_net_pton.c → src/lib/inet_net_pton.c} +2 -8
  1688. data/third_party/cares/cares/{inet_ntop.c → src/lib/inet_ntop.c} +2 -8
  1689. data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
  1690. data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
  1691. data/third_party/upb/third_party/utf8_range/naive.c +92 -0
  1692. data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
  1693. data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
  1694. data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
  1695. data/third_party/upb/upb/arena.c +277 -0
  1696. data/third_party/upb/upb/arena.h +225 -0
  1697. data/third_party/upb/upb/array.c +114 -0
  1698. data/third_party/upb/upb/array.h +83 -0
  1699. data/third_party/upb/upb/collections.h +36 -0
  1700. data/third_party/upb/upb/decode.c +832 -382
  1701. data/third_party/upb/upb/decode.h +44 -17
  1702. data/third_party/upb/upb/decode_fast.c +304 -302
  1703. data/third_party/upb/upb/decode_fast.h +18 -18
  1704. data/third_party/upb/upb/def.c +2083 -982
  1705. data/third_party/upb/upb/def.h +339 -260
  1706. data/third_party/upb/upb/def.hpp +144 -171
  1707. data/third_party/upb/upb/encode.c +287 -185
  1708. data/third_party/upb/upb/encode.h +24 -16
  1709. data/third_party/upb/upb/extension_registry.c +93 -0
  1710. data/third_party/upb/upb/extension_registry.h +84 -0
  1711. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +76 -58
  1712. data/third_party/upb/upb/internal/table.h +385 -0
  1713. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +23 -13
  1714. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  1715. data/third_party/upb/upb/json_decode.c +1512 -0
  1716. data/third_party/upb/upb/json_decode.h +47 -0
  1717. data/third_party/upb/upb/json_encode.c +780 -0
  1718. data/third_party/upb/upb/json_encode.h +65 -0
  1719. data/third_party/upb/upb/map.c +108 -0
  1720. data/third_party/upb/upb/map.h +117 -0
  1721. data/third_party/upb/upb/message_value.h +66 -0
  1722. data/third_party/upb/upb/mini_table.c +1147 -0
  1723. data/third_party/upb/upb/mini_table.h +189 -0
  1724. data/third_party/upb/upb/mini_table.hpp +112 -0
  1725. data/third_party/upb/upb/msg.c +132 -161
  1726. data/third_party/upb/upb/msg.h +18 -55
  1727. data/third_party/upb/upb/msg_internal.h +404 -254
  1728. data/third_party/upb/upb/port_def.inc +10 -1
  1729. data/third_party/upb/upb/port_undef.inc +2 -0
  1730. data/third_party/upb/upb/reflection.c +203 -280
  1731. data/third_party/upb/upb/reflection.h +40 -126
  1732. data/third_party/upb/upb/reflection.hpp +6 -6
  1733. data/third_party/upb/upb/status.c +86 -0
  1734. data/third_party/upb/upb/status.h +66 -0
  1735. data/third_party/upb/upb/table.c +233 -149
  1736. data/third_party/upb/upb/table_internal.h +9 -324
  1737. data/third_party/upb/upb/text_encode.c +116 -92
  1738. data/third_party/upb/upb/text_encode.h +10 -10
  1739. data/third_party/upb/upb/upb.c +34 -273
  1740. data/third_party/upb/upb/upb.h +79 -262
  1741. data/third_party/upb/upb/upb.hpp +31 -28
  1742. data/third_party/xxhash/xxhash.h +607 -352
  1743. data/third_party/zlib/crc32.c +966 -292
  1744. data/third_party/zlib/crc32.h +9441 -436
  1745. data/third_party/zlib/deflate.c +78 -30
  1746. data/third_party/zlib/deflate.h +12 -15
  1747. data/third_party/zlib/gzguts.h +3 -2
  1748. data/third_party/zlib/gzlib.c +5 -3
  1749. data/third_party/zlib/gzread.c +5 -7
  1750. data/third_party/zlib/gzwrite.c +25 -13
  1751. data/third_party/zlib/infback.c +2 -1
  1752. data/third_party/zlib/inffast.c +14 -14
  1753. data/third_party/zlib/inflate.c +39 -8
  1754. data/third_party/zlib/inflate.h +3 -2
  1755. data/third_party/zlib/inftrees.c +3 -3
  1756. data/third_party/zlib/trees.c +27 -48
  1757. data/third_party/zlib/zlib.h +123 -100
  1758. data/third_party/zlib/zutil.c +2 -2
  1759. data/third_party/zlib/zutil.h +12 -9
  1760. metadata +637 -270
  1761. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -44
  1762. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -83
  1763. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -48
  1764. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -185
  1765. data/src/core/ext/filters/client_channel/resolver.cc +0 -87
  1766. data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -195
  1767. data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
  1768. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -264
  1769. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -560
  1770. data/src/core/ext/service_config/service_config.cc +0 -227
  1771. data/src/core/ext/service_config/service_config_parser.cc +0 -89
  1772. data/src/core/ext/service_config/service_config_parser.h +0 -97
  1773. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -119
  1774. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -95
  1775. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -189
  1776. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -53
  1777. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -83
  1778. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -125
  1779. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
  1780. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
  1781. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
  1782. data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
  1783. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +0 -27
  1784. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -62
  1785. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -27
  1786. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -62
  1787. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -27
  1788. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -62
  1789. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -27
  1790. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -62
  1791. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -27
  1792. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -62
  1793. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +0 -72
  1794. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +0 -35
  1795. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +0 -73
  1796. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +0 -35
  1797. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +0 -72
  1798. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +0 -35
  1799. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +0 -80
  1800. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +0 -35
  1801. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +0 -74
  1802. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +0 -35
  1803. data/src/core/lib/avl/avl.cc +0 -306
  1804. data/src/core/lib/compression/algorithm_metadata.h +0 -62
  1805. data/src/core/lib/compression/compression_args.cc +0 -138
  1806. data/src/core/lib/compression/compression_args.h +0 -56
  1807. data/src/core/lib/compression/stream_compression.cc +0 -81
  1808. data/src/core/lib/compression/stream_compression.h +0 -117
  1809. data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
  1810. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  1811. data/src/core/lib/compression/stream_compression_identity.cc +0 -91
  1812. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  1813. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  1814. data/src/core/lib/event_engine/sockaddr.h +0 -44
  1815. data/src/core/lib/iomgr/error_internal.h +0 -66
  1816. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1654
  1817. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  1818. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  1819. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -173
  1820. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  1821. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -104
  1822. data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
  1823. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -88
  1824. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -114
  1825. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -293
  1826. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
  1827. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  1828. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  1829. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  1830. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  1831. data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
  1832. data/src/core/lib/iomgr/iomgr_custom.h +0 -49
  1833. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  1834. data/src/core/lib/iomgr/pollset_custom.cc +0 -105
  1835. data/src/core/lib/iomgr/pollset_custom.h +0 -37
  1836. data/src/core/lib/iomgr/pollset_set_custom.cc +0 -47
  1837. data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
  1838. data/src/core/lib/iomgr/resolve_address_custom.cc +0 -169
  1839. data/src/core/lib/iomgr/resolve_address_custom.h +0 -44
  1840. data/src/core/lib/iomgr/resource_quota.cc +0 -1106
  1841. data/src/core/lib/iomgr/resource_quota.h +0 -226
  1842. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
  1843. data/src/core/lib/iomgr/tcp_client_custom.cc +0 -152
  1844. data/src/core/lib/iomgr/tcp_custom.cc +0 -377
  1845. data/src/core/lib/iomgr/tcp_custom.h +0 -86
  1846. data/src/core/lib/iomgr/tcp_server_custom.cc +0 -467
  1847. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  1848. data/src/core/lib/iomgr/timer_custom.cc +0 -96
  1849. data/src/core/lib/iomgr/timer_custom.h +0 -43
  1850. data/src/core/lib/iomgr/work_serializer.cc +0 -155
  1851. data/src/core/lib/iomgr/work_serializer.h +0 -81
  1852. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +0 -171
  1853. data/src/core/lib/security/authorization/sdk_server_authz_filter.h +0 -67
  1854. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
  1855. data/src/core/lib/slice/slice_intern.cc +0 -367
  1856. data/src/core/lib/slice/slice_split.cc +0 -100
  1857. data/src/core/lib/slice/slice_split.h +0 -40
  1858. data/src/core/lib/slice/slice_utils.h +0 -200
  1859. data/src/core/lib/slice/static_slice.cc +0 -529
  1860. data/src/core/lib/slice/static_slice.h +0 -331
  1861. data/src/core/lib/surface/init_secure.cc +0 -103
  1862. data/src/core/lib/transport/byte_stream.cc +0 -158
  1863. data/src/core/lib/transport/byte_stream.h +0 -166
  1864. data/src/core/lib/transport/metadata.cc +0 -714
  1865. data/src/core/lib/transport/metadata.h +0 -449
  1866. data/src/core/lib/transport/static_metadata.cc +0 -1117
  1867. data/src/core/lib/transport/static_metadata.h +0 -340
  1868. data/src/core/lib/transport/status_metadata.cc +0 -63
  1869. data/src/core/lib/transport/status_metadata.h +0 -48
  1870. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
  1871. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  1872. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
  1873. data/third_party/cares/cares/ares_getopt.c +0 -122
  1874. data/third_party/cares/cares/ares_getopt.h +0 -53
  1875. data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
  1876. data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
  1877. data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
@@ -20,42 +20,84 @@
20
20
 
21
21
  #include <inttypes.h>
22
22
  #include <limits.h>
23
- #include <math.h>
24
23
  #include <stdio.h>
24
+ #include <stdlib.h>
25
25
  #include <string.h>
26
26
 
27
+ #include <algorithm>
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"
40
+ #include "absl/types/variant.h"
28
41
 
42
+ #include <grpc/impl/codegen/connectivity_state.h>
43
+ #include <grpc/impl/codegen/grpc_types.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>
33
49
 
34
50
  #include "src/core/ext/transport/chttp2/transport/context_list.h"
51
+ #include "src/core/ext/transport/chttp2/transport/flow_control.h"
52
+ #include "src/core/ext/transport/chttp2/transport/frame.h"
35
53
  #include "src/core/ext/transport/chttp2/transport/frame_data.h"
54
+ #include "src/core/ext/transport/chttp2/transport/frame_goaway.h"
55
+ #include "src/core/ext/transport/chttp2/transport/frame_rst_stream.h"
56
+ #include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
57
+ #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
36
58
  #include "src/core/ext/transport/chttp2/transport/internal.h"
59
+ #include "src/core/ext/transport/chttp2/transport/stream_map.h"
37
60
  #include "src/core/ext/transport/chttp2/transport/varint.h"
38
61
  #include "src/core/lib/channel/channel_args.h"
39
- #include "src/core/lib/compression/stream_compression.h"
40
62
  #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"
63
+ #include "src/core/lib/gpr/useful.h"
64
+ #include "src/core/lib/gprpp/bitset.h"
65
+ #include "src/core/lib/gprpp/debug_location.h"
66
+ #include "src/core/lib/gprpp/global_config_env.h"
67
+ #include "src/core/lib/gprpp/ref_counted.h"
68
+ #include "src/core/lib/gprpp/status_helper.h"
69
+ #include "src/core/lib/gprpp/time.h"
44
70
  #include "src/core/lib/http/parser.h"
45
- #include "src/core/lib/iomgr/executor.h"
46
- #include "src/core/lib/iomgr/iomgr.h"
71
+ #include "src/core/lib/iomgr/combiner.h"
72
+ #include "src/core/lib/iomgr/error.h"
73
+ #include "src/core/lib/iomgr/exec_ctx.h"
74
+ #include "src/core/lib/iomgr/iomgr_fwd.h"
75
+ #include "src/core/lib/iomgr/pollset.h"
47
76
  #include "src/core/lib/iomgr/timer.h"
48
77
  #include "src/core/lib/profiling/timers.h"
78
+ #include "src/core/lib/promise/poll.h"
79
+ #include "src/core/lib/resource_quota/arena.h"
80
+ #include "src/core/lib/resource_quota/memory_quota.h"
81
+ #include "src/core/lib/resource_quota/resource_quota.h"
82
+ #include "src/core/lib/resource_quota/trace.h"
83
+ #include "src/core/lib/slice/slice.h"
84
+ #include "src/core/lib/slice/slice_buffer.h"
49
85
  #include "src/core/lib/slice/slice_internal.h"
50
- #include "src/core/lib/slice/slice_string_helpers.h"
86
+ #include "src/core/lib/slice/slice_refcount.h"
87
+ #include "src/core/lib/transport/bdp_estimator.h"
88
+ #include "src/core/lib/transport/connectivity_state.h"
51
89
  #include "src/core/lib/transport/error_utils.h"
52
90
  #include "src/core/lib/transport/http2_errors.h"
53
- #include "src/core/lib/transport/static_metadata.h"
91
+ #include "src/core/lib/transport/metadata_batch.h"
54
92
  #include "src/core/lib/transport/status_conversion.h"
55
- #include "src/core/lib/transport/timeout_encoding.h"
56
93
  #include "src/core/lib/transport/transport.h"
57
94
  #include "src/core/lib/transport/transport_impl.h"
58
- #include "src/core/lib/uri/uri_parser.h"
95
+
96
+ GPR_GLOBAL_CONFIG_DEFINE_BOOL(
97
+ grpc_experimental_enable_peer_state_based_framing, false,
98
+ "If set, the max sizes of frames sent to lower layers is controlled based "
99
+ "on the peer's memory pressure which is reflected in its max http2 frame "
100
+ "size.");
59
101
 
60
102
  #define DEFAULT_CONNECTION_WINDOW_TARGET (1024 * 1024)
61
103
  #define MAX_WINDOW 0x7fffffffu
@@ -109,8 +151,6 @@ static void read_action(void* t, grpc_error_handle error);
109
151
  static void read_action_locked(void* t, grpc_error_handle error);
110
152
  static void continue_read_action_locked(grpc_chttp2_transport* t);
111
153
 
112
- static void complete_fetch(void* gs, grpc_error_handle error);
113
- static void complete_fetch_locked(void* gs, grpc_error_handle error);
114
154
  // Set a transport level setting, and push it to our peer
115
155
  static void queue_setting_update(grpc_chttp2_transport* t,
116
156
  grpc_chttp2_setting_id id, uint32_t value);
@@ -126,8 +166,6 @@ static void connectivity_state_set(grpc_chttp2_transport* t,
126
166
  const absl::Status& status,
127
167
  const char* reason);
128
168
 
129
- static void benign_reclaimer(void* arg, grpc_error_handle error);
130
- static void destructive_reclaimer(void* arg, grpc_error_handle error);
131
169
  static void benign_reclaimer_locked(void* arg, grpc_error_handle error);
132
170
  static void destructive_reclaimer_locked(void* arg, grpc_error_handle error);
133
171
 
@@ -162,18 +200,13 @@ static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error);
162
200
  static void keepalive_watchdog_fired(void* arg, grpc_error_handle error);
163
201
  static void keepalive_watchdog_fired_locked(void* arg, grpc_error_handle error);
164
202
 
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;
170
-
171
203
  namespace grpc_core {
172
204
 
173
205
  namespace {
174
206
  TestOnlyGlobalHttp2TransportInitCallback test_only_init_callback = nullptr;
175
207
  TestOnlyGlobalHttp2TransportDestructCallback test_only_destruct_callback =
176
208
  nullptr;
209
+ bool test_only_disable_transient_failure_state_notification = false;
177
210
  } // namespace
178
211
 
179
212
  void TestOnlySetGlobalHttp2TransportInitCallback(
@@ -186,6 +219,11 @@ void TestOnlySetGlobalHttp2TransportDestructCallback(
186
219
  test_only_destruct_callback = callback;
187
220
  }
188
221
 
222
+ void TestOnlyGlobalHttp2TransportDisableTransientFailureStateNotification(
223
+ bool disable) {
224
+ test_only_disable_transient_failure_state_notification = disable;
225
+ }
226
+
189
227
  } // namespace grpc_core
190
228
 
191
229
  //
@@ -238,8 +276,6 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
238
276
  write_cb_pool = next;
239
277
  }
240
278
 
241
- flow_control.Destroy();
242
-
243
279
  GRPC_ERROR_UNREF(closed_with_error);
244
280
  gpr_free(ping_acks);
245
281
  if (grpc_core::test_only_destruct_callback != nullptr) {
@@ -249,170 +285,151 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
249
285
 
250
286
  static const grpc_transport_vtable* get_vtable(void);
251
287
 
252
- // Returns whether bdp is enabled
253
- static bool read_channel_args(grpc_chttp2_transport* t,
254
- const grpc_channel_args* channel_args,
288
+ static void read_channel_args(grpc_chttp2_transport* t,
289
+ const grpc_core::ChannelArgs& channel_args,
255
290
  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);
291
+ const int initial_sequence_number =
292
+ channel_args.GetInt(GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER).value_or(-1);
293
+ if (initial_sequence_number > 0) {
294
+ if ((t->next_stream_id & 1) != (initial_sequence_number & 1)) {
295
+ gpr_log(GPR_ERROR, "%s: low bit must be %d on %s",
296
+ GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER, t->next_stream_id & 1,
297
+ is_client ? "client" : "server");
338
298
  } 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
- }
299
+ t->next_stream_id = static_cast<uint32_t>(initial_sequence_number);
386
300
  }
387
301
  }
388
- if (channelz_enabled) {
302
+
303
+ const int max_hpack_table_size =
304
+ channel_args.GetInt(GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER).value_or(-1);
305
+ if (max_hpack_table_size >= 0) {
306
+ t->hpack_compressor.SetMaxUsableSize(max_hpack_table_size);
307
+ }
308
+
309
+ t->ping_policy.max_pings_without_data =
310
+ std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)
311
+ .value_or(g_default_max_pings_without_data));
312
+ t->ping_policy.max_ping_strikes =
313
+ std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_MAX_PING_STRIKES)
314
+ .value_or(g_default_max_ping_strikes));
315
+ t->ping_policy.min_recv_ping_interval_without_data =
316
+ std::max(grpc_core::Duration::Zero(),
317
+ channel_args
318
+ .GetDurationFromIntMillis(
319
+ GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)
320
+ .value_or(grpc_core::Duration::Milliseconds(
321
+ g_default_min_recv_ping_interval_without_data_ms)));
322
+ t->write_buffer_size =
323
+ std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE)
324
+ .value_or(grpc_core::chttp2::kDefaultWindow));
325
+ t->keepalive_time =
326
+ std::max(grpc_core::Duration::Milliseconds(1),
327
+ channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIME_MS)
328
+ .value_or(grpc_core::Duration::Milliseconds(
329
+ t->is_client ? g_default_client_keepalive_time_ms
330
+ : g_default_server_keepalive_time_ms)));
331
+ t->keepalive_timeout = std::max(
332
+ grpc_core::Duration::Zero(),
333
+ channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIMEOUT_MS)
334
+ .value_or(grpc_core::Duration::Milliseconds(
335
+ t->is_client ? g_default_client_keepalive_timeout_ms
336
+ : g_default_server_keepalive_timeout_ms)));
337
+ t->keepalive_permit_without_calls =
338
+ channel_args.GetBool(GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)
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
+ }
395
409
  }
396
- return enable_bdp;
397
410
  }
398
411
 
399
412
  static void init_transport_keepalive_settings(grpc_chttp2_transport* t) {
400
413
  if (t->is_client) {
401
414
  t->keepalive_time = g_default_client_keepalive_time_ms == INT_MAX
402
- ? GRPC_MILLIS_INF_FUTURE
403
- : g_default_client_keepalive_time_ms;
415
+ ? grpc_core::Duration::Infinity()
416
+ : grpc_core::Duration::Milliseconds(
417
+ g_default_client_keepalive_time_ms);
404
418
  t->keepalive_timeout = g_default_client_keepalive_timeout_ms == INT_MAX
405
- ? GRPC_MILLIS_INF_FUTURE
406
- : g_default_client_keepalive_timeout_ms;
419
+ ? grpc_core::Duration::Infinity()
420
+ : grpc_core::Duration::Milliseconds(
421
+ g_default_client_keepalive_timeout_ms);
407
422
  t->keepalive_permit_without_calls =
408
423
  g_default_client_keepalive_permit_without_calls;
409
424
  } else {
410
425
  t->keepalive_time = g_default_server_keepalive_time_ms == INT_MAX
411
- ? GRPC_MILLIS_INF_FUTURE
412
- : g_default_server_keepalive_time_ms;
426
+ ? grpc_core::Duration::Infinity()
427
+ : grpc_core::Duration::Milliseconds(
428
+ g_default_server_keepalive_time_ms);
413
429
  t->keepalive_timeout = g_default_server_keepalive_timeout_ms == INT_MAX
414
- ? GRPC_MILLIS_INF_FUTURE
415
- : g_default_server_keepalive_timeout_ms;
430
+ ? grpc_core::Duration::Infinity()
431
+ : grpc_core::Duration::Milliseconds(
432
+ g_default_server_keepalive_timeout_ms);
416
433
  t->keepalive_permit_without_calls =
417
434
  g_default_server_keepalive_permit_without_calls;
418
435
  }
@@ -422,11 +439,12 @@ static void configure_transport_ping_policy(grpc_chttp2_transport* t) {
422
439
  t->ping_policy.max_pings_without_data = g_default_max_pings_without_data;
423
440
  t->ping_policy.max_ping_strikes = g_default_max_ping_strikes;
424
441
  t->ping_policy.min_recv_ping_interval_without_data =
425
- g_default_min_recv_ping_interval_without_data_ms;
442
+ grpc_core::Duration::Milliseconds(
443
+ g_default_min_recv_ping_interval_without_data_ms);
426
444
  }
427
445
 
428
446
  static void init_keepalive_pings_if_enabled(grpc_chttp2_transport* t) {
429
- if (t->keepalive_time != GRPC_MILLIS_INF_FUTURE) {
447
+ if (t->keepalive_time != grpc_core::Duration::Infinity()) {
430
448
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_WAITING;
431
449
  GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
432
450
  GRPC_CLOSURE_INIT(&t->init_keepalive_ping_locked, init_keepalive_ping, t,
@@ -442,19 +460,28 @@ static void init_keepalive_pings_if_enabled(grpc_chttp2_transport* t) {
442
460
  }
443
461
 
444
462
  grpc_chttp2_transport::grpc_chttp2_transport(
445
- const grpc_channel_args* channel_args, grpc_endpoint* ep, bool is_client,
446
- grpc_resource_user* resource_user)
463
+ const grpc_core::ChannelArgs& channel_args, grpc_endpoint* ep,
464
+ bool is_client)
447
465
  : refs(1, GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_refcount)
448
466
  ? "chttp2_refcount"
449
467
  : nullptr),
450
468
  ep(ep),
451
469
  peer_string(grpc_endpoint_get_peer(ep)),
452
- resource_user(resource_user),
470
+ memory_owner(channel_args.GetObject<grpc_core::ResourceQuota>()
471
+ ->memory_quota()
472
+ ->CreateMemoryOwner(absl::StrCat(
473
+ grpc_endpoint_get_peer(ep), ":client_transport"))),
474
+ self_reservation(
475
+ memory_owner.MakeReservation(sizeof(grpc_chttp2_transport))),
453
476
  combiner(grpc_combiner_create()),
454
477
  state_tracker(is_client ? "client_transport" : "server_transport",
455
478
  GRPC_CHANNEL_READY),
456
479
  is_client(is_client),
457
480
  next_stream_id(is_client ? 1 : 2),
481
+ flow_control(
482
+ peer_string.c_str(),
483
+ channel_args.GetBool(GRPC_ARG_HTTP2_BDP_PROBE).value_or(true),
484
+ &memory_owner),
458
485
  deframe_state(is_client ? GRPC_DTS_FH_0 : GRPC_DTS_CLIENT_PREFIX_0) {
459
486
  GPR_ASSERT(strlen(GRPC_CHTTP2_CLIENT_CONNECT_STRING) ==
460
487
  GRPC_CHTTP2_CLIENT_CONNECT_STRLEN);
@@ -496,32 +523,21 @@ grpc_chttp2_transport::grpc_chttp2_transport(
496
523
  configure_transport_ping_policy(this);
497
524
  init_transport_keepalive_settings(this);
498
525
 
499
- bool enable_bdp = true;
500
- if (channel_args) {
501
- enable_bdp = read_channel_args(this, channel_args, is_client);
502
- }
503
-
504
- if (g_flow_control_enabled) {
505
- flow_control.Init<grpc_core::chttp2::TransportFlowControl>(this,
506
- enable_bdp);
507
- } else {
508
- flow_control.Init<grpc_core::chttp2::TransportFlowControlDisabled>(this);
509
- enable_bdp = false;
510
- }
526
+ read_channel_args(this, channel_args, is_client);
511
527
 
512
528
  // No pings allowed before receiving a header or data frame.
513
529
  ping_state.pings_before_data_required = 0;
514
530
  ping_state.is_delayed_ping_timer_set = false;
515
- ping_state.last_ping_sent_time = GRPC_MILLIS_INF_PAST;
531
+ ping_state.last_ping_sent_time = grpc_core::Timestamp::InfPast();
516
532
 
517
- ping_recv_state.last_ping_recv_time = GRPC_MILLIS_INF_PAST;
533
+ ping_recv_state.last_ping_recv_time = grpc_core::Timestamp::InfPast();
518
534
  ping_recv_state.ping_strikes = 0;
519
535
 
520
536
  init_keepalive_pings_if_enabled(this);
521
537
 
522
- if (enable_bdp) {
538
+ if (flow_control.bdp_probe()) {
523
539
  bdp_ping_blocked = true;
524
- grpc_chttp2_act_on_flowctl_action(flow_control->PeriodicUpdate(), this,
540
+ grpc_chttp2_act_on_flowctl_action(flow_control.PeriodicUpdate(), this,
525
541
  nullptr);
526
542
  }
527
543
 
@@ -535,12 +551,11 @@ grpc_chttp2_transport::grpc_chttp2_transport(
535
551
  static void destroy_transport_locked(void* tp, grpc_error_handle /*error*/) {
536
552
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
537
553
  t->destroying = 1;
538
- grpc_resource_user_shutdown(t->resource_user);
539
- grpc_resource_user_unref(t->resource_user);
540
554
  close_transport_locked(
541
555
  t, grpc_error_set_int(
542
556
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Transport destroyed"),
543
557
  GRPC_ERROR_INT_OCCURRED_DURING_WRITE, t->write_state));
558
+ t->memory_owner.Reset();
544
559
  // Must be the last line.
545
560
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "destroy");
546
561
  }
@@ -555,13 +570,13 @@ static void close_transport_locked(grpc_chttp2_transport* t,
555
570
  grpc_error_handle error) {
556
571
  end_all_the_calls(t, GRPC_ERROR_REF(error));
557
572
  cancel_pings(t, GRPC_ERROR_REF(error));
558
- if (t->closed_with_error == GRPC_ERROR_NONE) {
573
+ if (GRPC_ERROR_IS_NONE(t->closed_with_error)) {
559
574
  if (!grpc_error_has_clear_grpc_status(error)) {
560
575
  error = grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS,
561
576
  GRPC_STATUS_UNAVAILABLE);
562
577
  }
563
578
  if (t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE) {
564
- if (t->close_transport_on_writes_finished == GRPC_ERROR_NONE) {
579
+ if (GRPC_ERROR_IS_NONE(t->close_transport_on_writes_finished)) {
565
580
  t->close_transport_on_writes_finished =
566
581
  GRPC_ERROR_CREATE_FROM_STATIC_STRING(
567
582
  "Delayed close due to in-progress write");
@@ -570,7 +585,7 @@ static void close_transport_locked(grpc_chttp2_transport* t,
570
585
  grpc_error_add_child(t->close_transport_on_writes_finished, error);
571
586
  return;
572
587
  }
573
- GPR_ASSERT(error != GRPC_ERROR_NONE);
588
+ GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
574
589
  t->closed_with_error = GRPC_ERROR_REF(error);
575
590
  connectivity_state_set(t, GRPC_CHANNEL_SHUTDOWN, absl::Status(),
576
591
  "close_transport");
@@ -647,29 +662,23 @@ grpc_chttp2_stream::grpc_chttp2_stream(grpc_chttp2_transport* t,
647
662
  refcount(refcount),
648
663
  reffer(this),
649
664
  initial_metadata_buffer(arena),
650
- trailing_metadata_buffer(arena) {
665
+ trailing_metadata_buffer(arena),
666
+ flow_control(&t->flow_control) {
651
667
  if (server_data) {
652
668
  id = static_cast<uint32_t>(reinterpret_cast<uintptr_t>(server_data));
653
669
  *t->accepting_stream = this;
654
670
  grpc_chttp2_stream_map_add(&t->stream_map, id, this);
655
671
  post_destructive_reclaimer(t);
656
672
  }
657
- if (t->flow_control->flow_control_enabled()) {
658
- flow_control.Init<grpc_core::chttp2::StreamFlowControl>(
659
- static_cast<grpc_core::chttp2::TransportFlowControl*>(
660
- t->flow_control.get()),
661
- this);
662
- } else {
663
- flow_control.Init<grpc_core::chttp2::StreamFlowControlDisabled>();
664
- }
665
673
 
666
674
  grpc_slice_buffer_init(&frame_storage);
667
- grpc_slice_buffer_init(&unprocessed_incoming_frames_buffer);
668
675
  grpc_slice_buffer_init(&flow_controlled_buffer);
669
- GRPC_CLOSURE_INIT(&reset_byte_stream, ::reset_byte_stream, this, nullptr);
670
676
  }
671
677
 
672
678
  grpc_chttp2_stream::~grpc_chttp2_stream() {
679
+ grpc_chttp2_list_remove_stalled_by_stream(t, this);
680
+ grpc_chttp2_list_remove_stalled_by_transport(t, this);
681
+
673
682
  if (t->channelz_socket != nullptr) {
674
683
  if ((t->is_client && eos_received) || (!t->is_client && eos_sent)) {
675
684
  t->channelz_socket->RecordStreamSucceeded();
@@ -683,18 +692,10 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
683
692
  GPR_ASSERT(grpc_chttp2_stream_map_find(&t->stream_map, id) == nullptr);
684
693
  }
685
694
 
686
- grpc_slice_buffer_destroy_internal(&unprocessed_incoming_frames_buffer);
687
695
  grpc_slice_buffer_destroy_internal(&frame_storage);
688
- if (stream_compression_method != GRPC_STREAM_COMPRESSION_IDENTITY_COMPRESS) {
689
- grpc_slice_buffer_destroy_internal(&compressed_data_buffer);
690
- }
691
- if (stream_decompression_method !=
692
- GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS) {
693
- grpc_slice_buffer_destroy_internal(&decompressed_data_buffer);
694
- }
695
696
 
696
697
  for (int i = 0; i < STREAM_LIST_COUNT; i++) {
697
- if (GPR_UNLIKELY(included[i])) {
698
+ if (GPR_UNLIKELY(included.is_set(i))) {
698
699
  gpr_log(GPR_ERROR, "%s stream %d still included in list %d",
699
700
  t->is_client ? "client" : "server", id, i);
700
701
  abort();
@@ -702,7 +703,6 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
702
703
  }
703
704
 
704
705
  GPR_ASSERT(send_initial_metadata_finished == nullptr);
705
- GPR_ASSERT(fetching_send_message == nullptr);
706
706
  GPR_ASSERT(send_trailing_metadata_finished == nullptr);
707
707
  GPR_ASSERT(recv_initial_metadata_ready == nullptr);
708
708
  GPR_ASSERT(recv_message_ready == nullptr);
@@ -710,11 +710,6 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
710
710
  grpc_slice_buffer_destroy_internal(&flow_controlled_buffer);
711
711
  GRPC_ERROR_UNREF(read_closed_error);
712
712
  GRPC_ERROR_UNREF(write_closed_error);
713
- GRPC_ERROR_UNREF(byte_stream_error);
714
- flow_control.Destroy();
715
- if (!t->is_client) {
716
- grpc_resource_user_free(t->resource_user, GRPC_RESOURCE_QUOTA_CALL_SIZE);
717
- }
718
713
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "stream");
719
714
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, destroy_stream_arg, GRPC_ERROR_NONE);
720
715
  }
@@ -739,18 +734,6 @@ static void destroy_stream(grpc_transport* gt, grpc_stream* gs,
739
734
  GPR_TIMER_SCOPE("destroy_stream", 0);
740
735
  grpc_chttp2_transport* t = reinterpret_cast<grpc_chttp2_transport*>(gt);
741
736
  grpc_chttp2_stream* s = reinterpret_cast<grpc_chttp2_stream*>(gs);
742
- if (s->stream_compression_method !=
743
- GRPC_STREAM_COMPRESSION_IDENTITY_COMPRESS &&
744
- s->stream_compression_ctx != nullptr) {
745
- grpc_stream_compression_context_destroy(s->stream_compression_ctx);
746
- s->stream_compression_ctx = nullptr;
747
- }
748
- if (s->stream_decompression_method !=
749
- GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS &&
750
- s->stream_decompression_ctx != nullptr) {
751
- grpc_stream_compression_context_destroy(s->stream_decompression_ctx);
752
- s->stream_decompression_ctx = nullptr;
753
- }
754
737
 
755
738
  s->destroy_stream_arg = then_schedule_closure;
756
739
  t->combiner->Run(
@@ -763,18 +746,6 @@ grpc_chttp2_stream* grpc_chttp2_parsing_accept_stream(grpc_chttp2_transport* t,
763
746
  if (t->accept_stream_cb == nullptr) {
764
747
  return nullptr;
765
748
  }
766
- // Don't accept the stream if memory quota doesn't allow. Note that we should
767
- // simply refuse the stream here instead of canceling the stream after it's
768
- // accepted since the latter will create the call which costs much memory.
769
- GPR_ASSERT(t->resource_user != nullptr);
770
- if (!grpc_resource_user_safe_alloc(t->resource_user,
771
- GRPC_RESOURCE_QUOTA_CALL_SIZE)) {
772
- gpr_log(GPR_INFO, "Memory exhausted, rejecting the stream.");
773
- grpc_chttp2_add_rst_stream_to_next_write(t, id, GRPC_HTTP2_REFUSED_STREAM,
774
- nullptr);
775
- grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM);
776
- return nullptr;
777
- }
778
749
  grpc_chttp2_stream* accepting = nullptr;
779
750
  GPR_ASSERT(t->accepting_stream == nullptr);
780
751
  t->accepting_stream = &accepting;
@@ -815,7 +786,7 @@ static void set_write_state(grpc_chttp2_transport* t,
815
786
  // from peer while we had some pending writes)
816
787
  if (st == GRPC_CHTTP2_WRITE_STATE_IDLE) {
817
788
  grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &t->run_after_write);
818
- if (t->close_transport_on_writes_finished != GRPC_ERROR_NONE) {
789
+ if (!GRPC_ERROR_IS_NONE(t->close_transport_on_writes_finished)) {
819
790
  grpc_error_handle err = t->close_transport_on_writes_finished;
820
791
  t->close_transport_on_writes_finished = GRPC_ERROR_NONE;
821
792
  close_transport_locked(t, err);
@@ -865,6 +836,9 @@ static void inc_initiate_write_reason(
865
836
  case GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS:
866
837
  GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SEND_SETTINGS();
867
838
  break;
839
+ case GRPC_CHTTP2_INITIATE_WRITE_SETTINGS_ACK:
840
+ GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SETTINGS_ACK();
841
+ break;
868
842
  case GRPC_CHTTP2_INITIATE_WRITE_FLOW_CONTROL_UNSTALLED_BY_SETTING:
869
843
  GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_FLOW_CONTROL_UNSTALLED_BY_SETTING();
870
844
  break;
@@ -934,7 +908,7 @@ void grpc_chttp2_initiate_write(grpc_chttp2_transport* t,
934
908
 
935
909
  void grpc_chttp2_mark_stream_writable(grpc_chttp2_transport* t,
936
910
  grpc_chttp2_stream* s) {
937
- if (t->closed_with_error == GRPC_ERROR_NONE &&
911
+ if (GRPC_ERROR_IS_NONE(t->closed_with_error) &&
938
912
  grpc_chttp2_list_add_writable_stream(t, s)) {
939
913
  GRPC_CHTTP2_STREAM_REF(s, "chttp2_writing:become");
940
914
  }
@@ -954,7 +928,7 @@ static void write_action_begin_locked(void* gt,
954
928
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(gt);
955
929
  GPR_ASSERT(t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE);
956
930
  grpc_chttp2_begin_write_result r;
957
- if (t->closed_with_error != GRPC_ERROR_NONE) {
931
+ if (!GRPC_ERROR_IS_NONE(t->closed_with_error)) {
958
932
  r.writing = false;
959
933
  } else {
960
934
  r = grpc_chttp2_begin_write(t);
@@ -990,14 +964,26 @@ static void write_action_begin_locked(void* gt,
990
964
 
991
965
  static void write_action(void* gt, grpc_error_handle /*error*/) {
992
966
  GPR_TIMER_SCOPE("write_action", 0);
967
+ static bool kEnablePeerStateBasedFraming =
968
+ GPR_GLOBAL_CONFIG_GET(grpc_experimental_enable_peer_state_based_framing);
993
969
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(gt);
994
970
  void* cl = t->cl;
995
971
  t->cl = nullptr;
972
+ // If grpc_experimental_enable_peer_state_based_framing is set to true,
973
+ // choose max_frame_size as 2 * max http2 frame size of peer. If peer is under
974
+ // high memory pressure, then it would advertise a smaller max http2 frame
975
+ // size. With this logic, the sender would automatically reduce the sending
976
+ // frame size as well.
977
+ int max_frame_size =
978
+ kEnablePeerStateBasedFraming
979
+ ? 2 * t->settings[GRPC_PEER_SETTINGS]
980
+ [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE]
981
+ : INT_MAX;
996
982
  grpc_endpoint_write(
997
983
  t->ep, &t->outbuf,
998
984
  GRPC_CLOSURE_INIT(&t->write_action_end_locked, write_action_end, t,
999
985
  grpc_schedule_on_exec_ctx),
1000
- cl);
986
+ cl, max_frame_size);
1001
987
  }
1002
988
 
1003
989
  static void write_action_end(void* tp, grpc_error_handle error) {
@@ -1014,13 +1000,13 @@ static void write_action_end_locked(void* tp, grpc_error_handle error) {
1014
1000
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
1015
1001
 
1016
1002
  bool closed = false;
1017
- if (error != GRPC_ERROR_NONE) {
1003
+ if (!GRPC_ERROR_IS_NONE(error)) {
1018
1004
  close_transport_locked(t, GRPC_ERROR_REF(error));
1019
1005
  closed = true;
1020
1006
  }
1021
1007
 
1022
- if (t->sent_goaway_state == GRPC_CHTTP2_GOAWAY_SEND_SCHEDULED) {
1023
- t->sent_goaway_state = GRPC_CHTTP2_GOAWAY_SENT;
1008
+ if (t->sent_goaway_state == GRPC_CHTTP2_FINAL_GOAWAY_SEND_SCHEDULED) {
1009
+ t->sent_goaway_state = GRPC_CHTTP2_FINAL_GOAWAY_SENT;
1024
1010
  closed = true;
1025
1011
  if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
1026
1012
  close_transport_locked(
@@ -1075,12 +1061,25 @@ static void queue_setting_update(grpc_chttp2_transport* t,
1075
1061
  }
1076
1062
  }
1077
1063
 
1064
+ // Cancel out streams that haven't yet started if we have received a GOAWAY
1065
+ static void cancel_unstarted_streams(grpc_chttp2_transport* t,
1066
+ grpc_error_handle error) {
1067
+ grpc_chttp2_stream* s;
1068
+ while (grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
1069
+ s->trailing_metadata_buffer.Set(
1070
+ grpc_core::GrpcStreamNetworkState(),
1071
+ grpc_core::GrpcStreamNetworkState::kNotSentOnWire);
1072
+ grpc_chttp2_cancel_stream(t, s, GRPC_ERROR_REF(error));
1073
+ }
1074
+ GRPC_ERROR_UNREF(error);
1075
+ }
1076
+
1078
1077
  void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1079
1078
  uint32_t goaway_error,
1080
1079
  uint32_t last_stream_id,
1081
1080
  absl::string_view goaway_text) {
1082
1081
  // Discard the error from a previous goaway frame (if any)
1083
- if (t->goaway_error != GRPC_ERROR_NONE) {
1082
+ if (!GRPC_ERROR_IS_NONE(t->goaway_error)) {
1084
1083
  GRPC_ERROR_UNREF(t->goaway_error);
1085
1084
  }
1086
1085
  t->goaway_error = grpc_error_set_str(
@@ -1100,6 +1099,24 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1100
1099
  gpr_log(GPR_INFO, "%s: Got goaway [%d] err=%s", t->peer_string.c_str(),
1101
1100
  goaway_error, grpc_error_std_string(t->goaway_error).c_str());
1102
1101
  }
1102
+ if (t->is_client) {
1103
+ cancel_unstarted_streams(t, GRPC_ERROR_REF(t->goaway_error));
1104
+ // Cancel all unseen streams
1105
+ grpc_chttp2_stream_map_for_each(
1106
+ &t->stream_map,
1107
+ [](void* user_data, uint32_t /* key */, void* stream) {
1108
+ uint32_t last_stream_id = *(static_cast<uint32_t*>(user_data));
1109
+ grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(stream);
1110
+ if (s->id > last_stream_id) {
1111
+ s->trailing_metadata_buffer.Set(
1112
+ grpc_core::GrpcStreamNetworkState(),
1113
+ grpc_core::GrpcStreamNetworkState::kNotSeenByServer);
1114
+ grpc_chttp2_cancel_stream(s->t, s,
1115
+ GRPC_ERROR_REF(s->t->goaway_error));
1116
+ }
1117
+ },
1118
+ &last_stream_id);
1119
+ }
1103
1120
  absl::Status status = grpc_error_to_absl_status(t->goaway_error);
1104
1121
  // When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug
1105
1122
  // data equal to "too_many_pings", it should log the occurrence at a log level
@@ -1111,34 +1128,29 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1111
1128
  gpr_log(GPR_ERROR,
1112
1129
  "Received a GOAWAY with error code ENHANCE_YOUR_CALM and debug "
1113
1130
  "data equal to \"too_many_pings\"");
1114
- double current_keepalive_time_ms = static_cast<double>(t->keepalive_time);
1115
- constexpr int max_keepalive_time_ms =
1131
+ constexpr int max_keepalive_time_millis =
1116
1132
  INT_MAX / KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
1117
- t->keepalive_time =
1118
- current_keepalive_time_ms > static_cast<double>(max_keepalive_time_ms)
1119
- ? GRPC_MILLIS_INF_FUTURE
1120
- : static_cast<grpc_millis>(current_keepalive_time_ms *
1121
- KEEPALIVE_TIME_BACKOFF_MULTIPLIER);
1133
+ int throttled_keepalive_time =
1134
+ t->keepalive_time.millis() > max_keepalive_time_millis
1135
+ ? INT_MAX
1136
+ : t->keepalive_time.millis() * KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
1122
1137
  status.SetPayload(grpc_core::kKeepaliveThrottlingKey,
1123
- absl::Cord(std::to_string(t->keepalive_time)));
1138
+ absl::Cord(std::to_string(throttled_keepalive_time)));
1124
1139
  }
1125
1140
  // lie: use transient failure from the transport to indicate goaway has been
1126
1141
  // received.
1127
- connectivity_state_set(t, GRPC_CHANNEL_TRANSIENT_FAILURE, status,
1128
- "got_goaway");
1142
+ if (!grpc_core::test_only_disable_transient_failure_state_notification) {
1143
+ connectivity_state_set(t, GRPC_CHANNEL_TRANSIENT_FAILURE, status,
1144
+ "got_goaway");
1145
+ }
1129
1146
  }
1130
1147
 
1131
1148
  static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1132
1149
  grpc_chttp2_stream* s;
1133
- // cancel out streams that haven't yet started if we have received a GOAWAY
1134
- if (t->goaway_error != GRPC_ERROR_NONE) {
1135
- while (grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
1136
- grpc_chttp2_cancel_stream(
1137
- t, s,
1138
- grpc_error_set_int(
1139
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("GOAWAY received"),
1140
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
1141
- }
1150
+ // maybe cancel out streams that haven't yet started if we have received a
1151
+ // GOAWAY
1152
+ if (!GRPC_ERROR_IS_NONE(t->goaway_error)) {
1153
+ cancel_unstarted_streams(t, GRPC_ERROR_REF(t->goaway_error));
1142
1154
  return;
1143
1155
  }
1144
1156
  // start streams where we have free grpc_chttp2_stream ids and free
@@ -1173,6 +1185,9 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1173
1185
  // cancel out streams that will never be started
1174
1186
  if (t->next_stream_id >= MAX_CLIENT_STREAM_ID) {
1175
1187
  while (grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
1188
+ s->trailing_metadata_buffer.Set(
1189
+ grpc_core::GrpcStreamNetworkState(),
1190
+ grpc_core::GrpcStreamNetworkState::kNotSentOnWire);
1176
1191
  grpc_chttp2_cancel_stream(
1177
1192
  t, s,
1178
1193
  grpc_error_set_int(
@@ -1198,6 +1213,12 @@ static grpc_closure* add_closure_barrier(grpc_closure* closure) {
1198
1213
  static void null_then_sched_closure(grpc_closure** closure) {
1199
1214
  grpc_closure* c = *closure;
1200
1215
  *closure = nullptr;
1216
+ // null_then_schedule_closure might be run during a start_batch which might
1217
+ // subsequently examine the batch for more operations contained within.
1218
+ // However, the closure run might make it back to the call object, push a
1219
+ // completion, have the application see it, and make a new operation on the
1220
+ // call which recycles the batch BEFORE the call to start_batch completes,
1221
+ // forcing a race.
1201
1222
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, c, GRPC_ERROR_NONE);
1202
1223
  }
1203
1224
 
@@ -1226,137 +1247,44 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1226
1247
  desc, grpc_error_std_string(error).c_str(),
1227
1248
  write_state_name(t->write_state));
1228
1249
  }
1229
- if (error != GRPC_ERROR_NONE) {
1230
- if (closure->error_data.error == GRPC_ERROR_NONE) {
1231
- closure->error_data.error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1250
+ if (!GRPC_ERROR_IS_NONE(error)) {
1251
+ grpc_error_handle cl_err =
1252
+ grpc_core::internal::StatusMoveFromHeapPtr(closure->error_data.error);
1253
+ if (GRPC_ERROR_IS_NONE(cl_err)) {
1254
+ cl_err = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1232
1255
  "Error in HTTP transport completing operation");
1233
- closure->error_data.error =
1234
- grpc_error_set_str(closure->error_data.error,
1235
- GRPC_ERROR_STR_TARGET_ADDRESS, t->peer_string);
1256
+ cl_err = grpc_error_set_str(cl_err, GRPC_ERROR_STR_TARGET_ADDRESS,
1257
+ t->peer_string);
1236
1258
  }
1237
- closure->error_data.error =
1238
- grpc_error_add_child(closure->error_data.error, error);
1259
+ cl_err = grpc_error_add_child(cl_err, error);
1260
+ closure->error_data.error = grpc_core::internal::StatusAllocHeapPtr(cl_err);
1239
1261
  }
1240
1262
  if (closure->next_data.scratch < CLOSURE_BARRIER_FIRST_REF_BIT) {
1241
1263
  if ((t->write_state == GRPC_CHTTP2_WRITE_STATE_IDLE) ||
1242
1264
  !(closure->next_data.scratch & CLOSURE_BARRIER_MAY_COVER_WRITE)) {
1243
1265
  // Using GRPC_CLOSURE_SCHED instead of GRPC_CLOSURE_RUN to avoid running
1244
1266
  // closures earlier than when it is safe to do so.
1245
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure,
1246
- closure->error_data.error);
1267
+ grpc_error_handle run_error =
1268
+ grpc_core::internal::StatusMoveFromHeapPtr(closure->error_data.error);
1269
+ closure->error_data.error = 0;
1270
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, run_error);
1247
1271
  } else {
1248
- grpc_closure_list_append(&t->run_after_write, closure,
1249
- closure->error_data.error);
1272
+ grpc_closure_list_append(&t->run_after_write, closure);
1250
1273
  }
1251
1274
  }
1252
1275
  }
1253
1276
 
1254
1277
  static bool contains_non_ok_status(grpc_metadata_batch* batch) {
1255
- if (batch->legacy_index()->named.grpc_status != nullptr) {
1256
- return !grpc_mdelem_static_value_eq(
1257
- batch->legacy_index()->named.grpc_status->md,
1258
- GRPC_MDELEM_GRPC_STATUS_0);
1259
- }
1260
- return false;
1261
- }
1262
-
1263
- static void maybe_become_writable_due_to_send_msg(grpc_chttp2_transport* t,
1264
- grpc_chttp2_stream* s) {
1265
- if (s->id != 0 && (!s->write_buffering ||
1266
- s->flow_controlled_buffer.length > t->write_buffer_size)) {
1267
- grpc_chttp2_mark_stream_writable(t, s);
1268
- grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_SEND_MESSAGE);
1269
- }
1270
- }
1271
-
1272
- static void add_fetched_slice_locked(grpc_chttp2_transport* t,
1273
- grpc_chttp2_stream* s) {
1274
- s->fetched_send_message_length +=
1275
- static_cast<uint32_t> GRPC_SLICE_LENGTH(s->fetching_slice);
1276
- grpc_slice_buffer_add(&s->flow_controlled_buffer, s->fetching_slice);
1277
- maybe_become_writable_due_to_send_msg(t, s);
1278
- }
1279
-
1280
- static void continue_fetching_send_locked(grpc_chttp2_transport* t,
1281
- grpc_chttp2_stream* s) {
1282
- for (;;) {
1283
- if (s->fetching_send_message == nullptr) {
1284
- // Stream was cancelled before message fetch completed
1285
- abort(); /* TODO(ctiller): what cleanup here? */
1286
- }
1287
- if (s->fetched_send_message_length == s->fetching_send_message->length()) {
1288
- int64_t notify_offset = s->next_message_end_offset;
1289
- if (notify_offset <= s->flow_controlled_bytes_written) {
1290
- grpc_chttp2_complete_closure_step(
1291
- t, s, &s->fetching_send_message_finished, GRPC_ERROR_NONE,
1292
- "fetching_send_message_finished");
1293
- } else {
1294
- grpc_chttp2_write_cb* cb = t->write_cb_pool;
1295
- if (cb == nullptr) {
1296
- cb = static_cast<grpc_chttp2_write_cb*>(gpr_malloc(sizeof(*cb)));
1297
- } else {
1298
- t->write_cb_pool = cb->next;
1299
- }
1300
- cb->call_at_byte = notify_offset;
1301
- cb->closure = s->fetching_send_message_finished;
1302
- s->fetching_send_message_finished = nullptr;
1303
- grpc_chttp2_write_cb** list =
1304
- s->fetching_send_message->flags() & GRPC_WRITE_THROUGH
1305
- ? &s->on_write_finished_cbs
1306
- : &s->on_flow_controlled_cbs;
1307
- cb->next = *list;
1308
- *list = cb;
1309
- }
1310
- s->fetching_send_message.reset();
1311
- return; /* early out */
1312
- } else if (s->fetching_send_message->Next(
1313
- UINT32_MAX, GRPC_CLOSURE_INIT(&s->complete_fetch_locked,
1314
- ::complete_fetch, s,
1315
- grpc_schedule_on_exec_ctx))) {
1316
- grpc_error_handle error =
1317
- s->fetching_send_message->Pull(&s->fetching_slice);
1318
- if (error != GRPC_ERROR_NONE) {
1319
- s->fetching_send_message.reset();
1320
- grpc_chttp2_cancel_stream(t, s, error);
1321
- } else {
1322
- add_fetched_slice_locked(t, s);
1323
- }
1324
- }
1325
- }
1326
- }
1327
-
1328
- static void complete_fetch(void* gs, grpc_error_handle error) {
1329
- grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
1330
- s->t->combiner->Run(GRPC_CLOSURE_INIT(&s->complete_fetch_locked,
1331
- ::complete_fetch_locked, s, nullptr),
1332
- GRPC_ERROR_REF(error));
1333
- }
1334
-
1335
- static void complete_fetch_locked(void* gs, grpc_error_handle error) {
1336
- grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
1337
- grpc_chttp2_transport* t = s->t;
1338
- if (error == GRPC_ERROR_NONE) {
1339
- error = s->fetching_send_message->Pull(&s->fetching_slice);
1340
- if (error == GRPC_ERROR_NONE) {
1341
- add_fetched_slice_locked(t, s);
1342
- continue_fetching_send_locked(t, s);
1343
- }
1344
- }
1345
- if (error != GRPC_ERROR_NONE) {
1346
- s->fetching_send_message.reset();
1347
- grpc_chttp2_cancel_stream(t, s, error);
1348
- }
1278
+ return batch->get(grpc_core::GrpcStatusMetadata()).value_or(GRPC_STATUS_OK) !=
1279
+ GRPC_STATUS_OK;
1349
1280
  }
1350
1281
 
1351
1282
  static void log_metadata(const grpc_metadata_batch* md_batch, uint32_t id,
1352
1283
  bool is_client, bool is_initial) {
1353
- md_batch->ForEach([=](grpc_mdelem md) {
1354
- char* key = grpc_slice_to_c_string(GRPC_MDKEY(md));
1355
- char* value = grpc_slice_to_c_string(GRPC_MDVALUE(md));
1356
- gpr_log(GPR_INFO, "HTTP:%d:%s:%s: %s: %s", id, is_initial ? "HDR" : "TRL",
1357
- is_client ? "CLI" : "SVR", key, value);
1358
- gpr_free(key);
1359
- gpr_free(value);
1284
+ const std::string prefix = absl::StrCat(
1285
+ "HTTP:", id, is_initial ? ":HDR" : ":TRL", is_client ? ":CLI:" : ":SVR:");
1286
+ md_batch->Log([&prefix](absl::string_view key, absl::string_view value) {
1287
+ gpr_log(GPR_INFO, "%s", absl::StrCat(prefix, key, ": ", value).c_str());
1360
1288
  });
1361
1289
  }
1362
1290
 
@@ -1376,8 +1304,10 @@ static void perform_stream_op_locked(void* stream_op,
1376
1304
  s->context = op->payload->context;
1377
1305
  s->traced = op->is_traced;
1378
1306
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
1379
- gpr_log(GPR_INFO, "perform_stream_op_locked: %s; on_complete = %p",
1380
- grpc_transport_stream_op_batch_string(op).c_str(), op->on_complete);
1307
+ gpr_log(GPR_INFO,
1308
+ "perform_stream_op_locked[s=%p; op=%p]: %s; on_complete = %p", s,
1309
+ op, grpc_transport_stream_op_batch_string(op).c_str(),
1310
+ op->on_complete);
1381
1311
  if (op->send_initial_metadata) {
1382
1312
  log_metadata(op_payload->send_initial_metadata.send_initial_metadata,
1383
1313
  s->id, t->is_client, true);
@@ -1394,7 +1324,7 @@ static void perform_stream_op_locked(void* stream_op,
1394
1324
  // This batch has send ops. Use final_data as a barrier until enqueue time;
1395
1325
  // the initial counter is dropped at the end of this function.
1396
1326
  on_complete->next_data.scratch = CLOSURE_BARRIER_FIRST_REF_BIT;
1397
- on_complete->error_data.error = GRPC_ERROR_NONE;
1327
+ on_complete->error_data.error = 0;
1398
1328
  }
1399
1329
 
1400
1330
  if (op->cancel_stream) {
@@ -1410,23 +1340,6 @@ static void perform_stream_op_locked(void* stream_op,
1410
1340
  GPR_ASSERT(s->send_initial_metadata_finished == nullptr);
1411
1341
  on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
1412
1342
 
1413
- // Identify stream compression
1414
- if (op_payload->send_initial_metadata.send_initial_metadata->legacy_index()
1415
- ->named.content_encoding == nullptr ||
1416
- grpc_stream_compression_method_parse(
1417
- GRPC_MDVALUE(
1418
- op_payload->send_initial_metadata.send_initial_metadata
1419
- ->legacy_index()
1420
- ->named.content_encoding->md),
1421
- true, &s->stream_compression_method) == 0) {
1422
- s->stream_compression_method = GRPC_STREAM_COMPRESSION_IDENTITY_COMPRESS;
1423
- }
1424
- if (s->stream_compression_method !=
1425
- GRPC_STREAM_COMPRESSION_IDENTITY_COMPRESS) {
1426
- s->uncompressed_data_size = 0;
1427
- s->stream_compression_ctx = nullptr;
1428
- grpc_slice_buffer_init(&s->compressed_data_buffer);
1429
- }
1430
1343
  s->send_initial_metadata_finished = add_closure_barrier(on_complete);
1431
1344
  s->send_initial_metadata =
1432
1345
  op_payload->send_initial_metadata.send_initial_metadata;
@@ -1434,18 +1347,21 @@ static void perform_stream_op_locked(void* stream_op,
1434
1347
  s->deadline = std::min(
1435
1348
  s->deadline,
1436
1349
  s->send_initial_metadata->get(grpc_core::GrpcTimeoutMetadata())
1437
- .value_or(GRPC_MILLIS_INF_FUTURE));
1350
+ .value_or(grpc_core::Timestamp::InfFuture()));
1438
1351
  }
1439
1352
  if (contains_non_ok_status(s->send_initial_metadata)) {
1440
1353
  s->seen_error = true;
1441
1354
  }
1442
1355
  if (!s->write_closed) {
1443
1356
  if (t->is_client) {
1444
- if (t->closed_with_error == GRPC_ERROR_NONE) {
1357
+ if (GRPC_ERROR_IS_NONE(t->closed_with_error)) {
1445
1358
  GPR_ASSERT(s->id == 0);
1446
1359
  grpc_chttp2_list_add_waiting_for_concurrency(t, s);
1447
1360
  maybe_start_some_streams(t);
1448
1361
  } else {
1362
+ s->trailing_metadata_buffer.Set(
1363
+ grpc_core::GrpcStreamNetworkState(),
1364
+ grpc_core::GrpcStreamNetworkState::kNotSentOnWire);
1449
1365
  grpc_chttp2_cancel_stream(
1450
1366
  t, s,
1451
1367
  grpc_error_set_int(
@@ -1457,8 +1373,7 @@ static void perform_stream_op_locked(void* stream_op,
1457
1373
  GPR_ASSERT(s->id != 0);
1458
1374
  grpc_chttp2_mark_stream_writable(t, s);
1459
1375
  if (!(op->send_message &&
1460
- (op->payload->send_message.send_message->flags() &
1461
- GRPC_WRITE_BUFFER_HINT))) {
1376
+ (op->payload->send_message.flags & GRPC_WRITE_BUFFER_HINT))) {
1462
1377
  grpc_chttp2_initiate_write(
1463
1378
  t, GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA);
1464
1379
  }
@@ -1482,32 +1397,28 @@ static void perform_stream_op_locked(void* stream_op,
1482
1397
  GRPC_STATS_INC_HTTP2_OP_SEND_MESSAGE();
1483
1398
  t->num_messages_in_next_write++;
1484
1399
  GRPC_STATS_INC_HTTP2_SEND_MESSAGE_SIZE(
1485
- op->payload->send_message.send_message->length());
1400
+ op->payload->send_message.send_message->Length());
1486
1401
  on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
1487
- s->fetching_send_message_finished = add_closure_barrier(op->on_complete);
1402
+ s->send_message_finished = add_closure_barrier(op->on_complete);
1403
+ const uint32_t flags = op_payload->send_message.flags;
1488
1404
  if (s->write_closed) {
1489
1405
  op->payload->send_message.stream_write_closed = true;
1490
1406
  // We should NOT return an error here, so as to avoid a cancel OP being
1491
1407
  // started. The surface layer will notice that the stream has been closed
1492
1408
  // for writes and fail the send message op.
1493
- op->payload->send_message.send_message.reset();
1494
- grpc_chttp2_complete_closure_step(
1495
- t, s, &s->fetching_send_message_finished, GRPC_ERROR_NONE,
1496
- "fetching_send_message_finished");
1409
+ grpc_chttp2_complete_closure_step(t, s, &s->send_message_finished,
1410
+ GRPC_ERROR_NONE,
1411
+ "fetching_send_message_finished");
1497
1412
  } else {
1498
- GPR_ASSERT(s->fetching_send_message == nullptr);
1499
1413
  uint8_t* frame_hdr = grpc_slice_buffer_tiny_add(
1500
1414
  &s->flow_controlled_buffer, GRPC_HEADER_SIZE_IN_BYTES);
1501
- uint32_t flags = op_payload->send_message.send_message->flags();
1502
1415
  frame_hdr[0] = (flags & GRPC_WRITE_INTERNAL_COMPRESS) != 0;
1503
- size_t len = op_payload->send_message.send_message->length();
1416
+ size_t len = op_payload->send_message.send_message->Length();
1504
1417
  frame_hdr[1] = static_cast<uint8_t>(len >> 24);
1505
1418
  frame_hdr[2] = static_cast<uint8_t>(len >> 16);
1506
1419
  frame_hdr[3] = static_cast<uint8_t>(len >> 8);
1507
1420
  frame_hdr[4] = static_cast<uint8_t>(len);
1508
- s->fetching_send_message =
1509
- std::move(op_payload->send_message.send_message);
1510
- s->fetched_send_message_length = 0;
1421
+
1511
1422
  s->next_message_end_offset =
1512
1423
  s->flow_controlled_bytes_written +
1513
1424
  static_cast<int64_t>(s->flow_controlled_buffer.length) +
@@ -1518,8 +1429,44 @@ static void perform_stream_op_locked(void* stream_op,
1518
1429
  } else {
1519
1430
  s->write_buffering = false;
1520
1431
  }
1521
- continue_fetching_send_locked(t, s);
1522
- maybe_become_writable_due_to_send_msg(t, s);
1432
+
1433
+ grpc_slice* const slices =
1434
+ op_payload->send_message.send_message->c_slice_buffer()->slices;
1435
+ grpc_slice* const end =
1436
+ slices + op_payload->send_message.send_message->Count();
1437
+ for (grpc_slice* slice = slices; slice != end; slice++) {
1438
+ grpc_slice_buffer_add(&s->flow_controlled_buffer,
1439
+ grpc_slice_ref_internal(*slice));
1440
+ }
1441
+
1442
+ int64_t notify_offset = s->next_message_end_offset;
1443
+ if (notify_offset <= s->flow_controlled_bytes_written) {
1444
+ grpc_chttp2_complete_closure_step(t, s, &s->send_message_finished,
1445
+ GRPC_ERROR_NONE,
1446
+ "fetching_send_message_finished");
1447
+ } else {
1448
+ grpc_chttp2_write_cb* cb = t->write_cb_pool;
1449
+ if (cb == nullptr) {
1450
+ cb = static_cast<grpc_chttp2_write_cb*>(gpr_malloc(sizeof(*cb)));
1451
+ } else {
1452
+ t->write_cb_pool = cb->next;
1453
+ }
1454
+ cb->call_at_byte = notify_offset;
1455
+ cb->closure = s->send_message_finished;
1456
+ s->send_message_finished = nullptr;
1457
+ grpc_chttp2_write_cb** list = flags & GRPC_WRITE_THROUGH
1458
+ ? &s->on_write_finished_cbs
1459
+ : &s->on_flow_controlled_cbs;
1460
+ cb->next = *list;
1461
+ *list = cb;
1462
+ }
1463
+
1464
+ if (s->id != 0 &&
1465
+ (!s->write_buffering ||
1466
+ s->flow_controlled_buffer.length > t->write_buffer_size)) {
1467
+ grpc_chttp2_mark_stream_writable(t, s);
1468
+ grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_SEND_MESSAGE);
1469
+ }
1523
1470
  }
1524
1471
  }
1525
1472
 
@@ -1573,28 +1520,14 @@ static void perform_stream_op_locked(void* stream_op,
1573
1520
 
1574
1521
  if (op->recv_message) {
1575
1522
  GRPC_STATS_INC_HTTP2_OP_RECV_MESSAGE();
1576
- size_t before = 0;
1577
1523
  GPR_ASSERT(s->recv_message_ready == nullptr);
1578
- GPR_ASSERT(!s->pending_byte_stream);
1579
1524
  s->recv_message_ready = op_payload->recv_message.recv_message_ready;
1580
1525
  s->recv_message = op_payload->recv_message.recv_message;
1526
+ s->recv_message->emplace();
1527
+ s->recv_message_flags = op_payload->recv_message.flags;
1581
1528
  s->call_failed_before_recv_message =
1582
1529
  op_payload->recv_message.call_failed_before_recv_message;
1583
- if (s->id != 0) {
1584
- if (!s->read_closed) {
1585
- before = s->frame_storage.length +
1586
- s->unprocessed_incoming_frames_buffer.length;
1587
- }
1588
- }
1589
- grpc_chttp2_maybe_complete_recv_message(t, s);
1590
- if (s->id != 0) {
1591
- if (!s->read_closed && s->frame_storage.length == 0) {
1592
- size_t after = s->unprocessed_incoming_frames_buffer_cached_length;
1593
- s->flow_control->IncomingByteStreamUpdate(GRPC_HEADER_SIZE_IN_BYTES,
1594
- before - after);
1595
- grpc_chttp2_act_on_flowctl_action(s->flow_control->MakeAction(), t, s);
1596
- }
1597
- }
1530
+ grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
1598
1531
  }
1599
1532
 
1600
1533
  if (op->recv_trailing_metadata) {
@@ -1638,7 +1571,7 @@ static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
1638
1571
  }
1639
1572
 
1640
1573
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
1641
- gpr_log(GPR_INFO, "perform_stream_op[s=%p]: %s", s,
1574
+ gpr_log(GPR_INFO, "perform_stream_op[s=%p; op=%p]: %s", s, op,
1642
1575
  grpc_transport_stream_op_batch_string(op).c_str());
1643
1576
  }
1644
1577
 
@@ -1653,7 +1586,7 @@ static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error) {
1653
1586
  // callback remaining pings: they're not allowed to call into the transport,
1654
1587
  // and maybe they hold resources that need to be freed
1655
1588
  grpc_chttp2_ping_queue* pq = &t->ping_queue;
1656
- GPR_ASSERT(error != GRPC_ERROR_NONE);
1589
+ GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
1657
1590
  for (size_t j = 0; j < GRPC_CHTTP2_PCL_COUNT; j++) {
1658
1591
  grpc_closure_list_fail_all(&pq->lists[j], GRPC_ERROR_REF(error));
1659
1592
  grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &pq->lists[j]);
@@ -1663,7 +1596,7 @@ static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error) {
1663
1596
 
1664
1597
  static void send_ping_locked(grpc_chttp2_transport* t,
1665
1598
  grpc_closure* on_initiate, grpc_closure* on_ack) {
1666
- if (t->closed_with_error != GRPC_ERROR_NONE) {
1599
+ if (!GRPC_ERROR_IS_NONE(t->closed_with_error)) {
1667
1600
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_initiate,
1668
1601
  GRPC_ERROR_REF(t->closed_with_error));
1669
1602
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_ack,
@@ -1681,7 +1614,7 @@ static void send_ping_locked(grpc_chttp2_transport* t,
1681
1614
  // a ping in progress, the keepalive ping would piggyback onto that ping,
1682
1615
  // instead of waiting for that ping to complete and then starting a new ping.
1683
1616
  static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
1684
- if (t->closed_with_error != GRPC_ERROR_NONE) {
1617
+ if (!GRPC_ERROR_IS_NONE(t->closed_with_error)) {
1685
1618
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
1686
1619
  start_keepalive_ping_locked, t, nullptr),
1687
1620
  GRPC_ERROR_REF(t->closed_with_error));
@@ -1726,7 +1659,7 @@ void grpc_chttp2_retry_initiate_ping(void* tp, grpc_error_handle error) {
1726
1659
  static void retry_initiate_ping_locked(void* tp, grpc_error_handle error) {
1727
1660
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
1728
1661
  t->ping_state.is_delayed_ping_timer_set = false;
1729
- if (error == GRPC_ERROR_NONE) {
1662
+ if (GRPC_ERROR_IS_NONE(error)) {
1730
1663
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RETRY_SEND_PING);
1731
1664
  }
1732
1665
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "retry_initiate_ping_locked");
@@ -1746,18 +1679,129 @@ void grpc_chttp2_ack_ping(grpc_chttp2_transport* t, uint64_t id) {
1746
1679
  }
1747
1680
  }
1748
1681
 
1749
- static void send_goaway(grpc_chttp2_transport* t, grpc_error_handle error) {
1750
- // We want to log this irrespective of whether http tracing is enabled
1751
- gpr_log(GPR_DEBUG, "%s: Sending goaway err=%s", t->peer_string.c_str(),
1752
- grpc_error_std_string(error).c_str());
1753
- t->sent_goaway_state = GRPC_CHTTP2_GOAWAY_SEND_SCHEDULED;
1682
+ namespace {
1683
+
1684
+ // Fire and forget (deletes itself on completion). Does a graceful shutdown by
1685
+ // sending a GOAWAY frame with the last stream id set to 2^31-1, sending a ping
1686
+ // and waiting for an ack (effective waiting for an RTT) and then sending a
1687
+ // final GOAWAY freame with an updated last stream identifier. This helps ensure
1688
+ // that a connection can be cleanly shut down without losing requests.
1689
+ // In the event, that the client does not respond to the ping for some reason,
1690
+ // we add a 20 second deadline, after which we send the second goaway.
1691
+ class GracefulGoaway : public grpc_core::RefCounted<GracefulGoaway> {
1692
+ public:
1693
+ static void Start(grpc_chttp2_transport* t) { new GracefulGoaway(t); }
1694
+
1695
+ ~GracefulGoaway() override {
1696
+ GRPC_CHTTP2_UNREF_TRANSPORT(t_, "graceful goaway");
1697
+ }
1698
+
1699
+ private:
1700
+ explicit GracefulGoaway(grpc_chttp2_transport* t) : t_(t) {
1701
+ t->sent_goaway_state = GRPC_CHTTP2_GRACEFUL_GOAWAY;
1702
+ GRPC_CHTTP2_REF_TRANSPORT(t_, "graceful goaway");
1703
+ grpc_chttp2_goaway_append((1u << 31) - 1, 0, grpc_empty_slice(), &t->qbuf);
1704
+ send_ping_locked(
1705
+ t, nullptr, GRPC_CLOSURE_INIT(&on_ping_ack_, OnPingAck, this, nullptr));
1706
+ grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT);
1707
+ Ref().release(); // Ref for the timer
1708
+ grpc_timer_init(
1709
+ &timer_,
1710
+ grpc_core::ExecCtx::Get()->Now() + grpc_core::Duration::Seconds(20),
1711
+ GRPC_CLOSURE_INIT(&on_timer_, OnTimer, this, nullptr));
1712
+ }
1713
+
1714
+ void MaybeSendFinalGoawayLocked() {
1715
+ if (t_->sent_goaway_state != GRPC_CHTTP2_GRACEFUL_GOAWAY) {
1716
+ // We already sent the final GOAWAY.
1717
+ return;
1718
+ }
1719
+ if (t_->destroying || !GRPC_ERROR_IS_NONE(t_->closed_with_error)) {
1720
+ GRPC_CHTTP2_IF_TRACING(gpr_log(
1721
+ GPR_INFO,
1722
+ "transport:%p %s peer:%s Transport already shutting down. "
1723
+ "Graceful GOAWAY abandoned.",
1724
+ t_, t_->is_client ? "CLIENT" : "SERVER", t_->peer_string.c_str()));
1725
+ return;
1726
+ }
1727
+ // Ping completed. Send final goaway.
1728
+ GRPC_CHTTP2_IF_TRACING(
1729
+ gpr_log(GPR_INFO,
1730
+ "transport:%p %s peer:%s Graceful shutdown: Ping received. "
1731
+ "Sending final GOAWAY with stream_id:%d",
1732
+ t_, t_->is_client ? "CLIENT" : "SERVER",
1733
+ t_->peer_string.c_str(), t_->last_new_stream_id));
1734
+ t_->sent_goaway_state = GRPC_CHTTP2_FINAL_GOAWAY_SEND_SCHEDULED;
1735
+ grpc_chttp2_goaway_append(t_->last_new_stream_id, 0, grpc_empty_slice(),
1736
+ &t_->qbuf);
1737
+ grpc_chttp2_initiate_write(t_, GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT);
1738
+ }
1739
+
1740
+ static void OnPingAck(void* arg, grpc_error_handle /* error */) {
1741
+ auto* self = static_cast<GracefulGoaway*>(arg);
1742
+ self->t_->combiner->Run(
1743
+ GRPC_CLOSURE_INIT(&self->on_ping_ack_, OnPingAckLocked, self, nullptr),
1744
+ GRPC_ERROR_NONE);
1745
+ }
1746
+
1747
+ static void OnPingAckLocked(void* arg, grpc_error_handle /* error */) {
1748
+ auto* self = static_cast<GracefulGoaway*>(arg);
1749
+ grpc_timer_cancel(&self->timer_);
1750
+ self->MaybeSendFinalGoawayLocked();
1751
+ self->Unref();
1752
+ }
1753
+
1754
+ static void OnTimer(void* arg, grpc_error_handle error) {
1755
+ auto* self = static_cast<GracefulGoaway*>(arg);
1756
+ if (!GRPC_ERROR_IS_NONE(error)) {
1757
+ self->Unref();
1758
+ return;
1759
+ }
1760
+ self->t_->combiner->Run(
1761
+ GRPC_CLOSURE_INIT(&self->on_timer_, OnTimerLocked, self, nullptr),
1762
+ GRPC_ERROR_NONE);
1763
+ }
1764
+
1765
+ static void OnTimerLocked(void* arg, grpc_error_handle /* error */) {
1766
+ auto* self = static_cast<GracefulGoaway*>(arg);
1767
+ self->MaybeSendFinalGoawayLocked();
1768
+ self->Unref();
1769
+ }
1770
+
1771
+ grpc_chttp2_transport* t_;
1772
+ grpc_closure on_ping_ack_;
1773
+ grpc_timer timer_;
1774
+ grpc_closure on_timer_;
1775
+ };
1776
+
1777
+ } // namespace
1778
+
1779
+ static void send_goaway(grpc_chttp2_transport* t, grpc_error_handle error,
1780
+ bool immediate_disconnect_hint) {
1754
1781
  grpc_http2_error_code http_error;
1755
1782
  std::string message;
1756
- grpc_error_get_status(error, GRPC_MILLIS_INF_FUTURE, nullptr, &message,
1757
- &http_error, nullptr);
1758
- grpc_chttp2_goaway_append(
1759
- t->last_new_stream_id, static_cast<uint32_t>(http_error),
1760
- grpc_slice_from_cpp_string(std::move(message)), &t->qbuf);
1783
+ grpc_error_get_status(error, grpc_core::Timestamp::InfFuture(), nullptr,
1784
+ &message, &http_error, nullptr);
1785
+ if (!t->is_client && http_error == GRPC_HTTP2_NO_ERROR &&
1786
+ !immediate_disconnect_hint) {
1787
+ // Do a graceful shutdown.
1788
+ if (t->sent_goaway_state == GRPC_CHTTP2_NO_GOAWAY_SEND) {
1789
+ GracefulGoaway::Start(t);
1790
+ } else {
1791
+ // Graceful GOAWAY is already in progress.
1792
+ }
1793
+ } else if (t->sent_goaway_state == GRPC_CHTTP2_NO_GOAWAY_SEND ||
1794
+ t->sent_goaway_state == GRPC_CHTTP2_GRACEFUL_GOAWAY) {
1795
+ // We want to log this irrespective of whether http tracing is enabled
1796
+ gpr_log(GPR_DEBUG, "%s: Sending goaway err=%s", t->peer_string.c_str(),
1797
+ grpc_error_std_string(error).c_str());
1798
+ t->sent_goaway_state = GRPC_CHTTP2_FINAL_GOAWAY_SEND_SCHEDULED;
1799
+ grpc_chttp2_goaway_append(
1800
+ t->last_new_stream_id, static_cast<uint32_t>(http_error),
1801
+ grpc_slice_from_cpp_string(std::move(message)), &t->qbuf);
1802
+ } else {
1803
+ // Final GOAWAY has already been sent.
1804
+ }
1761
1805
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT);
1762
1806
  GRPC_ERROR_UNREF(error);
1763
1807
  }
@@ -1768,7 +1812,8 @@ void grpc_chttp2_add_ping_strike(grpc_chttp2_transport* t) {
1768
1812
  send_goaway(t,
1769
1813
  grpc_error_set_int(
1770
1814
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("too_many_pings"),
1771
- GRPC_ERROR_INT_HTTP2_ERROR, GRPC_HTTP2_ENHANCE_YOUR_CALM));
1815
+ GRPC_ERROR_INT_HTTP2_ERROR, GRPC_HTTP2_ENHANCE_YOUR_CALM),
1816
+ /*immediate_disconnect_hint=*/true);
1772
1817
  // The transport will be closed after the write is done
1773
1818
  close_transport_locked(
1774
1819
  t, grpc_error_set_int(
@@ -1779,7 +1824,7 @@ void grpc_chttp2_add_ping_strike(grpc_chttp2_transport* t) {
1779
1824
 
1780
1825
  void grpc_chttp2_reset_ping_clock(grpc_chttp2_transport* t) {
1781
1826
  if (!t->is_client) {
1782
- t->ping_recv_state.last_ping_recv_time = GRPC_MILLIS_INF_PAST;
1827
+ t->ping_recv_state.last_ping_recv_time = grpc_core::Timestamp::InfPast();
1783
1828
  t->ping_recv_state.ping_strikes = 0;
1784
1829
  }
1785
1830
  t->ping_state.pings_before_data_required =
@@ -1792,8 +1837,8 @@ static void perform_transport_op_locked(void* stream_op,
1792
1837
  grpc_chttp2_transport* t =
1793
1838
  static_cast<grpc_chttp2_transport*>(op->handler_private.extra_arg);
1794
1839
 
1795
- if (op->goaway_error != GRPC_ERROR_NONE) {
1796
- send_goaway(t, op->goaway_error);
1840
+ if (!GRPC_ERROR_IS_NONE(op->goaway_error)) {
1841
+ send_goaway(t, op->goaway_error, /*immediate_disconnect_hint=*/false);
1797
1842
  }
1798
1843
 
1799
1844
  if (op->set_accept_stream) {
@@ -1822,7 +1867,9 @@ static void perform_transport_op_locked(void* stream_op,
1822
1867
  t->state_tracker.RemoveWatcher(op->stop_connectivity_watch);
1823
1868
  }
1824
1869
 
1825
- if (op->disconnect_with_error != GRPC_ERROR_NONE) {
1870
+ if (!GRPC_ERROR_IS_NONE(op->disconnect_with_error)) {
1871
+ send_goaway(t, GRPC_ERROR_REF(op->disconnect_with_error),
1872
+ /*immediate_disconnect_hint=*/true);
1826
1873
  close_transport_locked(t, op->disconnect_with_error);
1827
1874
  }
1828
1875
 
@@ -1848,101 +1895,84 @@ static void perform_transport_op(grpc_transport* gt, grpc_transport_op* op) {
1848
1895
  // INPUT PROCESSING - GENERAL
1849
1896
  //
1850
1897
 
1851
- void grpc_chttp2_maybe_complete_recv_initial_metadata(
1852
- grpc_chttp2_transport* /*t*/, grpc_chttp2_stream* s) {
1898
+ void grpc_chttp2_maybe_complete_recv_initial_metadata(grpc_chttp2_transport* t,
1899
+ grpc_chttp2_stream* s) {
1853
1900
  if (s->recv_initial_metadata_ready != nullptr &&
1854
1901
  s->published_metadata[0] != GRPC_METADATA_NOT_PUBLISHED) {
1855
1902
  if (s->seen_error) {
1856
1903
  grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
1857
- if (!s->pending_byte_stream) {
1858
- grpc_slice_buffer_reset_and_unref_internal(
1859
- &s->unprocessed_incoming_frames_buffer);
1860
- }
1861
1904
  }
1862
1905
  *s->recv_initial_metadata = std::move(s->initial_metadata_buffer);
1906
+ s->recv_initial_metadata->Set(grpc_core::PeerString(), t->peer_string);
1907
+ // If we didn't receive initial metadata from the wire and instead faked a
1908
+ // status (due to stream cancellations for example), let upper layers know
1909
+ // that trailing metadata is immediately available.
1910
+ if (s->trailing_metadata_available != nullptr &&
1911
+ s->published_metadata[0] != GRPC_METADATA_PUBLISHED_FROM_WIRE &&
1912
+ s->published_metadata[1] == GRPC_METADATA_SYNTHESIZED_FROM_FAKE) {
1913
+ *s->trailing_metadata_available = true;
1914
+ s->trailing_metadata_available = nullptr;
1915
+ }
1863
1916
  null_then_sched_closure(&s->recv_initial_metadata_ready);
1864
1917
  }
1865
1918
  }
1866
1919
 
1867
- void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* /*t*/,
1920
+ void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* t,
1868
1921
  grpc_chttp2_stream* s) {
1922
+ if (s->recv_message_ready == nullptr) return;
1923
+
1924
+ grpc_core::chttp2::StreamFlowControl::IncomingUpdateContext upd(
1925
+ &s->flow_control);
1869
1926
  grpc_error_handle error = GRPC_ERROR_NONE;
1870
- if (s->recv_message_ready != nullptr) {
1871
- *s->recv_message = nullptr;
1927
+
1928
+ // Lambda is immediately invoked as a big scoped section that can be
1929
+ // exited out of at any point by returning.
1930
+ [&]() {
1872
1931
  if (s->final_metadata_requested && s->seen_error) {
1873
1932
  grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
1874
- if (!s->pending_byte_stream) {
1875
- grpc_slice_buffer_reset_and_unref_internal(
1876
- &s->unprocessed_incoming_frames_buffer);
1877
- }
1878
- }
1879
- if (!s->pending_byte_stream) {
1880
- while (s->unprocessed_incoming_frames_buffer.length > 0 ||
1881
- s->frame_storage.length > 0) {
1882
- if (s->unprocessed_incoming_frames_buffer.length == 0) {
1883
- grpc_slice_buffer_swap(&s->unprocessed_incoming_frames_buffer,
1884
- &s->frame_storage);
1885
- s->unprocessed_incoming_frames_decompressed = false;
1886
- }
1887
- if (!s->unprocessed_incoming_frames_decompressed &&
1888
- s->stream_decompression_method !=
1889
- GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS) {
1890
- GPR_ASSERT(s->decompressed_data_buffer.length == 0);
1891
- bool end_of_context;
1892
- if (!s->stream_decompression_ctx) {
1893
- s->stream_decompression_ctx =
1894
- grpc_stream_compression_context_create(
1895
- s->stream_decompression_method);
1896
- }
1897
- if (!grpc_stream_decompress(
1898
- s->stream_decompression_ctx,
1899
- &s->unprocessed_incoming_frames_buffer,
1900
- &s->decompressed_data_buffer, nullptr,
1901
- GRPC_HEADER_SIZE_IN_BYTES - s->decompressed_header_bytes,
1902
- &end_of_context)) {
1903
- grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
1904
- grpc_slice_buffer_reset_and_unref_internal(
1905
- &s->unprocessed_incoming_frames_buffer);
1906
- error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1907
- "Stream decompression error.");
1908
- } else {
1909
- s->decompressed_header_bytes += s->decompressed_data_buffer.length;
1910
- if (s->decompressed_header_bytes == GRPC_HEADER_SIZE_IN_BYTES) {
1911
- s->decompressed_header_bytes = 0;
1933
+ s->recv_message->reset();
1934
+ } else {
1935
+ if (s->frame_storage.length != 0) {
1936
+ while (true) {
1937
+ GPR_ASSERT(s->frame_storage.length > 0);
1938
+ uint32_t min_progress_size;
1939
+ auto r = grpc_deframe_unprocessed_incoming_frames(
1940
+ s, &min_progress_size, &**s->recv_message, s->recv_message_flags);
1941
+ if (absl::holds_alternative<grpc_core::Pending>(r)) {
1942
+ if (s->read_closed) {
1943
+ grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
1944
+ s->recv_message->reset();
1945
+ break;
1946
+ } else {
1947
+ upd.SetMinProgressSize(min_progress_size);
1948
+ return; // Out of lambda to enclosing function
1912
1949
  }
1913
- error = grpc_deframe_unprocessed_incoming_frames(
1914
- &s->data_parser, s, &s->decompressed_data_buffer, nullptr,
1915
- s->recv_message);
1916
- if (end_of_context) {
1917
- grpc_stream_compression_context_destroy(
1918
- s->stream_decompression_ctx);
1919
- s->stream_decompression_ctx = nullptr;
1950
+ } else {
1951
+ error = absl::get<grpc_error_handle>(r);
1952
+ if (!GRPC_ERROR_IS_NONE(error)) {
1953
+ s->seen_error = true;
1954
+ grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
1955
+ break;
1956
+ } else {
1957
+ if (t->channelz_socket != nullptr) {
1958
+ t->channelz_socket->RecordMessageReceived();
1959
+ }
1960
+ break;
1920
1961
  }
1921
1962
  }
1922
- } else {
1923
- error = grpc_deframe_unprocessed_incoming_frames(
1924
- &s->data_parser, s, &s->unprocessed_incoming_frames_buffer,
1925
- nullptr, s->recv_message);
1926
- }
1927
- if (error != GRPC_ERROR_NONE) {
1928
- s->seen_error = true;
1929
- grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
1930
- grpc_slice_buffer_reset_and_unref_internal(
1931
- &s->unprocessed_incoming_frames_buffer);
1932
- break;
1933
- } else if (*s->recv_message != nullptr) {
1934
- break;
1935
1963
  }
1964
+ } else if (s->read_closed) {
1965
+ s->recv_message->reset();
1966
+ } else {
1967
+ upd.SetMinProgressSize(GRPC_HEADER_SIZE_IN_BYTES);
1968
+ return; // Out of lambda to enclosing function
1936
1969
  }
1937
1970
  }
1938
1971
  // save the length of the buffer before handing control back to application
1939
1972
  // threads. Needed to support correct flow control bookkeeping
1940
- s->unprocessed_incoming_frames_buffer_cached_length =
1941
- s->unprocessed_incoming_frames_buffer.length;
1942
- if (error == GRPC_ERROR_NONE && *s->recv_message != nullptr) {
1973
+ if (GRPC_ERROR_IS_NONE(error) && s->recv_message->has_value()) {
1943
1974
  null_then_sched_closure(&s->recv_message_ready);
1944
1975
  } else if (s->published_metadata[1] != GRPC_METADATA_NOT_PUBLISHED) {
1945
- *s->recv_message = nullptr;
1946
1976
  if (s->call_failed_before_recv_message != nullptr) {
1947
1977
  *s->call_failed_before_recv_message =
1948
1978
  (s->published_metadata[1] != GRPC_METADATA_PUBLISHED_AT_CLOSE);
@@ -1950,7 +1980,10 @@ void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* /*t*/,
1950
1980
  null_then_sched_closure(&s->recv_message_ready);
1951
1981
  }
1952
1982
  GRPC_ERROR_UNREF(error);
1953
- }
1983
+ }();
1984
+
1985
+ upd.SetPendingSize(s->frame_storage.length);
1986
+ grpc_chttp2_act_on_flowctl_action(upd.MakeAction(), t, s);
1954
1987
  }
1955
1988
 
1956
1989
  void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
@@ -1960,60 +1993,13 @@ void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
1960
1993
  s->write_closed) {
1961
1994
  if (s->seen_error || !t->is_client) {
1962
1995
  grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
1963
- if (!s->pending_byte_stream) {
1964
- grpc_slice_buffer_reset_and_unref_internal(
1965
- &s->unprocessed_incoming_frames_buffer);
1966
- }
1967
1996
  }
1968
- bool pending_data = s->pending_byte_stream ||
1969
- s->unprocessed_incoming_frames_buffer.length > 0;
1970
- if (s->read_closed && s->frame_storage.length > 0 && !pending_data &&
1971
- !s->seen_error && s->recv_trailing_metadata_finished != nullptr) {
1972
- // Maybe some SYNC_FLUSH data is left in frame_storage. Consume them and
1973
- // maybe decompress the next 5 bytes in the stream.
1974
- if (s->stream_decompression_method ==
1975
- GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS) {
1976
- grpc_slice_buffer_move_first(
1977
- &s->frame_storage,
1978
- std::min(s->frame_storage.length,
1979
- size_t(GRPC_HEADER_SIZE_IN_BYTES)),
1980
- &s->unprocessed_incoming_frames_buffer);
1981
- if (s->unprocessed_incoming_frames_buffer.length > 0) {
1982
- s->unprocessed_incoming_frames_decompressed = true;
1983
- pending_data = true;
1984
- }
1985
- } else {
1986
- bool end_of_context;
1987
- if (!s->stream_decompression_ctx) {
1988
- s->stream_decompression_ctx = grpc_stream_compression_context_create(
1989
- s->stream_decompression_method);
1990
- }
1991
- if (!grpc_stream_decompress(
1992
- s->stream_decompression_ctx, &s->frame_storage,
1993
- &s->unprocessed_incoming_frames_buffer, nullptr,
1994
- GRPC_HEADER_SIZE_IN_BYTES, &end_of_context)) {
1995
- grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
1996
- grpc_slice_buffer_reset_and_unref_internal(
1997
- &s->unprocessed_incoming_frames_buffer);
1998
- s->seen_error = true;
1999
- } else {
2000
- if (s->unprocessed_incoming_frames_buffer.length > 0) {
2001
- s->unprocessed_incoming_frames_decompressed = true;
2002
- pending_data = true;
2003
- }
2004
- if (end_of_context) {
2005
- grpc_stream_compression_context_destroy(
2006
- s->stream_decompression_ctx);
2007
- s->stream_decompression_ctx = nullptr;
2008
- }
2009
- }
2010
- }
2011
- }
2012
- if (s->read_closed && s->frame_storage.length == 0 && !pending_data &&
1997
+ if (s->read_closed && s->frame_storage.length == 0 &&
2013
1998
  s->recv_trailing_metadata_finished != nullptr) {
2014
1999
  grpc_transport_move_stats(&s->stats, s->collecting_stats);
2015
2000
  s->collecting_stats = nullptr;
2016
2001
  *s->recv_trailing_metadata = std::move(s->trailing_metadata_buffer);
2002
+ s->recv_trailing_metadata->Set(grpc_core::PeerString(), t->peer_string);
2017
2003
  null_then_sched_closure(&s->recv_trailing_metadata_finished);
2018
2004
  }
2019
2005
  }
@@ -2028,24 +2014,10 @@ static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
2028
2014
  t->incoming_stream = nullptr;
2029
2015
  grpc_chttp2_parsing_become_skip_parser(t);
2030
2016
  }
2031
- if (s->pending_byte_stream) {
2032
- if (s->on_next != nullptr) {
2033
- grpc_core::Chttp2IncomingByteStream* bs = s->data_parser.parsing_frame;
2034
- if (error == GRPC_ERROR_NONE) {
2035
- error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
2036
- }
2037
- bs->PublishError(error);
2038
- bs->Unref();
2039
- s->data_parser.parsing_frame = nullptr;
2040
- } else {
2041
- GRPC_ERROR_UNREF(s->byte_stream_error);
2042
- s->byte_stream_error = GRPC_ERROR_REF(error);
2043
- }
2044
- }
2045
2017
 
2046
2018
  if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
2047
2019
  post_benign_reclaimer(t);
2048
- if (t->sent_goaway_state == GRPC_CHTTP2_GOAWAY_SENT) {
2020
+ if (t->sent_goaway_state == GRPC_CHTTP2_FINAL_GOAWAY_SENT) {
2049
2021
  close_transport_locked(
2050
2022
  t, GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
2051
2023
  "Last stream closed after sending GOAWAY", &error, 1));
@@ -2080,7 +2052,7 @@ void grpc_chttp2_cancel_stream(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2080
2052
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM);
2081
2053
  }
2082
2054
  }
2083
- if (due_to_error != GRPC_ERROR_NONE && !s->seen_error) {
2055
+ if (!GRPC_ERROR_IS_NONE(due_to_error) && !s->seen_error) {
2084
2056
  s->seen_error = true;
2085
2057
  }
2086
2058
  grpc_chttp2_mark_stream_closed(t, s, 1, 1, due_to_error);
@@ -2103,17 +2075,11 @@ void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2103
2075
  // about the metadata yet
2104
2076
  if (s->published_metadata[1] == GRPC_METADATA_NOT_PUBLISHED ||
2105
2077
  s->recv_trailing_metadata_finished != nullptr) {
2106
- char status_string[GPR_LTOA_MIN_BUFSIZE];
2107
- gpr_ltoa(status, status_string);
2108
- GRPC_LOG_IF_ERROR("add_status",
2109
- s->trailing_metadata_buffer.ReplaceOrAppend(
2110
- GRPC_MDSTR_GRPC_STATUS,
2111
- grpc_core::UnmanagedMemorySlice(status_string)));
2078
+ s->trailing_metadata_buffer.Set(grpc_core::GrpcStatusMetadata(), status);
2112
2079
  if (!message.empty()) {
2113
- grpc_slice message_slice = grpc_slice_from_cpp_string(std::move(message));
2114
- GRPC_LOG_IF_ERROR("add_status_message",
2115
- s->trailing_metadata_buffer.ReplaceOrAppend(
2116
- GRPC_MDSTR_GRPC_MESSAGE, message_slice));
2080
+ s->trailing_metadata_buffer.Set(
2081
+ grpc_core::GrpcMessageMetadata(),
2082
+ grpc_core::Slice::FromCopiedBuffer(message));
2117
2083
  }
2118
2084
  s->published_metadata[1] = GRPC_METADATA_SYNTHESIZED_FROM_FAKE;
2119
2085
  grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
@@ -2124,7 +2090,7 @@ void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2124
2090
 
2125
2091
  static void add_error(grpc_error_handle error, grpc_error_handle* refs,
2126
2092
  size_t* nrefs) {
2127
- if (error == GRPC_ERROR_NONE) return;
2093
+ if (GRPC_ERROR_IS_NONE(error)) return;
2128
2094
  for (size_t i = 0; i < *nrefs; i++) {
2129
2095
  if (error == refs[i]) {
2130
2096
  return;
@@ -2181,8 +2147,7 @@ void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
2181
2147
  GRPC_ERROR_REF(error),
2182
2148
  "send_trailing_metadata_finished");
2183
2149
 
2184
- s->fetching_send_message.reset();
2185
- grpc_chttp2_complete_closure_step(t, s, &s->fetching_send_message_finished,
2150
+ grpc_chttp2_complete_closure_step(t, s, &s->send_message_finished,
2186
2151
  GRPC_ERROR_REF(error),
2187
2152
  "fetching_send_message_finished");
2188
2153
  flush_write_list(t, s, &s->on_write_finished_cbs, GRPC_ERROR_REF(error));
@@ -2195,7 +2160,7 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2195
2160
  if (s->read_closed && s->write_closed) {
2196
2161
  // already closed, but we should still fake the status if needed.
2197
2162
  grpc_error_handle overall_error = removal_error(error, s, "Stream removed");
2198
- if (overall_error != GRPC_ERROR_NONE) {
2163
+ if (!GRPC_ERROR_IS_NONE(overall_error)) {
2199
2164
  grpc_chttp2_fake_status(t, s, overall_error);
2200
2165
  }
2201
2166
  grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
@@ -2223,7 +2188,7 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2223
2188
  // Purge streams waiting on concurrency still waiting for id assignment
2224
2189
  grpc_chttp2_list_remove_waiting_for_concurrency(t, s);
2225
2190
  }
2226
- if (overall_error != GRPC_ERROR_NONE) {
2191
+ if (!GRPC_ERROR_IS_NONE(overall_error)) {
2227
2192
  grpc_chttp2_fake_status(t, s, overall_error);
2228
2193
  }
2229
2194
  }
@@ -2422,6 +2387,7 @@ static void end_all_the_calls(grpc_chttp2_transport* t,
2422
2387
  error = grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS,
2423
2388
  GRPC_STATUS_UNAVAILABLE);
2424
2389
  }
2390
+ cancel_unstarted_streams(t, GRPC_ERROR_REF(error));
2425
2391
  cancel_stream_cb_args args = {error, t};
2426
2392
  grpc_chttp2_stream_map_for_each(&t->stream_map, cancel_stream_cb, &args);
2427
2393
  GRPC_ERROR_UNREF(error);
@@ -2451,8 +2417,11 @@ void grpc_chttp2_act_on_flowctl_action(
2451
2417
  const grpc_core::chttp2::FlowControlAction& action,
2452
2418
  grpc_chttp2_transport* t, grpc_chttp2_stream* s) {
2453
2419
  WithUrgency(t, action.send_stream_update(),
2454
- GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL,
2455
- [t, s]() { grpc_chttp2_mark_stream_writable(t, s); });
2420
+ GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL, [t, s]() {
2421
+ if (s->id != 0) {
2422
+ grpc_chttp2_mark_stream_writable(t, s);
2423
+ }
2424
+ });
2456
2425
  WithUrgency(t, action.send_transport_update(),
2457
2426
  GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL, []() {});
2458
2427
  WithUrgency(t, action.send_initial_window_update(),
@@ -2477,11 +2446,11 @@ static grpc_error_handle try_http_parsing(grpc_chttp2_transport* t) {
2477
2446
  grpc_http_parser_init(&parser, GRPC_HTTP_RESPONSE, &response);
2478
2447
 
2479
2448
  grpc_error_handle parse_error = GRPC_ERROR_NONE;
2480
- for (; i < t->read_buffer.count && parse_error == GRPC_ERROR_NONE; i++) {
2449
+ for (; i < t->read_buffer.count && GRPC_ERROR_IS_NONE(parse_error); i++) {
2481
2450
  parse_error =
2482
2451
  grpc_http_parser_parse(&parser, t->read_buffer.slices[i], nullptr);
2483
2452
  }
2484
- if (parse_error == GRPC_ERROR_NONE &&
2453
+ if (GRPC_ERROR_IS_NONE(parse_error) &&
2485
2454
  (parse_error = grpc_http_parser_eof(&parser)) == GRPC_ERROR_NONE) {
2486
2455
  error = grpc_error_set_int(
2487
2456
  grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
@@ -2512,7 +2481,7 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
2512
2481
  (void)GRPC_ERROR_REF(error);
2513
2482
 
2514
2483
  grpc_error_handle err = error;
2515
- if (err != GRPC_ERROR_NONE) {
2484
+ if (!GRPC_ERROR_IS_NONE(err)) {
2516
2485
  err = grpc_error_set_int(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
2517
2486
  "Endpoint read failed", &err, 1),
2518
2487
  GRPC_ERROR_INT_OCCURRED_DURING_WRITE,
@@ -2520,7 +2489,7 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
2520
2489
  }
2521
2490
  std::swap(err, error);
2522
2491
  GRPC_ERROR_UNREF(err);
2523
- if (t->closed_with_error == GRPC_ERROR_NONE) {
2492
+ if (GRPC_ERROR_IS_NONE(t->closed_with_error)) {
2524
2493
  GPR_TIMER_SCOPE("reading_action.parse", 0);
2525
2494
  size_t i = 0;
2526
2495
  grpc_error_handle errors[3] = {GRPC_ERROR_REF(error), GRPC_ERROR_NONE,
@@ -2554,20 +2523,20 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
2554
2523
 
2555
2524
  GPR_TIMER_SCOPE("post_reading_action_locked", 0);
2556
2525
  bool keep_reading = false;
2557
- if (error == GRPC_ERROR_NONE && t->closed_with_error != GRPC_ERROR_NONE) {
2526
+ if (GRPC_ERROR_IS_NONE(error) && !GRPC_ERROR_IS_NONE(t->closed_with_error)) {
2558
2527
  error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
2559
2528
  "Transport closed", &t->closed_with_error, 1);
2560
2529
  }
2561
- if (error != GRPC_ERROR_NONE) {
2530
+ if (!GRPC_ERROR_IS_NONE(error)) {
2562
2531
  // If a goaway frame was received, this might be the reason why the read
2563
2532
  // failed. Add this info to the error
2564
- if (t->goaway_error != GRPC_ERROR_NONE) {
2533
+ if (!GRPC_ERROR_IS_NONE(t->goaway_error)) {
2565
2534
  error = grpc_error_add_child(error, GRPC_ERROR_REF(t->goaway_error));
2566
2535
  }
2567
2536
 
2568
2537
  close_transport_locked(t, GRPC_ERROR_REF(error));
2569
2538
  t->endpoint_reading = 0;
2570
- } else if (t->closed_with_error == GRPC_ERROR_NONE) {
2539
+ } else if (GRPC_ERROR_IS_NONE(t->closed_with_error)) {
2571
2540
  keep_reading = true;
2572
2541
  // Since we have read a byte, reset the keepalive timer
2573
2542
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
@@ -2595,17 +2564,17 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
2595
2564
  }
2596
2565
 
2597
2566
  static void continue_read_action_locked(grpc_chttp2_transport* t) {
2598
- const bool urgent = t->goaway_error != GRPC_ERROR_NONE;
2567
+ const bool urgent = !GRPC_ERROR_IS_NONE(t->goaway_error);
2599
2568
  GRPC_CLOSURE_INIT(&t->read_action_locked, read_action, t,
2600
2569
  grpc_schedule_on_exec_ctx);
2601
- grpc_endpoint_read(t->ep, &t->read_buffer, &t->read_action_locked, urgent);
2602
- grpc_chttp2_act_on_flowctl_action(t->flow_control->MakeAction(), t, nullptr);
2570
+ grpc_endpoint_read(t->ep, &t->read_buffer, &t->read_action_locked, urgent,
2571
+ /*min_progress_size=*/1);
2603
2572
  }
2604
2573
 
2605
2574
  // t is reffed prior to calling the first time, and once the callback chain
2606
2575
  // that kicks off finishes, it's unreffed
2607
2576
  void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
2608
- t->flow_control->bdp_estimator()->SchedulePing();
2577
+ t->flow_control.bdp_estimator()->SchedulePing();
2609
2578
  send_ping_locked(
2610
2579
  t,
2611
2580
  GRPC_CLOSURE_INIT(&t->start_bdp_ping_locked, start_bdp_ping, t,
@@ -2628,14 +2597,14 @@ static void start_bdp_ping_locked(void* tp, grpc_error_handle error) {
2628
2597
  gpr_log(GPR_INFO, "%s: Start BDP ping err=%s", t->peer_string.c_str(),
2629
2598
  grpc_error_std_string(error).c_str());
2630
2599
  }
2631
- if (error != GRPC_ERROR_NONE || t->closed_with_error != GRPC_ERROR_NONE) {
2600
+ if (!GRPC_ERROR_IS_NONE(error) || !GRPC_ERROR_IS_NONE(t->closed_with_error)) {
2632
2601
  return;
2633
2602
  }
2634
2603
  // Reset the keepalive ping timer
2635
2604
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
2636
2605
  grpc_timer_cancel(&t->keepalive_ping_timer);
2637
2606
  }
2638
- t->flow_control->bdp_estimator()->StartPing();
2607
+ t->flow_control.bdp_estimator()->StartPing();
2639
2608
  t->bdp_ping_started = true;
2640
2609
  }
2641
2610
 
@@ -2652,7 +2621,7 @@ static void finish_bdp_ping_locked(void* tp, grpc_error_handle error) {
2652
2621
  gpr_log(GPR_INFO, "%s: Complete BDP ping err=%s", t->peer_string.c_str(),
2653
2622
  grpc_error_std_string(error).c_str());
2654
2623
  }
2655
- if (error != GRPC_ERROR_NONE || t->closed_with_error != GRPC_ERROR_NONE) {
2624
+ if (!GRPC_ERROR_IS_NONE(error) || !GRPC_ERROR_IS_NONE(t->closed_with_error)) {
2656
2625
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
2657
2626
  return;
2658
2627
  }
@@ -2665,8 +2634,9 @@ static void finish_bdp_ping_locked(void* tp, grpc_error_handle error) {
2665
2634
  return;
2666
2635
  }
2667
2636
  t->bdp_ping_started = false;
2668
- grpc_millis next_ping = t->flow_control->bdp_estimator()->CompletePing();
2669
- grpc_chttp2_act_on_flowctl_action(t->flow_control->PeriodicUpdate(), t,
2637
+ grpc_core::Timestamp next_ping =
2638
+ t->flow_control.bdp_estimator()->CompletePing();
2639
+ grpc_chttp2_act_on_flowctl_action(t->flow_control.PeriodicUpdate(), t,
2670
2640
  nullptr);
2671
2641
  GPR_ASSERT(!t->have_next_bdp_ping_timer);
2672
2642
  t->have_next_bdp_ping_timer = true;
@@ -2689,11 +2659,11 @@ static void next_bdp_ping_timer_expired_locked(void* tp,
2689
2659
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2690
2660
  GPR_ASSERT(t->have_next_bdp_ping_timer);
2691
2661
  t->have_next_bdp_ping_timer = false;
2692
- if (error != GRPC_ERROR_NONE) {
2662
+ if (!GRPC_ERROR_IS_NONE(error)) {
2693
2663
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
2694
2664
  return;
2695
2665
  }
2696
- if (t->flow_control->bdp_estimator()->accumulator() == 0) {
2666
+ if (t->flow_control.bdp_estimator()->accumulator() == 0) {
2697
2667
  // Block the bdp ping till we receive more data.
2698
2668
  t->bdp_ping_blocked = true;
2699
2669
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
@@ -2771,9 +2741,9 @@ static void init_keepalive_ping(void* arg, grpc_error_handle error) {
2771
2741
  static void init_keepalive_ping_locked(void* arg, grpc_error_handle error) {
2772
2742
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2773
2743
  GPR_ASSERT(t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING);
2774
- if (t->destroying || t->closed_with_error != GRPC_ERROR_NONE) {
2744
+ if (t->destroying || !GRPC_ERROR_IS_NONE(t->closed_with_error)) {
2775
2745
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
2776
- } else if (error == GRPC_ERROR_NONE) {
2746
+ } else if (GRPC_ERROR_IS_NONE(error)) {
2777
2747
  if (t->keepalive_permit_without_calls ||
2778
2748
  grpc_chttp2_stream_map_size(&t->stream_map) > 0) {
2779
2749
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_PINGING;
@@ -2810,7 +2780,7 @@ static void start_keepalive_ping(void* arg, grpc_error_handle error) {
2810
2780
 
2811
2781
  static void start_keepalive_ping_locked(void* arg, grpc_error_handle error) {
2812
2782
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2813
- if (error != GRPC_ERROR_NONE) {
2783
+ if (!GRPC_ERROR_IS_NONE(error)) {
2814
2784
  return;
2815
2785
  }
2816
2786
  if (t->channelz_socket != nullptr) {
@@ -2839,7 +2809,7 @@ static void finish_keepalive_ping(void* arg, grpc_error_handle error) {
2839
2809
  static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error) {
2840
2810
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2841
2811
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
2842
- if (error == GRPC_ERROR_NONE) {
2812
+ if (GRPC_ERROR_IS_NONE(error)) {
2843
2813
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
2844
2814
  GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
2845
2815
  gpr_log(GPR_INFO, "%s: Finish keepalive ping", t->peer_string.c_str());
@@ -2879,7 +2849,7 @@ static void keepalive_watchdog_fired_locked(void* arg,
2879
2849
  grpc_error_handle error) {
2880
2850
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2881
2851
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
2882
- if (error == GRPC_ERROR_NONE) {
2852
+ if (GRPC_ERROR_IS_NONE(error)) {
2883
2853
  gpr_log(GPR_INFO, "%s: Keepalive watchdog fired. Closing transport.",
2884
2854
  t->peer_string.c_str());
2885
2855
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
@@ -2929,225 +2899,6 @@ static void set_pollset_set(grpc_transport* gt, grpc_stream* /*gs*/,
2929
2899
  grpc_endpoint_add_to_pollset_set(t->ep, pollset_set);
2930
2900
  }
2931
2901
 
2932
- //
2933
- // BYTE STREAM
2934
- //
2935
-
2936
- static void reset_byte_stream(void* arg, grpc_error_handle error) {
2937
- grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(arg);
2938
- s->pending_byte_stream = false;
2939
- if (error == GRPC_ERROR_NONE) {
2940
- grpc_chttp2_maybe_complete_recv_message(s->t, s);
2941
- grpc_chttp2_maybe_complete_recv_trailing_metadata(s->t, s);
2942
- } else {
2943
- GPR_ASSERT(error != GRPC_ERROR_NONE);
2944
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, s->on_next, GRPC_ERROR_REF(error));
2945
- s->on_next = nullptr;
2946
- GRPC_ERROR_UNREF(s->byte_stream_error);
2947
- s->byte_stream_error = GRPC_ERROR_NONE;
2948
- grpc_chttp2_cancel_stream(s->t, s, GRPC_ERROR_REF(error));
2949
- s->byte_stream_error = GRPC_ERROR_REF(error);
2950
- }
2951
- }
2952
-
2953
- namespace grpc_core {
2954
-
2955
- Chttp2IncomingByteStream::Chttp2IncomingByteStream(
2956
- grpc_chttp2_transport* transport, grpc_chttp2_stream* stream,
2957
- uint32_t frame_size, uint32_t flags)
2958
- : ByteStream(frame_size, flags),
2959
- transport_(transport),
2960
- stream_(stream),
2961
- refs_(2),
2962
- remaining_bytes_(frame_size) {
2963
- GRPC_ERROR_UNREF(stream->byte_stream_error);
2964
- stream->byte_stream_error = GRPC_ERROR_NONE;
2965
- }
2966
-
2967
- void Chttp2IncomingByteStream::OrphanLocked(
2968
- void* arg, grpc_error_handle /*error_ignored*/) {
2969
- Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
2970
- grpc_chttp2_stream* s = bs->stream_;
2971
- grpc_chttp2_transport* t = s->t;
2972
- bs->Unref();
2973
- s->pending_byte_stream = false;
2974
- grpc_chttp2_maybe_complete_recv_message(t, s);
2975
- grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
2976
- }
2977
-
2978
- void Chttp2IncomingByteStream::Orphan() {
2979
- GPR_TIMER_SCOPE("incoming_byte_stream_destroy", 0);
2980
- transport_->combiner->Run(
2981
- GRPC_CLOSURE_INIT(&destroy_action_,
2982
- &Chttp2IncomingByteStream::OrphanLocked, this, nullptr),
2983
- GRPC_ERROR_NONE);
2984
- }
2985
-
2986
- void Chttp2IncomingByteStream::NextLocked(void* arg,
2987
- grpc_error_handle /*error_ignored*/) {
2988
- Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
2989
- grpc_chttp2_transport* t = bs->transport_;
2990
- grpc_chttp2_stream* s = bs->stream_;
2991
- size_t cur_length = s->frame_storage.length;
2992
- if (!s->read_closed) {
2993
- s->flow_control->IncomingByteStreamUpdate(bs->next_action_.max_size_hint,
2994
- cur_length);
2995
- grpc_chttp2_act_on_flowctl_action(s->flow_control->MakeAction(), t, s);
2996
- }
2997
- GPR_ASSERT(s->unprocessed_incoming_frames_buffer.length == 0);
2998
- if (s->frame_storage.length > 0) {
2999
- grpc_slice_buffer_swap(&s->frame_storage,
3000
- &s->unprocessed_incoming_frames_buffer);
3001
- s->unprocessed_incoming_frames_decompressed = false;
3002
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, bs->next_action_.on_complete,
3003
- GRPC_ERROR_NONE);
3004
- } else if (s->byte_stream_error != GRPC_ERROR_NONE) {
3005
- grpc_core::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 if (s->read_closed) {
3012
- if (bs->remaining_bytes_ != 0) {
3013
- s->byte_stream_error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
3014
- "Truncated message", &s->read_closed_error, 1);
3015
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, bs->next_action_.on_complete,
3016
- GRPC_ERROR_REF(s->byte_stream_error));
3017
- if (s->data_parser.parsing_frame != nullptr) {
3018
- s->data_parser.parsing_frame->Unref();
3019
- s->data_parser.parsing_frame = nullptr;
3020
- }
3021
- } else {
3022
- // Should never reach here.
3023
- GPR_ASSERT(false);
3024
- }
3025
- } else {
3026
- s->on_next = bs->next_action_.on_complete;
3027
- }
3028
- bs->Unref();
3029
- }
3030
-
3031
- bool Chttp2IncomingByteStream::Next(size_t max_size_hint,
3032
- grpc_closure* on_complete) {
3033
- GPR_TIMER_SCOPE("incoming_byte_stream_next", 0);
3034
- if (stream_->unprocessed_incoming_frames_buffer.length > 0) {
3035
- return true;
3036
- } else {
3037
- Ref();
3038
- next_action_.max_size_hint = max_size_hint;
3039
- next_action_.on_complete = on_complete;
3040
- transport_->combiner->Run(
3041
- GRPC_CLOSURE_INIT(&next_action_.closure,
3042
- &Chttp2IncomingByteStream::NextLocked, this, nullptr),
3043
- GRPC_ERROR_NONE);
3044
- return false;
3045
- }
3046
- }
3047
-
3048
- void Chttp2IncomingByteStream::MaybeCreateStreamDecompressionCtx() {
3049
- GPR_DEBUG_ASSERT(stream_->stream_decompression_method !=
3050
- GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS);
3051
- if (!stream_->stream_decompression_ctx) {
3052
- stream_->stream_decompression_ctx = grpc_stream_compression_context_create(
3053
- stream_->stream_decompression_method);
3054
- }
3055
- }
3056
-
3057
- grpc_error_handle Chttp2IncomingByteStream::Pull(grpc_slice* slice) {
3058
- GPR_TIMER_SCOPE("incoming_byte_stream_pull", 0);
3059
- grpc_error_handle error;
3060
- if (stream_->unprocessed_incoming_frames_buffer.length > 0) {
3061
- if (!stream_->unprocessed_incoming_frames_decompressed &&
3062
- stream_->stream_decompression_method !=
3063
- GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS) {
3064
- bool end_of_context;
3065
- MaybeCreateStreamDecompressionCtx();
3066
- if (!grpc_stream_decompress(stream_->stream_decompression_ctx,
3067
- &stream_->unprocessed_incoming_frames_buffer,
3068
- &stream_->decompressed_data_buffer, nullptr,
3069
- MAX_SIZE_T, &end_of_context)) {
3070
- error =
3071
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Stream decompression error.");
3072
- return error;
3073
- }
3074
- GPR_ASSERT(stream_->unprocessed_incoming_frames_buffer.length == 0);
3075
- grpc_slice_buffer_swap(&stream_->unprocessed_incoming_frames_buffer,
3076
- &stream_->decompressed_data_buffer);
3077
- stream_->unprocessed_incoming_frames_decompressed = true;
3078
- if (end_of_context) {
3079
- grpc_stream_compression_context_destroy(
3080
- stream_->stream_decompression_ctx);
3081
- stream_->stream_decompression_ctx = nullptr;
3082
- }
3083
- if (stream_->unprocessed_incoming_frames_buffer.length == 0) {
3084
- *slice = grpc_empty_slice();
3085
- }
3086
- }
3087
- error = grpc_deframe_unprocessed_incoming_frames(
3088
- &stream_->data_parser, stream_,
3089
- &stream_->unprocessed_incoming_frames_buffer, slice, nullptr);
3090
- if (error != GRPC_ERROR_NONE) {
3091
- return error;
3092
- }
3093
- } else {
3094
- error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
3095
- stream_->t->combiner->Run(&stream_->reset_byte_stream,
3096
- GRPC_ERROR_REF(error));
3097
- return error;
3098
- }
3099
- return GRPC_ERROR_NONE;
3100
- }
3101
-
3102
- void Chttp2IncomingByteStream::PublishError(grpc_error_handle error) {
3103
- GPR_ASSERT(error != GRPC_ERROR_NONE);
3104
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, stream_->on_next,
3105
- GRPC_ERROR_REF(error));
3106
- stream_->on_next = nullptr;
3107
- GRPC_ERROR_UNREF(stream_->byte_stream_error);
3108
- stream_->byte_stream_error = GRPC_ERROR_REF(error);
3109
- grpc_chttp2_cancel_stream(transport_, stream_, GRPC_ERROR_REF(error));
3110
- }
3111
-
3112
- grpc_error_handle Chttp2IncomingByteStream::Push(const grpc_slice& slice,
3113
- grpc_slice* slice_out) {
3114
- if (remaining_bytes_ < GRPC_SLICE_LENGTH(slice)) {
3115
- grpc_error_handle error =
3116
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Too many bytes in stream");
3117
- transport_->combiner->Run(&stream_->reset_byte_stream,
3118
- GRPC_ERROR_REF(error));
3119
- grpc_slice_unref_internal(slice);
3120
- return error;
3121
- } else {
3122
- remaining_bytes_ -= static_cast<uint32_t> GRPC_SLICE_LENGTH(slice);
3123
- if (slice_out != nullptr) {
3124
- *slice_out = slice;
3125
- }
3126
- return GRPC_ERROR_NONE;
3127
- }
3128
- }
3129
-
3130
- grpc_error_handle Chttp2IncomingByteStream::Finished(grpc_error_handle error,
3131
- bool reset_on_error) {
3132
- if (error == GRPC_ERROR_NONE) {
3133
- if (remaining_bytes_ != 0) {
3134
- error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
3135
- }
3136
- }
3137
- if (error != GRPC_ERROR_NONE && reset_on_error) {
3138
- transport_->combiner->Run(&stream_->reset_byte_stream,
3139
- GRPC_ERROR_REF(error));
3140
- }
3141
- Unref();
3142
- return error;
3143
- }
3144
-
3145
- void Chttp2IncomingByteStream::Shutdown(grpc_error_handle error) {
3146
- GRPC_ERROR_UNREF(Finished(error, true /* reset_on_error */));
3147
- }
3148
-
3149
- } // namespace grpc_core
3150
-
3151
2902
  //
3152
2903
  // RESOURCE QUOTAS
3153
2904
  //
@@ -3156,10 +2907,19 @@ static void post_benign_reclaimer(grpc_chttp2_transport* t) {
3156
2907
  if (!t->benign_reclaimer_registered) {
3157
2908
  t->benign_reclaimer_registered = true;
3158
2909
  GRPC_CHTTP2_REF_TRANSPORT(t, "benign_reclaimer");
3159
- GRPC_CLOSURE_INIT(&t->benign_reclaimer_locked, benign_reclaimer, t,
3160
- grpc_schedule_on_exec_ctx);
3161
- grpc_resource_user_post_reclaimer(t->resource_user, false,
3162
- &t->benign_reclaimer_locked);
2910
+ t->memory_owner.PostReclaimer(
2911
+ grpc_core::ReclamationPass::kBenign,
2912
+ [t](absl::optional<grpc_core::ReclamationSweep> sweep) {
2913
+ if (sweep.has_value()) {
2914
+ GRPC_CLOSURE_INIT(&t->benign_reclaimer_locked,
2915
+ benign_reclaimer_locked, t,
2916
+ grpc_schedule_on_exec_ctx);
2917
+ t->active_reclamation = std::move(*sweep);
2918
+ t->combiner->Run(&t->benign_reclaimer_locked, GRPC_ERROR_NONE);
2919
+ } else {
2920
+ GRPC_CHTTP2_UNREF_TRANSPORT(t, "benign_reclaimer");
2921
+ }
2922
+ });
3163
2923
  }
3164
2924
  }
3165
2925
 
@@ -3167,23 +2927,25 @@ static void post_destructive_reclaimer(grpc_chttp2_transport* t) {
3167
2927
  if (!t->destructive_reclaimer_registered) {
3168
2928
  t->destructive_reclaimer_registered = true;
3169
2929
  GRPC_CHTTP2_REF_TRANSPORT(t, "destructive_reclaimer");
3170
- GRPC_CLOSURE_INIT(&t->destructive_reclaimer_locked, destructive_reclaimer,
3171
- t, grpc_schedule_on_exec_ctx);
3172
- grpc_resource_user_post_reclaimer(t->resource_user, true,
3173
- &t->destructive_reclaimer_locked);
2930
+ t->memory_owner.PostReclaimer(
2931
+ grpc_core::ReclamationPass::kDestructive,
2932
+ [t](absl::optional<grpc_core::ReclamationSweep> sweep) {
2933
+ if (sweep.has_value()) {
2934
+ GRPC_CLOSURE_INIT(&t->destructive_reclaimer_locked,
2935
+ destructive_reclaimer_locked, t,
2936
+ grpc_schedule_on_exec_ctx);
2937
+ t->active_reclamation = std::move(*sweep);
2938
+ t->combiner->Run(&t->destructive_reclaimer_locked, GRPC_ERROR_NONE);
2939
+ } else {
2940
+ GRPC_CHTTP2_UNREF_TRANSPORT(t, "benign_reclaimer");
2941
+ }
2942
+ });
3174
2943
  }
3175
2944
  }
3176
2945
 
3177
- static void benign_reclaimer(void* arg, grpc_error_handle error) {
3178
- grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3179
- t->combiner->Run(GRPC_CLOSURE_INIT(&t->benign_reclaimer_locked,
3180
- benign_reclaimer_locked, t, nullptr),
3181
- GRPC_ERROR_REF(error));
3182
- }
3183
-
3184
2946
  static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
3185
2947
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3186
- if (error == GRPC_ERROR_NONE &&
2948
+ if (GRPC_ERROR_IS_NONE(error) &&
3187
2949
  grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
3188
2950
  // Channel with no active streams: send a goaway to try and make it
3189
2951
  // disconnect cleanly
@@ -3194,8 +2956,9 @@ static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
3194
2956
  send_goaway(t,
3195
2957
  grpc_error_set_int(
3196
2958
  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 &&
2959
+ GRPC_ERROR_INT_HTTP2_ERROR, GRPC_HTTP2_ENHANCE_YOUR_CALM),
2960
+ /*immediate_disconnect_hint=*/true);
2961
+ } else if (GRPC_ERROR_IS_NONE(error) &&
3199
2962
  GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
3200
2963
  gpr_log(GPR_INFO,
3201
2964
  "HTTP2: %s - skip benign reclamation, there are still %" PRIdPTR
@@ -3205,23 +2968,16 @@ static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
3205
2968
  }
3206
2969
  t->benign_reclaimer_registered = false;
3207
2970
  if (error != GRPC_ERROR_CANCELLED) {
3208
- grpc_resource_user_finish_reclamation(t->resource_user);
2971
+ t->active_reclamation.Finish();
3209
2972
  }
3210
2973
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "benign_reclaimer");
3211
2974
  }
3212
2975
 
3213
- static void destructive_reclaimer(void* arg, grpc_error_handle error) {
3214
- grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3215
- t->combiner->Run(GRPC_CLOSURE_INIT(&t->destructive_reclaimer_locked,
3216
- destructive_reclaimer_locked, t, nullptr),
3217
- GRPC_ERROR_REF(error));
3218
- }
3219
-
3220
2976
  static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
3221
2977
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3222
2978
  size_t n = grpc_chttp2_stream_map_size(&t->stream_map);
3223
2979
  t->destructive_reclaimer_registered = false;
3224
- if (error == GRPC_ERROR_NONE && n > 0) {
2980
+ if (GRPC_ERROR_IS_NONE(error) && n > 0) {
3225
2981
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(
3226
2982
  grpc_chttp2_stream_map_rand(&t->stream_map));
3227
2983
  if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
@@ -3242,7 +2998,7 @@ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
3242
2998
  }
3243
2999
  }
3244
3000
  if (error != GRPC_ERROR_CANCELLED) {
3245
- grpc_resource_user_finish_reclamation(t->resource_user);
3001
+ t->active_reclamation.Finish();
3246
3002
  }
3247
3003
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "destructive_reclaimer");
3248
3004
  }
@@ -3280,6 +3036,8 @@ const char* grpc_chttp2_initiate_write_reason_string(
3280
3036
  return "TRANSPORT_FLOW_CONTROL";
3281
3037
  case GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS:
3282
3038
  return "SEND_SETTINGS";
3039
+ case GRPC_CHTTP2_INITIATE_WRITE_SETTINGS_ACK:
3040
+ return "SETTINGS_ACK";
3283
3041
  case GRPC_CHTTP2_INITIATE_WRITE_FLOW_CONTROL_UNSTALLED_BY_SETTING:
3284
3042
  return "FLOW_CONTROL_UNSTALLED_BY_SETTING";
3285
3043
  case GRPC_CHTTP2_INITIATE_WRITE_FLOW_CONTROL_UNSTALLED_BY_UPDATE:
@@ -3307,6 +3065,7 @@ static grpc_endpoint* chttp2_get_endpoint(grpc_transport* t) {
3307
3065
  static const grpc_transport_vtable vtable = {sizeof(grpc_chttp2_stream),
3308
3066
  "chttp2",
3309
3067
  init_stream,
3068
+ nullptr,
3310
3069
  set_pollset,
3311
3070
  set_pollset_set,
3312
3071
  perform_stream_op,
@@ -3325,10 +3084,9 @@ grpc_chttp2_transport_get_socket_node(grpc_transport* transport) {
3325
3084
  }
3326
3085
 
3327
3086
  grpc_transport* grpc_create_chttp2_transport(
3328
- const grpc_channel_args* channel_args, grpc_endpoint* ep, bool is_client,
3329
- grpc_resource_user* resource_user) {
3330
- auto t =
3331
- new grpc_chttp2_transport(channel_args, ep, is_client, resource_user);
3087
+ const grpc_core::ChannelArgs& channel_args, grpc_endpoint* ep,
3088
+ bool is_client) {
3089
+ auto t = new grpc_chttp2_transport(channel_args, ep, is_client);
3332
3090
  return &t->base;
3333
3091
  }
3334
3092