grpc 1.47.0 → 1.49.0.pre1

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 (1053) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +183 -62
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +37 -25
  5. data/include/grpc/event_engine/slice_buffer.h +8 -2
  6. data/include/grpc/grpc.h +3 -3
  7. data/include/grpc/impl/codegen/compression_types.h +2 -1
  8. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  9. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  10. data/include/grpc/impl/codegen/grpc_types.h +5 -9
  11. data/include/grpc/impl/codegen/port_platform.h +2 -7
  12. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  13. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +20 -8
  14. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -2
  15. data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
  16. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
  18. data/src/core/ext/filters/client_channel/client_channel.cc +164 -261
  19. data/src/core/ext/filters/client_channel/client_channel.h +34 -12
  20. data/src/core/ext/filters/client_channel/client_channel_factory.cc +0 -29
  21. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -10
  22. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  23. data/src/core/ext/filters/client_channel/config_selector.h +13 -5
  24. data/src/core/ext/filters/client_channel/connector.h +5 -6
  25. data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
  26. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  27. data/src/core/ext/filters/client_channel/http_proxy.cc +53 -65
  28. data/src/core/ext/filters/client_channel/http_proxy.h +12 -9
  29. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +14 -12
  31. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +6 -6
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +170 -164
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +13 -4
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +5 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -2
  39. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  41. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +200 -96
  42. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +25 -1
  43. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +121 -131
  44. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +153 -116
  45. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +220 -181
  46. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -6
  47. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +110 -119
  48. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +133 -117
  49. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +97 -87
  50. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +114 -131
  51. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +40 -49
  52. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +84 -102
  53. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +64 -76
  54. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +172 -103
  55. data/src/core/ext/filters/client_channel/proxy_mapper.h +13 -14
  56. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +18 -16
  57. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -7
  58. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +7 -9
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +434 -148
  60. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
  61. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +179 -103
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -7
  63. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -18
  64. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +8 -18
  65. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +11 -0
  66. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +16 -18
  67. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +4 -5
  68. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +5 -6
  69. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -13
  70. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +181 -175
  71. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  72. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +39 -32
  73. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -10
  74. data/src/core/ext/filters/client_channel/retry_filter.cc +35 -43
  75. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  76. data/src/core/ext/filters/client_channel/retry_service_config.cc +30 -19
  77. data/src/core/ext/filters/client_channel/retry_service_config.h +6 -9
  78. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +7 -7
  79. data/src/core/ext/filters/client_channel/subchannel.cc +101 -138
  80. data/src/core/ext/filters/client_channel/subchannel.h +14 -30
  81. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +1 -1
  82. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
  83. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -25
  84. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +15 -101
  85. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
  86. data/src/core/ext/filters/deadline/deadline_filter.cc +18 -13
  87. data/src/core/ext/filters/deadline/deadline_filter.h +8 -2
  88. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +20 -3
  89. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +9 -4
  90. data/src/core/ext/filters/fault_injection/service_config_parser.cc +19 -11
  91. data/src/core/ext/filters/fault_injection/service_config_parser.h +19 -6
  92. data/src/core/ext/filters/http/client/http_client_filter.cc +17 -7
  93. data/src/core/ext/filters/http/client/http_client_filter.h +9 -2
  94. data/src/core/ext/filters/http/client_authority_filter.cc +11 -11
  95. data/src/core/ext/filters/http/client_authority_filter.h +6 -3
  96. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
  97. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
  98. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  99. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
  100. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  101. data/src/core/ext/filters/http/server/http_server_filter.cc +17 -11
  102. data/src/core/ext/filters/http/server/http_server_filter.h +7 -2
  103. data/src/core/ext/filters/message_size/message_size_filter.cc +37 -21
  104. data/src/core/ext/filters/message_size/message_size_filter.h +13 -3
  105. data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
  106. data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
  107. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +25 -10
  108. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +15 -5
  109. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
  110. data/src/core/ext/filters/server_config_selector/server_config_selector.h +14 -0
  111. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +23 -5
  112. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
  113. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +39 -66
  114. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +77 -104
  115. data/src/core/ext/transport/chttp2/server/chttp2_server.h +4 -6
  116. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +320 -635
  117. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +4 -3
  118. data/src/core/ext/transport/chttp2/transport/flow_control.cc +207 -262
  119. data/src/core/ext/transport/chttp2/transport/flow_control.h +177 -289
  120. data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
  121. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
  122. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
  123. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
  124. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  125. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +25 -8
  126. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -0
  127. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -1
  128. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +8 -2
  129. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +9 -16
  130. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
  131. data/src/core/ext/transport/chttp2/transport/internal.h +11 -112
  132. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
  133. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
  134. data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
  135. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
  136. data/src/core/ext/transport/inproc/inproc_transport.cc +124 -154
  137. data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
  138. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  139. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  140. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +4 -4
  141. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +24 -8
  142. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  143. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  144. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  145. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  146. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  147. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  148. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  149. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  150. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  151. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  152. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  153. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  154. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  155. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  156. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  157. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  158. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  159. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
  160. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  161. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  162. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +21 -19
  163. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +124 -34
  164. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  165. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  166. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +23 -22
  167. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +153 -48
  168. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  169. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  170. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  171. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  172. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  173. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  174. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +7 -7
  175. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +42 -14
  176. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  177. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  178. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  179. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  180. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  181. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  182. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  183. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  184. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  185. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  186. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  187. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  188. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  189. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  190. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +9 -9
  191. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +54 -18
  192. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  193. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  194. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +21 -20
  195. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +117 -44
  196. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  197. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  198. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  199. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  200. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +6 -2
  201. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  202. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  203. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  204. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  205. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  206. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  207. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +5 -5
  208. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +36 -12
  209. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  210. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  211. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  212. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  213. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +37 -13
  214. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +170 -15
  215. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  216. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  217. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +1 -1
  218. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +6 -2
  219. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  220. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  221. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  222. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  223. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  224. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  225. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  226. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  227. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -9
  228. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +100 -14
  229. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -22
  230. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +36 -77
  231. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +121 -76
  232. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +647 -163
  233. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  234. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  235. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  236. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  237. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +1 -1
  238. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -2
  239. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  240. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  241. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  242. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  243. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  244. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  245. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  246. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  247. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  248. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  249. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  250. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  251. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  252. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  253. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  254. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  255. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  256. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  257. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +1 -1
  258. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +6 -2
  259. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  260. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  261. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  262. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  263. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  264. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  265. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  266. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  267. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +1 -1
  268. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +6 -2
  269. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +35 -27
  270. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +177 -52
  271. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  272. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +168 -0
  273. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  274. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  275. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  276. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  277. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  278. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  279. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +5 -5
  280. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +42 -14
  281. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  282. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  283. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  284. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  285. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +131 -16
  286. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +632 -12
  287. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  288. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  289. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  290. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  291. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  292. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  293. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  294. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  295. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  296. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  297. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  298. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  299. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  300. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  301. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  302. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  303. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  304. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  305. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  306. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  307. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  308. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  309. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  310. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  311. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  312. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  313. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  314. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  315. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  316. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  317. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  318. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  319. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  320. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  321. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  322. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  323. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  324. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  325. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  326. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  327. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  328. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  329. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  330. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  331. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  332. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  333. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  334. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  335. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  336. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  337. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  338. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  339. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  340. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  341. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  342. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  343. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  344. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  345. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  346. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  347. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  348. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  349. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  350. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  351. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  352. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  353. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  354. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  355. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  356. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  357. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  358. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  359. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  360. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  361. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  362. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  363. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  364. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  365. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  366. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  367. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  368. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  369. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  370. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  371. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  372. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  373. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  374. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  375. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  376. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  377. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  378. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  379. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  380. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  381. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  382. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  383. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  384. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  385. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  386. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  387. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  388. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  389. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  390. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  391. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  392. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  393. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  394. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  395. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  396. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  397. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  398. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  399. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  400. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +6 -2
  401. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -1
  402. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
  403. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  404. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  405. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  406. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  407. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  408. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  409. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -1
  410. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  411. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  412. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  413. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  414. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  415. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  416. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  417. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  418. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +156 -154
  419. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +186 -183
  420. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +136 -134
  421. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  422. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +162 -139
  423. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  424. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  425. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +12 -8
  426. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  427. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +72 -75
  428. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +0 -5
  429. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +713 -670
  430. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  431. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  432. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  433. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  434. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  435. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  436. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  437. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +477 -466
  438. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  439. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +153 -84
  440. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  441. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  442. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  443. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  444. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  445. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  446. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  447. data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
  448. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  449. data/src/core/ext/xds/certificate_provider_store.cc +2 -0
  450. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  451. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
  452. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
  453. data/src/core/ext/xds/upb_utils.h +0 -22
  454. data/src/core/ext/xds/xds_api.cc +68 -103
  455. data/src/core/ext/xds/xds_api.h +30 -32
  456. data/src/core/ext/xds/xds_bootstrap.cc +69 -69
  457. data/src/core/ext/xds/xds_bootstrap.h +37 -19
  458. data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
  459. data/src/core/ext/xds/xds_certificate_provider.h +25 -1
  460. data/src/core/ext/xds/xds_channel_stack_modifier.cc +15 -4
  461. data/src/core/ext/xds/xds_channel_stack_modifier.h +13 -1
  462. data/src/core/ext/xds/xds_client.cc +583 -1193
  463. data/src/core/ext/xds/xds_client.h +28 -42
  464. data/src/core/ext/xds/xds_client_grpc.cc +291 -0
  465. data/src/core/ext/xds/xds_client_grpc.h +102 -0
  466. data/src/core/ext/xds/xds_client_stats.cc +3 -4
  467. data/src/core/ext/xds/xds_client_stats.h +4 -3
  468. data/src/core/ext/xds/xds_cluster.cc +107 -107
  469. data/src/core/ext/xds/xds_cluster.h +14 -5
  470. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +23 -18
  471. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +2 -8
  472. data/src/core/ext/xds/xds_common_types.cc +161 -123
  473. data/src/core/ext/xds/xds_common_types.h +16 -9
  474. data/src/core/ext/xds/xds_endpoint.cc +95 -85
  475. data/src/core/ext/xds/xds_endpoint.h +16 -8
  476. data/src/core/ext/xds/xds_http_fault_filter.cc +11 -16
  477. data/src/core/ext/xds/xds_http_fault_filter.h +5 -3
  478. data/src/core/ext/xds/xds_http_filters.cc +7 -0
  479. data/src/core/ext/xds/xds_http_filters.h +5 -5
  480. data/src/core/ext/xds/xds_http_rbac_filter.cc +52 -55
  481. data/src/core/ext/xds/xds_http_rbac_filter.h +8 -1
  482. data/src/core/ext/xds/xds_lb_policy_registry.cc +288 -0
  483. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  484. data/src/core/ext/xds/xds_listener.cc +355 -307
  485. data/src/core/ext/xds/xds_listener.h +13 -4
  486. data/src/core/ext/xds/xds_resource_type.h +16 -5
  487. data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
  488. data/src/core/ext/xds/xds_route_config.cc +215 -184
  489. data/src/core/ext/xds/xds_route_config.h +39 -16
  490. data/src/core/ext/xds/xds_routing.cc +19 -6
  491. data/src/core/ext/xds/xds_routing.h +12 -9
  492. data/src/core/ext/xds/xds_server_config_fetcher.cc +124 -81
  493. data/src/core/ext/xds/xds_transport.h +86 -0
  494. data/src/core/ext/xds/xds_transport_grpc.cc +349 -0
  495. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  496. data/src/core/lib/address_utils/parse_address.cc +24 -25
  497. data/src/core/lib/address_utils/parse_address.h +11 -7
  498. data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
  499. data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
  500. data/src/core/lib/avl/avl.h +47 -25
  501. data/src/core/lib/backoff/backoff.cc +1 -1
  502. data/src/core/lib/backoff/backoff.h +1 -1
  503. data/src/core/lib/channel/call_tracer.h +4 -4
  504. data/src/core/lib/channel/channel_args.cc +88 -19
  505. data/src/core/lib/channel/channel_args.h +114 -62
  506. data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
  507. data/src/core/lib/channel/channel_fwd.h +26 -0
  508. data/src/core/lib/channel/channel_stack.cc +4 -5
  509. data/src/core/lib/channel/channel_stack.h +1 -11
  510. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  511. data/src/core/lib/channel/channel_stack_builder.h +4 -7
  512. data/src/core/lib/channel/channel_stack_builder_impl.cc +3 -5
  513. data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
  514. data/src/core/lib/channel/channelz.cc +28 -37
  515. data/src/core/lib/channel/channelz.h +11 -3
  516. data/src/core/lib/channel/channelz_registry.cc +4 -5
  517. data/src/core/lib/channel/connected_channel.cc +1 -0
  518. data/src/core/lib/channel/connected_channel.h +1 -0
  519. data/src/core/lib/channel/promise_based_filter.cc +11 -5
  520. data/src/core/lib/channel/promise_based_filter.h +2 -1
  521. data/src/core/lib/compression/compression.cc +6 -1
  522. data/src/core/lib/compression/compression_internal.cc +3 -6
  523. data/src/core/lib/compression/compression_internal.h +3 -2
  524. data/src/core/lib/compression/message_compress.cc +3 -1
  525. data/src/core/lib/compression/message_compress.h +2 -3
  526. data/src/core/lib/config/core_configuration.h +48 -35
  527. data/src/core/lib/debug/stats.cc +15 -18
  528. data/src/core/lib/debug/stats.h +13 -4
  529. data/src/core/lib/debug/stats_data.cc +2 -1
  530. data/src/core/lib/debug/stats_data.h +0 -4
  531. data/src/core/lib/debug/trace.h +13 -12
  532. data/src/core/lib/event_engine/default_event_engine.cc +71 -0
  533. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine.h} +6 -10
  534. data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -3
  535. data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
  536. data/src/core/lib/event_engine/executor/executor.h +38 -0
  537. data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
  538. data/src/core/lib/event_engine/executor/threaded_executor.h +44 -0
  539. data/src/core/lib/event_engine/forkable.cc +98 -0
  540. data/src/core/lib/event_engine/forkable.h +61 -0
  541. data/src/core/lib/event_engine/poller.h +54 -0
  542. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +142 -0
  543. data/src/core/lib/event_engine/{iomgr_engine.h → posix_engine/posix_engine.h} +35 -32
  544. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  545. data/src/core/lib/event_engine/posix_engine/timer.h +193 -0
  546. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  547. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  548. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +290 -0
  549. data/src/core/lib/event_engine/posix_engine/timer_manager.h +120 -0
  550. data/src/core/lib/event_engine/promise.h +78 -0
  551. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  552. data/src/core/lib/event_engine/thread_pool.cc +158 -0
  553. data/src/core/lib/event_engine/thread_pool.h +81 -0
  554. data/src/core/lib/event_engine/utils.cc +49 -0
  555. data/src/core/lib/event_engine/utils.h +40 -0
  556. data/src/core/lib/event_engine/windows/iocp.cc +149 -0
  557. data/src/core/lib/event_engine/windows/iocp.h +68 -0
  558. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  559. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  560. data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
  561. data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
  562. data/src/core/lib/gpr/time.cc +11 -9
  563. data/src/core/lib/gpr/time_posix.cc +6 -9
  564. data/src/core/lib/gpr/time_windows.cc +10 -7
  565. data/src/core/lib/gpr/useful.h +29 -0
  566. data/src/core/lib/gprpp/bitset.h +3 -13
  567. data/src/core/lib/gprpp/debug_location.h +39 -7
  568. data/src/core/lib/gprpp/manual_constructor.h +0 -68
  569. data/src/core/lib/gprpp/no_destruct.h +94 -0
  570. data/src/core/lib/gprpp/ref_counted_ptr.h +0 -1
  571. data/src/core/lib/gprpp/status_helper.cc +45 -30
  572. data/src/core/lib/gprpp/table.h +0 -1
  573. data/src/core/lib/gprpp/time.cc +8 -0
  574. data/src/core/lib/gprpp/time.h +4 -0
  575. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  576. data/src/core/lib/{iomgr → gprpp}/time_averaged_stats.h +29 -22
  577. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  578. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -28
  579. data/src/core/lib/http/format_request.cc +5 -4
  580. data/src/core/lib/http/format_request.h +1 -1
  581. data/src/core/lib/http/httpcli.cc +29 -35
  582. data/src/core/lib/http/httpcli.h +19 -3
  583. data/src/core/lib/http/httpcli_security_connector.cc +26 -14
  584. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
  585. data/src/core/lib/http/parser.cc +6 -7
  586. data/src/core/lib/http/parser.h +3 -0
  587. data/src/core/lib/iomgr/call_combiner.cc +2 -28
  588. data/src/core/lib/iomgr/closure.h +0 -9
  589. data/src/core/lib/iomgr/combiner.cc +0 -20
  590. data/src/core/lib/iomgr/endpoint.h +1 -1
  591. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
  592. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  593. data/src/core/lib/iomgr/error.cc +6 -777
  594. data/src/core/lib/iomgr/error.h +6 -147
  595. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  596. data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
  597. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  598. data/src/core/lib/iomgr/ev_poll_posix.cc +94 -61
  599. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  600. data/src/core/lib/iomgr/ev_posix.cc +54 -92
  601. data/src/core/lib/iomgr/ev_posix.h +5 -3
  602. data/src/core/lib/iomgr/exec_ctx.cc +0 -12
  603. data/src/core/lib/iomgr/executor.cc +0 -10
  604. data/src/core/lib/iomgr/executor.h +0 -3
  605. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  606. data/src/core/lib/iomgr/iomgr.cc +7 -0
  607. data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
  608. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
  609. data/src/core/lib/iomgr/load_file.cc +1 -1
  610. data/src/core/lib/iomgr/lockfree_event.cc +0 -17
  611. data/src/core/lib/iomgr/port.h +3 -0
  612. data/src/core/lib/iomgr/resolve_address.h +29 -6
  613. data/src/core/lib/iomgr/resolve_address_posix.cc +39 -9
  614. data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
  615. data/src/core/lib/iomgr/resolve_address_windows.cc +41 -11
  616. data/src/core/lib/iomgr/resolve_address_windows.h +19 -5
  617. data/src/core/lib/iomgr/socket_windows.h +0 -2
  618. data/src/core/lib/iomgr/tcp_client.cc +12 -7
  619. data/src/core/lib/iomgr/tcp_client.h +24 -13
  620. data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
  621. data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
  622. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  623. data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
  624. data/src/core/lib/iomgr/tcp_posix.cc +207 -33
  625. data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
  626. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
  627. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
  628. data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
  629. data/src/core/lib/iomgr/tcp_windows.cc +5 -5
  630. data/src/core/lib/iomgr/timer_generic.cc +6 -8
  631. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  632. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  633. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  634. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  635. data/src/core/lib/json/json.h +19 -22
  636. data/src/core/lib/json/json_args.h +34 -0
  637. data/src/core/lib/json/json_object_loader.cc +233 -0
  638. data/src/core/lib/json/json_object_loader.h +618 -0
  639. data/src/core/lib/json/json_reader.cc +86 -62
  640. data/src/core/lib/json/json_util.cc +8 -36
  641. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +3 -44
  642. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +15 -31
  643. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  644. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.cc +48 -73
  645. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.h +27 -27
  646. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +16 -24
  647. data/src/core/lib/matchers/matchers.cc +6 -3
  648. data/src/core/lib/matchers/matchers.h +2 -0
  649. data/src/core/lib/promise/activity.cc +0 -1
  650. data/src/core/lib/promise/activity.h +56 -14
  651. data/src/core/lib/promise/arena_promise.h +84 -81
  652. data/src/core/lib/promise/context.h +0 -1
  653. data/src/core/lib/promise/detail/basic_seq.h +43 -23
  654. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  655. data/src/core/lib/promise/loop.h +1 -0
  656. data/src/core/lib/promise/map.h +0 -1
  657. data/src/core/lib/promise/promise.h +1 -0
  658. data/src/core/lib/promise/seq.h +25 -4
  659. data/src/core/lib/promise/sleep.cc +43 -42
  660. data/src/core/lib/promise/sleep.h +31 -28
  661. data/src/core/lib/promise/try_seq.h +26 -6
  662. data/src/core/lib/resolver/resolver.cc +0 -42
  663. data/src/core/lib/resolver/resolver.h +5 -12
  664. data/src/core/lib/resolver/resolver_factory.h +6 -4
  665. data/src/core/lib/resolver/resolver_registry.cc +3 -10
  666. data/src/core/lib/resolver/resolver_registry.h +12 -2
  667. data/src/core/lib/resolver/server_address.cc +19 -15
  668. data/src/core/lib/resolver/server_address.h +11 -8
  669. data/src/core/lib/resource_quota/api.cc +1 -1
  670. data/src/core/lib/resource_quota/arena.cc +21 -1
  671. data/src/core/lib/resource_quota/arena.h +24 -2
  672. data/src/core/lib/resource_quota/memory_quota.cc +171 -73
  673. data/src/core/lib/resource_quota/memory_quota.h +109 -42
  674. data/src/core/lib/resource_quota/periodic_update.cc +79 -0
  675. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  676. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  677. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  678. data/src/core/lib/security/authorization/evaluate_args.cc +17 -8
  679. data/src/core/lib/security/authorization/evaluate_args.h +6 -3
  680. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
  681. data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
  682. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -1
  683. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +13 -2
  684. data/src/core/lib/security/authorization/matchers.cc +20 -9
  685. data/src/core/lib/security/authorization/matchers.h +7 -0
  686. data/src/core/lib/security/authorization/rbac_policy.cc +4 -0
  687. data/src/core/lib/security/authorization/rbac_policy.h +7 -0
  688. data/src/core/lib/security/context/security_context.cc +5 -2
  689. data/src/core/lib/security/context/security_context.h +14 -2
  690. data/src/core/lib/security/credentials/alts/alts_credentials.cc +6 -5
  691. data/src/core/lib/security/credentials/alts/alts_credentials.h +8 -4
  692. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  693. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  694. data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
  695. data/src/core/lib/security/credentials/call_creds_util.h +1 -0
  696. data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
  697. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
  698. data/src/core/lib/security/credentials/composite/composite_credentials.cc +5 -9
  699. data/src/core/lib/security/credentials/composite/composite_credentials.h +17 -5
  700. data/src/core/lib/security/credentials/credentials.cc +4 -8
  701. data/src/core/lib/security/credentials/credentials.h +26 -20
  702. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +45 -20
  703. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
  704. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  705. data/src/core/lib/security/credentials/external/external_account_credentials.cc +53 -29
  706. data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
  707. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +15 -8
  708. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  709. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +23 -9
  710. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
  711. data/src/core/lib/security/credentials/fake/fake_credentials.cc +10 -17
  712. data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -5
  713. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  714. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +55 -35
  715. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -3
  716. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -3
  717. data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
  718. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +7 -3
  719. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +7 -3
  720. data/src/core/lib/security/credentials/jwt/json_token.cc +17 -5
  721. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  722. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +12 -10
  723. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
  724. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +37 -14
  725. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
  726. data/src/core/lib/security/credentials/local/local_credentials.cc +7 -7
  727. data/src/core/lib/security/credentials/local/local_credentials.h +9 -3
  728. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +41 -29
  729. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
  730. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +7 -7
  731. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
  732. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +18 -21
  733. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +15 -3
  734. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  735. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  736. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
  737. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +15 -4
  738. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
  739. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
  740. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
  741. data/src/core/lib/security/credentials/tls/tls_credentials.cc +19 -26
  742. data/src/core/lib/security/credentials/tls/tls_credentials.h +7 -4
  743. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  744. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  745. data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -31
  746. data/src/core/lib/security/credentials/xds/xds_credentials.h +16 -2
  747. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +30 -18
  748. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
  749. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +42 -38
  750. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +3 -3
  751. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +13 -4
  752. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +21 -5
  753. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  754. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
  755. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  756. data/src/core/lib/security/security_connector/local/local_security_connector.cc +34 -13
  757. data/src/core/lib/security/security_connector/local/local_security_connector.h +7 -3
  758. data/src/core/lib/security/security_connector/security_connector.cc +20 -18
  759. data/src/core/lib/security/security_connector/security_connector.h +23 -9
  760. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +21 -8
  761. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  762. data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
  763. data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
  764. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  765. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +25 -17
  766. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -7
  767. data/src/core/lib/security/transport/auth_filters.h +8 -1
  768. data/src/core/lib/security/transport/client_auth_filter.cc +19 -11
  769. data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
  770. data/src/core/lib/security/transport/secure_endpoint.h +4 -3
  771. data/src/core/lib/security/transport/security_handshaker.cc +70 -49
  772. data/src/core/lib/security/transport/security_handshaker.h +6 -1
  773. data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
  774. data/src/core/lib/security/util/json_util.cc +3 -2
  775. data/src/core/lib/security/util/json_util.h +0 -2
  776. data/src/core/lib/service_config/service_config.h +11 -0
  777. data/src/core/lib/service_config/service_config_call_data.h +2 -1
  778. data/src/core/lib/service_config/service_config_impl.cc +98 -97
  779. data/src/core/lib/service_config/service_config_impl.h +12 -16
  780. data/src/core/lib/service_config/service_config_parser.cc +26 -29
  781. data/src/core/lib/service_config/service_config_parser.h +10 -22
  782. data/src/core/lib/slice/percent_encoding.cc +4 -13
  783. data/src/core/lib/slice/slice.cc +10 -4
  784. data/src/core/lib/slice/slice_buffer.cc +30 -1
  785. data/src/core/lib/slice/slice_buffer.h +37 -6
  786. data/src/core/lib/slice/slice_string_helpers.cc +0 -20
  787. data/src/core/lib/slice/slice_string_helpers.h +0 -4
  788. data/src/core/lib/surface/call.cc +61 -117
  789. data/src/core/lib/surface/call.h +5 -1
  790. data/src/core/lib/surface/channel.cc +6 -6
  791. data/src/core/lib/surface/channel.h +3 -1
  792. data/src/core/lib/surface/channel_ping.cc +1 -1
  793. data/src/core/lib/surface/completion_queue.cc +15 -16
  794. data/src/core/lib/surface/completion_queue.h +2 -4
  795. data/src/core/lib/surface/init.cc +2 -7
  796. data/src/core/lib/surface/lame_client.cc +3 -4
  797. data/src/core/lib/surface/lame_client.h +2 -2
  798. data/src/core/lib/surface/server.cc +21 -20
  799. data/src/core/lib/surface/server.h +11 -8
  800. data/src/core/lib/surface/validate_metadata.cc +5 -15
  801. data/src/core/lib/surface/version.cc +2 -2
  802. data/src/core/lib/transport/connectivity_state.cc +0 -1
  803. data/src/core/lib/transport/connectivity_state.h +1 -1
  804. data/src/core/lib/transport/error_utils.cc +9 -39
  805. data/src/core/lib/transport/handshaker.cc +10 -12
  806. data/src/core/lib/transport/handshaker.h +4 -5
  807. data/src/core/lib/transport/handshaker_factory.h +2 -3
  808. data/src/core/lib/transport/handshaker_registry.cc +2 -1
  809. data/src/core/lib/transport/handshaker_registry.h +2 -4
  810. data/src/core/lib/transport/http_connect_handshaker.cc +20 -20
  811. data/src/core/lib/transport/metadata_batch.cc +5 -0
  812. data/src/core/lib/transport/metadata_batch.h +52 -7
  813. data/src/core/lib/transport/parsed_metadata.h +0 -1
  814. data/src/core/lib/transport/tcp_connect_handshaker.cc +14 -20
  815. data/src/core/lib/transport/transport.cc +0 -3
  816. data/src/core/lib/transport/transport.h +20 -21
  817. data/src/core/lib/transport/transport_fwd.h +20 -0
  818. data/src/core/lib/transport/transport_impl.h +1 -0
  819. data/src/core/lib/transport/transport_op_string.cc +9 -9
  820. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +40 -21
  821. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  822. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +15 -8
  823. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  824. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  825. data/src/core/tsi/fake_transport_security.cc +66 -31
  826. data/src/core/tsi/fake_transport_security.h +6 -0
  827. data/src/core/tsi/local_transport_security.cc +9 -5
  828. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +10 -1
  829. data/src/core/tsi/ssl_transport_security.cc +48 -24
  830. data/src/core/tsi/transport_security.cc +18 -6
  831. data/src/core/tsi/transport_security.h +2 -1
  832. data/src/core/tsi/transport_security_grpc.cc +3 -2
  833. data/src/core/tsi/transport_security_grpc.h +5 -2
  834. data/src/core/tsi/transport_security_interface.h +17 -5
  835. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  836. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  837. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  838. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  839. data/src/ruby/ext/grpc/extconf.rb +51 -18
  840. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  841. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  842. data/src/ruby/lib/grpc/errors.rb +1 -1
  843. data/src/ruby/lib/grpc/version.rb +1 -1
  844. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  845. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  846. data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
  847. data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
  848. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  849. data/third_party/abseil-cpp/absl/base/config.h +182 -41
  850. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  851. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  852. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  853. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  854. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  855. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  856. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  857. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  858. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  859. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  860. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
  861. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  862. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  863. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  864. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
  865. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  866. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  867. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
  868. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  869. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  870. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  871. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  872. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  873. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
  874. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  875. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
  876. data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
  877. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  878. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  879. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
  880. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
  881. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
  882. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
  883. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
  884. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  885. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
  886. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  887. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  888. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  889. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  890. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  891. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
  892. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  893. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
  894. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  895. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
  896. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  897. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  898. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  899. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  900. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  901. data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
  902. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  903. data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
  904. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  905. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
  906. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  907. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  908. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  909. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  910. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  911. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  912. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
  913. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  914. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  915. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  916. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  917. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  918. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  919. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  920. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  921. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  922. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  923. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  924. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  925. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  926. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
  927. data/third_party/abseil-cpp/absl/status/status.cc +174 -2
  928. data/third_party/abseil-cpp/absl/status/status.h +22 -12
  929. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  930. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  931. data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
  932. data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
  933. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  934. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  935. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  936. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  937. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  938. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  939. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
  940. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
  941. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
  942. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
  943. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  944. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  945. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  946. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  947. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  948. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  949. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  950. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  951. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
  952. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
  953. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  954. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  955. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  956. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  957. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
  958. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
  959. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  960. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
  961. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
  962. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  963. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  964. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  965. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  966. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  967. data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
  968. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  969. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  970. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  971. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  972. data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
  973. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  974. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  975. data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
  976. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  977. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  978. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  979. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  980. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  981. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  982. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  983. data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
  984. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  985. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  986. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  987. data/third_party/abseil-cpp/absl/time/time.h +16 -12
  988. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  989. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  990. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  991. data/third_party/abseil-cpp/absl/types/span.h +2 -1
  992. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  993. data/third_party/upb/upb/arena.c +277 -0
  994. data/third_party/upb/upb/arena.h +225 -0
  995. data/third_party/upb/upb/array.c +114 -0
  996. data/third_party/upb/upb/array.h +83 -0
  997. data/third_party/upb/upb/collections.h +36 -0
  998. data/third_party/upb/upb/decode.c +161 -65
  999. data/third_party/upb/upb/decode.h +1 -0
  1000. data/third_party/upb/upb/decode_fast.c +1 -1
  1001. data/third_party/upb/upb/def.c +10 -2
  1002. data/third_party/upb/upb/def.h +8 -1
  1003. data/third_party/upb/upb/def.hpp +7 -4
  1004. data/third_party/upb/upb/encode.c +29 -20
  1005. data/third_party/upb/upb/encode.h +16 -6
  1006. data/third_party/upb/upb/extension_registry.c +93 -0
  1007. data/third_party/upb/upb/extension_registry.h +84 -0
  1008. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  1009. data/third_party/upb/upb/internal/table.h +385 -0
  1010. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  1011. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  1012. data/third_party/upb/upb/json_decode.c +1512 -0
  1013. data/third_party/upb/upb/json_decode.h +47 -0
  1014. data/third_party/upb/upb/json_encode.c +7 -3
  1015. data/third_party/upb/upb/json_encode.h +6 -3
  1016. data/third_party/upb/upb/map.c +108 -0
  1017. data/third_party/upb/upb/map.h +117 -0
  1018. data/third_party/upb/upb/message_value.h +66 -0
  1019. data/third_party/upb/upb/mini_table.c +1147 -0
  1020. data/third_party/upb/upb/mini_table.h +189 -0
  1021. data/third_party/upb/upb/mini_table.hpp +112 -0
  1022. data/third_party/upb/upb/msg.c +2 -62
  1023. data/third_party/upb/upb/msg.h +2 -45
  1024. data/third_party/upb/upb/msg_internal.h +28 -22
  1025. data/third_party/upb/upb/port_def.inc +2 -1
  1026. data/third_party/upb/upb/port_undef.inc +1 -0
  1027. data/third_party/upb/upb/reflection.c +2 -159
  1028. data/third_party/upb/upb/reflection.h +2 -112
  1029. data/third_party/upb/upb/status.c +86 -0
  1030. data/third_party/upb/upb/status.h +66 -0
  1031. data/third_party/upb/upb/table.c +2 -2
  1032. data/third_party/upb/upb/table_internal.h +3 -352
  1033. data/third_party/upb/upb/text_encode.c +3 -2
  1034. data/third_party/upb/upb/upb.c +4 -290
  1035. data/third_party/upb/upb/upb.h +7 -196
  1036. metadata +113 -37
  1037. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
  1038. data/src/core/lib/event_engine/event_engine.cc +0 -62
  1039. data/src/core/lib/event_engine/iomgr_engine.cc +0 -206
  1040. data/src/core/lib/iomgr/error_internal.h +0 -66
  1041. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  1042. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  1043. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  1044. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  1045. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  1046. data/src/core/lib/promise/detail/switch.h +0 -1455
  1047. data/src/core/lib/slice/slice_split.cc +0 -103
  1048. data/src/core/lib/slice/slice_split.h +0 -36
  1049. data/src/core/lib/transport/byte_stream.cc +0 -165
  1050. data/src/core/lib/transport/byte_stream.h +0 -170
  1051. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
  1052. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
  1053. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -37,8 +37,10 @@
37
37
  #include "absl/strings/str_format.h"
38
38
  #include "absl/strings/string_view.h"
39
39
  #include "absl/types/optional.h"
40
+ #include "absl/types/variant.h"
40
41
 
41
42
  #include <grpc/impl/codegen/connectivity_state.h>
43
+ #include <grpc/impl/codegen/grpc_types.h>
42
44
  #include <grpc/slice_buffer.h>
43
45
  #include <grpc/status.h>
44
46
  #include <grpc/support/alloc.h>
@@ -57,15 +59,13 @@
57
59
  #include "src/core/ext/transport/chttp2/transport/stream_map.h"
58
60
  #include "src/core/ext/transport/chttp2/transport/varint.h"
59
61
  #include "src/core/lib/channel/channel_args.h"
60
- #include "src/core/lib/channel/channel_stack_builder.h"
61
62
  #include "src/core/lib/debug/stats.h"
62
63
  #include "src/core/lib/gpr/useful.h"
63
64
  #include "src/core/lib/gprpp/bitset.h"
64
65
  #include "src/core/lib/gprpp/debug_location.h"
65
66
  #include "src/core/lib/gprpp/global_config_env.h"
66
- #include "src/core/lib/gprpp/manual_constructor.h"
67
- #include "src/core/lib/gprpp/orphanable.h"
68
67
  #include "src/core/lib/gprpp/ref_counted.h"
68
+ #include "src/core/lib/gprpp/status_helper.h"
69
69
  #include "src/core/lib/gprpp/time.h"
70
70
  #include "src/core/lib/http/parser.h"
71
71
  #include "src/core/lib/iomgr/combiner.h"
@@ -75,16 +75,16 @@
75
75
  #include "src/core/lib/iomgr/pollset.h"
76
76
  #include "src/core/lib/iomgr/timer.h"
77
77
  #include "src/core/lib/profiling/timers.h"
78
- #include "src/core/lib/resource_quota/api.h"
78
+ #include "src/core/lib/promise/poll.h"
79
79
  #include "src/core/lib/resource_quota/arena.h"
80
80
  #include "src/core/lib/resource_quota/memory_quota.h"
81
81
  #include "src/core/lib/resource_quota/resource_quota.h"
82
82
  #include "src/core/lib/resource_quota/trace.h"
83
83
  #include "src/core/lib/slice/slice.h"
84
+ #include "src/core/lib/slice/slice_buffer.h"
84
85
  #include "src/core/lib/slice/slice_internal.h"
85
86
  #include "src/core/lib/slice/slice_refcount.h"
86
87
  #include "src/core/lib/transport/bdp_estimator.h"
87
- #include "src/core/lib/transport/byte_stream.h"
88
88
  #include "src/core/lib/transport/connectivity_state.h"
89
89
  #include "src/core/lib/transport/error_utils.h"
90
90
  #include "src/core/lib/transport/http2_errors.h"
@@ -94,10 +94,10 @@
94
94
  #include "src/core/lib/transport/transport_impl.h"
95
95
 
96
96
  GPR_GLOBAL_CONFIG_DEFINE_BOOL(
97
- grpc_experimental_disable_flow_control, false,
98
- "If set, flow control will be effectively disabled. Max out all values and "
99
- "assume the remote peer does the same. Thus we can ignore any flow control "
100
- "bookkeeping, error checking, and decision making");
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.");
101
101
 
102
102
  #define DEFAULT_CONNECTION_WINDOW_TARGET (1024 * 1024)
103
103
  #define MAX_WINDOW 0x7fffffffu
@@ -151,8 +151,6 @@ static void read_action(void* t, grpc_error_handle error);
151
151
  static void read_action_locked(void* t, grpc_error_handle error);
152
152
  static void continue_read_action_locked(grpc_chttp2_transport* t);
153
153
 
154
- static void complete_fetch(void* gs, grpc_error_handle error);
155
- static void complete_fetch_locked(void* gs, grpc_error_handle error);
156
154
  // Set a transport level setting, and push it to our peer
157
155
  static void queue_setting_update(grpc_chttp2_transport* t,
158
156
  grpc_chttp2_setting_id id, uint32_t value);
@@ -202,8 +200,6 @@ static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error);
202
200
  static void keepalive_watchdog_fired(void* arg, grpc_error_handle error);
203
201
  static void keepalive_watchdog_fired_locked(void* arg, grpc_error_handle error);
204
202
 
205
- static void reset_byte_stream(void* arg, grpc_error_handle error);
206
-
207
203
  namespace grpc_core {
208
204
 
209
205
  namespace {
@@ -280,8 +276,6 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
280
276
  write_cb_pool = next;
281
277
  }
282
278
 
283
- flow_control.Destroy();
284
-
285
279
  GRPC_ERROR_UNREF(closed_with_error);
286
280
  gpr_free(ping_acks);
287
281
  if (grpc_core::test_only_destruct_callback != nullptr) {
@@ -291,155 +285,128 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
291
285
 
292
286
  static const grpc_transport_vtable* get_vtable(void);
293
287
 
294
- // Returns whether bdp is enabled
295
- static bool read_channel_args(grpc_chttp2_transport* t,
296
- const grpc_channel_args* channel_args,
288
+ static void read_channel_args(grpc_chttp2_transport* t,
289
+ const grpc_core::ChannelArgs& channel_args,
297
290
  bool is_client) {
298
- bool enable_bdp = true;
299
- bool channelz_enabled = GRPC_ENABLE_CHANNELZ_DEFAULT;
300
- size_t i;
301
- int j;
302
-
303
- for (i = 0; i < channel_args->num_args; i++) {
304
- if (0 == strcmp(channel_args->args[i].key,
305
- GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER)) {
306
- const grpc_integer_options options = {-1, 0, INT_MAX};
307
- const int value =
308
- grpc_channel_arg_get_integer(&channel_args->args[i], options);
309
- if (value >= 0) {
310
- if ((t->next_stream_id & 1) != (value & 1)) {
311
- gpr_log(GPR_ERROR, "%s: low bit must be %d on %s",
312
- GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER, t->next_stream_id & 1,
313
- is_client ? "client" : "server");
314
- } else {
315
- t->next_stream_id = static_cast<uint32_t>(value);
316
- }
317
- }
318
- } else if (0 == strcmp(channel_args->args[i].key,
319
- GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER)) {
320
- const grpc_integer_options options = {-1, 0, INT_MAX};
321
- const int value =
322
- grpc_channel_arg_get_integer(&channel_args->args[i], options);
323
- if (value >= 0) {
324
- t->hpack_compressor.SetMaxUsableSize(value);
325
- }
326
- } else if (0 == strcmp(channel_args->args[i].key,
327
- GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)) {
328
- t->ping_policy.max_pings_without_data = grpc_channel_arg_get_integer(
329
- &channel_args->args[i],
330
- {g_default_max_pings_without_data, 0, INT_MAX});
331
- } else if (0 == strcmp(channel_args->args[i].key,
332
- GRPC_ARG_HTTP2_MAX_PING_STRIKES)) {
333
- t->ping_policy.max_ping_strikes = grpc_channel_arg_get_integer(
334
- &channel_args->args[i], {g_default_max_ping_strikes, 0, INT_MAX});
335
- } else if (0 ==
336
- strcmp(channel_args->args[i].key,
337
- GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)) {
338
- t->ping_policy.min_recv_ping_interval_without_data =
339
- grpc_core::Duration::Milliseconds(grpc_channel_arg_get_integer(
340
- &channel_args->args[i],
341
- grpc_integer_options{
342
- g_default_min_recv_ping_interval_without_data_ms, 0,
343
- INT_MAX}));
344
- } else if (0 == strcmp(channel_args->args[i].key,
345
- GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE)) {
346
- t->write_buffer_size = static_cast<uint32_t>(grpc_channel_arg_get_integer(
347
- &channel_args->args[i], {0, 0, MAX_WRITE_BUFFER_SIZE}));
348
- } else if (0 ==
349
- strcmp(channel_args->args[i].key, GRPC_ARG_HTTP2_BDP_PROBE)) {
350
- enable_bdp = grpc_channel_arg_get_bool(&channel_args->args[i], true);
351
- } else if (0 ==
352
- strcmp(channel_args->args[i].key, GRPC_ARG_KEEPALIVE_TIME_MS)) {
353
- const int value = grpc_channel_arg_get_integer(
354
- &channel_args->args[i],
355
- grpc_integer_options{t->is_client
356
- ? g_default_client_keepalive_time_ms
357
- : g_default_server_keepalive_time_ms,
358
- 1, INT_MAX});
359
- t->keepalive_time = value == INT_MAX
360
- ? grpc_core::Duration::Infinity()
361
- : grpc_core::Duration::Milliseconds(value);
362
- } else if (0 == strcmp(channel_args->args[i].key,
363
- GRPC_ARG_KEEPALIVE_TIMEOUT_MS)) {
364
- const int value = grpc_channel_arg_get_integer(
365
- &channel_args->args[i],
366
- grpc_integer_options{t->is_client
367
- ? g_default_client_keepalive_timeout_ms
368
- : g_default_server_keepalive_timeout_ms,
369
- 0, INT_MAX});
370
- t->keepalive_timeout = value == INT_MAX
371
- ? grpc_core::Duration::Infinity()
372
- : grpc_core::Duration::Milliseconds(value);
373
- } else if (0 == strcmp(channel_args->args[i].key,
374
- GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)) {
375
- t->keepalive_permit_without_calls = static_cast<uint32_t>(
376
- grpc_channel_arg_get_integer(&channel_args->args[i], {0, 0, 1}));
377
- } else if (0 == strcmp(channel_args->args[i].key,
378
- GRPC_ARG_OPTIMIZATION_TARGET)) {
379
- gpr_log(GPR_INFO, "GRPC_ARG_OPTIMIZATION_TARGET is deprecated");
380
- } else if (0 ==
381
- strcmp(channel_args->args[i].key, GRPC_ARG_ENABLE_CHANNELZ)) {
382
- channelz_enabled = grpc_channel_arg_get_bool(
383
- &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");
384
298
  } else {
385
- static const struct {
386
- const char* channel_arg_name;
387
- grpc_chttp2_setting_id setting_id;
388
- grpc_integer_options integer_options;
389
- bool availability[2] /* server, client */;
390
- } settings_map[] = {{GRPC_ARG_MAX_CONCURRENT_STREAMS,
391
- GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS,
392
- {-1, 0, INT32_MAX},
393
- {true, false}},
394
- {GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER,
395
- GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE,
396
- {-1, 0, INT32_MAX},
397
- {true, true}},
398
- {GRPC_ARG_MAX_METADATA_SIZE,
399
- GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE,
400
- {-1, 0, INT32_MAX},
401
- {true, true}},
402
- {GRPC_ARG_HTTP2_MAX_FRAME_SIZE,
403
- GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
404
- {-1, 16384, 16777215},
405
- {true, true}},
406
- {GRPC_ARG_HTTP2_ENABLE_TRUE_BINARY,
407
- GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA,
408
- {1, 0, 1},
409
- {true, true}},
410
- {GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES,
411
- GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE,
412
- {-1, 5, INT32_MAX},
413
- {true, true}}};
414
- for (j = 0; j < static_cast<int> GPR_ARRAY_SIZE(settings_map); j++) {
415
- if (0 == strcmp(channel_args->args[i].key,
416
- settings_map[j].channel_arg_name)) {
417
- if (!settings_map[j].availability[is_client]) {
418
- gpr_log(GPR_DEBUG, "%s is not available on %s",
419
- settings_map[j].channel_arg_name,
420
- is_client ? "clients" : "servers");
421
- } else {
422
- int value = grpc_channel_arg_get_integer(
423
- &channel_args->args[i], settings_map[j].integer_options);
424
- if (value >= 0) {
425
- queue_setting_update(t, settings_map[j].setting_id,
426
- static_cast<uint32_t>(value));
427
- }
428
- }
429
- break;
430
- }
431
- }
299
+ t->next_stream_id = static_cast<uint32_t>(initial_sequence_number);
432
300
  }
433
301
  }
434
- 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)) {
435
343
  t->channelz_socket =
436
344
  grpc_core::MakeRefCounted<grpc_core::channelz::SocketNode>(
437
345
  std::string(grpc_endpoint_get_local_address(t->ep)), t->peer_string,
438
346
  absl::StrFormat("%s %s", get_vtable()->name, t->peer_string),
439
- grpc_core::channelz::SocketNode::Security::GetFromChannelArgs(
440
- 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
+ }
441
409
  }
442
- return enable_bdp;
443
410
  }
444
411
 
445
412
  static void init_transport_keepalive_settings(grpc_chttp2_transport* t) {
@@ -493,13 +460,14 @@ static void init_keepalive_pings_if_enabled(grpc_chttp2_transport* t) {
493
460
  }
494
461
 
495
462
  grpc_chttp2_transport::grpc_chttp2_transport(
496
- const grpc_channel_args* channel_args, grpc_endpoint* ep, bool is_client)
463
+ const grpc_core::ChannelArgs& channel_args, grpc_endpoint* ep,
464
+ bool is_client)
497
465
  : refs(1, GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_refcount)
498
466
  ? "chttp2_refcount"
499
467
  : nullptr),
500
468
  ep(ep),
501
469
  peer_string(grpc_endpoint_get_peer(ep)),
502
- memory_owner(grpc_core::ResourceQuotaFromChannelArgs(channel_args)
470
+ memory_owner(channel_args.GetObject<grpc_core::ResourceQuota>()
503
471
  ->memory_quota()
504
472
  ->CreateMemoryOwner(absl::StrCat(
505
473
  grpc_endpoint_get_peer(ep), ":client_transport"))),
@@ -510,6 +478,10 @@ grpc_chttp2_transport::grpc_chttp2_transport(
510
478
  GRPC_CHANNEL_READY),
511
479
  is_client(is_client),
512
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),
513
485
  deframe_state(is_client ? GRPC_DTS_FH_0 : GRPC_DTS_CLIENT_PREFIX_0) {
514
486
  GPR_ASSERT(strlen(GRPC_CHTTP2_CLIENT_CONNECT_STRING) ==
515
487
  GRPC_CHTTP2_CLIENT_CONNECT_STRLEN);
@@ -551,20 +523,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
551
523
  configure_transport_ping_policy(this);
552
524
  init_transport_keepalive_settings(this);
553
525
 
554
- bool enable_bdp = true;
555
- if (channel_args) {
556
- enable_bdp = read_channel_args(this, channel_args, is_client);
557
- }
558
-
559
- static const bool kEnableFlowControl =
560
- !GPR_GLOBAL_CONFIG_GET(grpc_experimental_disable_flow_control);
561
- if (kEnableFlowControl) {
562
- flow_control.Init<grpc_core::chttp2::TransportFlowControl>(this,
563
- enable_bdp);
564
- } else {
565
- flow_control.Init<grpc_core::chttp2::TransportFlowControlDisabled>(this);
566
- enable_bdp = false;
567
- }
526
+ read_channel_args(this, channel_args, is_client);
568
527
 
569
528
  // No pings allowed before receiving a header or data frame.
570
529
  ping_state.pings_before_data_required = 0;
@@ -576,9 +535,9 @@ grpc_chttp2_transport::grpc_chttp2_transport(
576
535
 
577
536
  init_keepalive_pings_if_enabled(this);
578
537
 
579
- if (enable_bdp) {
538
+ if (flow_control.bdp_probe()) {
580
539
  bdp_ping_blocked = true;
581
- grpc_chttp2_act_on_flowctl_action(flow_control->PeriodicUpdate(), this,
540
+ grpc_chttp2_act_on_flowctl_action(flow_control.PeriodicUpdate(), this,
582
541
  nullptr);
583
542
  }
584
543
 
@@ -611,13 +570,13 @@ static void close_transport_locked(grpc_chttp2_transport* t,
611
570
  grpc_error_handle error) {
612
571
  end_all_the_calls(t, GRPC_ERROR_REF(error));
613
572
  cancel_pings(t, GRPC_ERROR_REF(error));
614
- if (t->closed_with_error == GRPC_ERROR_NONE) {
573
+ if (GRPC_ERROR_IS_NONE(t->closed_with_error)) {
615
574
  if (!grpc_error_has_clear_grpc_status(error)) {
616
575
  error = grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS,
617
576
  GRPC_STATUS_UNAVAILABLE);
618
577
  }
619
578
  if (t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE) {
620
- if (t->close_transport_on_writes_finished == GRPC_ERROR_NONE) {
579
+ if (GRPC_ERROR_IS_NONE(t->close_transport_on_writes_finished)) {
621
580
  t->close_transport_on_writes_finished =
622
581
  GRPC_ERROR_CREATE_FROM_STATIC_STRING(
623
582
  "Delayed close due to in-progress write");
@@ -626,7 +585,7 @@ static void close_transport_locked(grpc_chttp2_transport* t,
626
585
  grpc_error_add_child(t->close_transport_on_writes_finished, error);
627
586
  return;
628
587
  }
629
- GPR_ASSERT(error != GRPC_ERROR_NONE);
588
+ GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
630
589
  t->closed_with_error = GRPC_ERROR_REF(error);
631
590
  connectivity_state_set(t, GRPC_CHANNEL_SHUTDOWN, absl::Status(),
632
591
  "close_transport");
@@ -703,29 +662,23 @@ grpc_chttp2_stream::grpc_chttp2_stream(grpc_chttp2_transport* t,
703
662
  refcount(refcount),
704
663
  reffer(this),
705
664
  initial_metadata_buffer(arena),
706
- trailing_metadata_buffer(arena) {
665
+ trailing_metadata_buffer(arena),
666
+ flow_control(&t->flow_control) {
707
667
  if (server_data) {
708
668
  id = static_cast<uint32_t>(reinterpret_cast<uintptr_t>(server_data));
709
669
  *t->accepting_stream = this;
710
670
  grpc_chttp2_stream_map_add(&t->stream_map, id, this);
711
671
  post_destructive_reclaimer(t);
712
672
  }
713
- if (t->flow_control->flow_control_enabled()) {
714
- flow_control.Init<grpc_core::chttp2::StreamFlowControl>(
715
- static_cast<grpc_core::chttp2::TransportFlowControl*>(
716
- t->flow_control.get()),
717
- this);
718
- } else {
719
- flow_control.Init<grpc_core::chttp2::StreamFlowControlDisabled>();
720
- }
721
673
 
722
674
  grpc_slice_buffer_init(&frame_storage);
723
- grpc_slice_buffer_init(&unprocessed_incoming_frames_buffer);
724
675
  grpc_slice_buffer_init(&flow_controlled_buffer);
725
- GRPC_CLOSURE_INIT(&reset_byte_stream, ::reset_byte_stream, this, nullptr);
726
676
  }
727
677
 
728
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
+
729
682
  if (t->channelz_socket != nullptr) {
730
683
  if ((t->is_client && eos_received) || (!t->is_client && eos_sent)) {
731
684
  t->channelz_socket->RecordStreamSucceeded();
@@ -739,7 +692,6 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
739
692
  GPR_ASSERT(grpc_chttp2_stream_map_find(&t->stream_map, id) == nullptr);
740
693
  }
741
694
 
742
- grpc_slice_buffer_destroy_internal(&unprocessed_incoming_frames_buffer);
743
695
  grpc_slice_buffer_destroy_internal(&frame_storage);
744
696
 
745
697
  for (int i = 0; i < STREAM_LIST_COUNT; i++) {
@@ -751,7 +703,6 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
751
703
  }
752
704
 
753
705
  GPR_ASSERT(send_initial_metadata_finished == nullptr);
754
- GPR_ASSERT(fetching_send_message == nullptr);
755
706
  GPR_ASSERT(send_trailing_metadata_finished == nullptr);
756
707
  GPR_ASSERT(recv_initial_metadata_ready == nullptr);
757
708
  GPR_ASSERT(recv_message_ready == nullptr);
@@ -759,8 +710,6 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
759
710
  grpc_slice_buffer_destroy_internal(&flow_controlled_buffer);
760
711
  GRPC_ERROR_UNREF(read_closed_error);
761
712
  GRPC_ERROR_UNREF(write_closed_error);
762
- GRPC_ERROR_UNREF(byte_stream_error);
763
- flow_control.Destroy();
764
713
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "stream");
765
714
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, destroy_stream_arg, GRPC_ERROR_NONE);
766
715
  }
@@ -837,7 +786,7 @@ static void set_write_state(grpc_chttp2_transport* t,
837
786
  // from peer while we had some pending writes)
838
787
  if (st == GRPC_CHTTP2_WRITE_STATE_IDLE) {
839
788
  grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &t->run_after_write);
840
- if (t->close_transport_on_writes_finished != GRPC_ERROR_NONE) {
789
+ if (!GRPC_ERROR_IS_NONE(t->close_transport_on_writes_finished)) {
841
790
  grpc_error_handle err = t->close_transport_on_writes_finished;
842
791
  t->close_transport_on_writes_finished = GRPC_ERROR_NONE;
843
792
  close_transport_locked(t, err);
@@ -959,7 +908,7 @@ void grpc_chttp2_initiate_write(grpc_chttp2_transport* t,
959
908
 
960
909
  void grpc_chttp2_mark_stream_writable(grpc_chttp2_transport* t,
961
910
  grpc_chttp2_stream* s) {
962
- if (t->closed_with_error == GRPC_ERROR_NONE &&
911
+ if (GRPC_ERROR_IS_NONE(t->closed_with_error) &&
963
912
  grpc_chttp2_list_add_writable_stream(t, s)) {
964
913
  GRPC_CHTTP2_STREAM_REF(s, "chttp2_writing:become");
965
914
  }
@@ -979,7 +928,7 @@ static void write_action_begin_locked(void* gt,
979
928
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(gt);
980
929
  GPR_ASSERT(t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE);
981
930
  grpc_chttp2_begin_write_result r;
982
- if (t->closed_with_error != GRPC_ERROR_NONE) {
931
+ if (!GRPC_ERROR_IS_NONE(t->closed_with_error)) {
983
932
  r.writing = false;
984
933
  } else {
985
934
  r = grpc_chttp2_begin_write(t);
@@ -1015,14 +964,26 @@ static void write_action_begin_locked(void* gt,
1015
964
 
1016
965
  static void write_action(void* gt, grpc_error_handle /*error*/) {
1017
966
  GPR_TIMER_SCOPE("write_action", 0);
967
+ static bool kEnablePeerStateBasedFraming =
968
+ GPR_GLOBAL_CONFIG_GET(grpc_experimental_enable_peer_state_based_framing);
1018
969
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(gt);
1019
970
  void* cl = t->cl;
1020
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;
1021
982
  grpc_endpoint_write(
1022
983
  t->ep, &t->outbuf,
1023
984
  GRPC_CLOSURE_INIT(&t->write_action_end_locked, write_action_end, t,
1024
985
  grpc_schedule_on_exec_ctx),
1025
- cl, /*max_frame_size=*/INT_MAX);
986
+ cl, max_frame_size);
1026
987
  }
1027
988
 
1028
989
  static void write_action_end(void* tp, grpc_error_handle error) {
@@ -1039,7 +1000,7 @@ static void write_action_end_locked(void* tp, grpc_error_handle error) {
1039
1000
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
1040
1001
 
1041
1002
  bool closed = false;
1042
- if (error != GRPC_ERROR_NONE) {
1003
+ if (!GRPC_ERROR_IS_NONE(error)) {
1043
1004
  close_transport_locked(t, GRPC_ERROR_REF(error));
1044
1005
  closed = true;
1045
1006
  }
@@ -1118,7 +1079,7 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1118
1079
  uint32_t last_stream_id,
1119
1080
  absl::string_view goaway_text) {
1120
1081
  // Discard the error from a previous goaway frame (if any)
1121
- if (t->goaway_error != GRPC_ERROR_NONE) {
1082
+ if (!GRPC_ERROR_IS_NONE(t->goaway_error)) {
1122
1083
  GRPC_ERROR_UNREF(t->goaway_error);
1123
1084
  }
1124
1085
  t->goaway_error = grpc_error_set_str(
@@ -1167,14 +1128,14 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1167
1128
  gpr_log(GPR_ERROR,
1168
1129
  "Received a GOAWAY with error code ENHANCE_YOUR_CALM and debug "
1169
1130
  "data equal to \"too_many_pings\"");
1170
- constexpr auto max_keepalive_time = grpc_core::Duration::Milliseconds(
1171
- INT_MAX / KEEPALIVE_TIME_BACKOFF_MULTIPLIER);
1172
- t->keepalive_time =
1173
- t->keepalive_time > max_keepalive_time
1174
- ? grpc_core::Duration::Infinity()
1175
- : t->keepalive_time * KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
1131
+ constexpr int max_keepalive_time_millis =
1132
+ INT_MAX / 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;
1176
1137
  status.SetPayload(grpc_core::kKeepaliveThrottlingKey,
1177
- absl::Cord(std::to_string(t->keepalive_time.millis())));
1138
+ absl::Cord(std::to_string(throttled_keepalive_time)));
1178
1139
  }
1179
1140
  // lie: use transient failure from the transport to indicate goaway has been
1180
1141
  // received.
@@ -1188,7 +1149,7 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1188
1149
  grpc_chttp2_stream* s;
1189
1150
  // maybe cancel out streams that haven't yet started if we have received a
1190
1151
  // GOAWAY
1191
- if (t->goaway_error != GRPC_ERROR_NONE) {
1152
+ if (!GRPC_ERROR_IS_NONE(t->goaway_error)) {
1192
1153
  cancel_unstarted_streams(t, GRPC_ERROR_REF(t->goaway_error));
1193
1154
  return;
1194
1155
  }
@@ -1252,6 +1213,12 @@ static grpc_closure* add_closure_barrier(grpc_closure* closure) {
1252
1213
  static void null_then_sched_closure(grpc_closure** closure) {
1253
1214
  grpc_closure* c = *closure;
1254
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.
1255
1222
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, c, GRPC_ERROR_NONE);
1256
1223
  }
1257
1224
 
@@ -1280,39 +1247,25 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1280
1247
  desc, grpc_error_std_string(error).c_str(),
1281
1248
  write_state_name(t->write_state));
1282
1249
  }
1283
- if (error != GRPC_ERROR_NONE) {
1284
- #ifdef GRPC_ERROR_IS_ABSEIL_STATUS
1250
+ if (!GRPC_ERROR_IS_NONE(error)) {
1285
1251
  grpc_error_handle cl_err =
1286
1252
  grpc_core::internal::StatusMoveFromHeapPtr(closure->error_data.error);
1287
- #else
1288
- grpc_error_handle cl_err =
1289
- reinterpret_cast<grpc_error_handle>(closure->error_data.error);
1290
- #endif
1291
- if (cl_err == GRPC_ERROR_NONE) {
1253
+ if (GRPC_ERROR_IS_NONE(cl_err)) {
1292
1254
  cl_err = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1293
1255
  "Error in HTTP transport completing operation");
1294
1256
  cl_err = grpc_error_set_str(cl_err, GRPC_ERROR_STR_TARGET_ADDRESS,
1295
1257
  t->peer_string);
1296
1258
  }
1297
1259
  cl_err = grpc_error_add_child(cl_err, error);
1298
- #ifdef GRPC_ERROR_IS_ABSEIL_STATUS
1299
1260
  closure->error_data.error = grpc_core::internal::StatusAllocHeapPtr(cl_err);
1300
- #else
1301
- closure->error_data.error = reinterpret_cast<intptr_t>(cl_err);
1302
- #endif
1303
1261
  }
1304
1262
  if (closure->next_data.scratch < CLOSURE_BARRIER_FIRST_REF_BIT) {
1305
1263
  if ((t->write_state == GRPC_CHTTP2_WRITE_STATE_IDLE) ||
1306
1264
  !(closure->next_data.scratch & CLOSURE_BARRIER_MAY_COVER_WRITE)) {
1307
1265
  // Using GRPC_CLOSURE_SCHED instead of GRPC_CLOSURE_RUN to avoid running
1308
1266
  // closures earlier than when it is safe to do so.
1309
- #ifdef GRPC_ERROR_IS_ABSEIL_STATUS
1310
1267
  grpc_error_handle run_error =
1311
1268
  grpc_core::internal::StatusMoveFromHeapPtr(closure->error_data.error);
1312
- #else
1313
- grpc_error_handle run_error =
1314
- reinterpret_cast<grpc_error_handle>(closure->error_data.error);
1315
- #endif
1316
1269
  closure->error_data.error = 0;
1317
1270
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, run_error);
1318
1271
  } else {
@@ -1326,94 +1279,6 @@ static bool contains_non_ok_status(grpc_metadata_batch* batch) {
1326
1279
  GRPC_STATUS_OK;
1327
1280
  }
1328
1281
 
1329
- static void maybe_become_writable_due_to_send_msg(grpc_chttp2_transport* t,
1330
- grpc_chttp2_stream* s) {
1331
- if (s->id != 0 && (!s->write_buffering ||
1332
- s->flow_controlled_buffer.length > t->write_buffer_size)) {
1333
- grpc_chttp2_mark_stream_writable(t, s);
1334
- grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_SEND_MESSAGE);
1335
- }
1336
- }
1337
-
1338
- static void add_fetched_slice_locked(grpc_chttp2_transport* t,
1339
- grpc_chttp2_stream* s) {
1340
- s->fetched_send_message_length +=
1341
- static_cast<uint32_t> GRPC_SLICE_LENGTH(s->fetching_slice);
1342
- grpc_slice_buffer_add(&s->flow_controlled_buffer, s->fetching_slice);
1343
- maybe_become_writable_due_to_send_msg(t, s);
1344
- }
1345
-
1346
- static void continue_fetching_send_locked(grpc_chttp2_transport* t,
1347
- grpc_chttp2_stream* s) {
1348
- for (;;) {
1349
- if (s->fetching_send_message == nullptr) {
1350
- // Stream was cancelled before message fetch completed
1351
- abort(); /* TODO(ctiller): what cleanup here? */
1352
- }
1353
- if (s->fetched_send_message_length == s->fetching_send_message->length()) {
1354
- int64_t notify_offset = s->next_message_end_offset;
1355
- if (notify_offset <= s->flow_controlled_bytes_written) {
1356
- grpc_chttp2_complete_closure_step(
1357
- t, s, &s->fetching_send_message_finished, GRPC_ERROR_NONE,
1358
- "fetching_send_message_finished");
1359
- } else {
1360
- grpc_chttp2_write_cb* cb = t->write_cb_pool;
1361
- if (cb == nullptr) {
1362
- cb = static_cast<grpc_chttp2_write_cb*>(gpr_malloc(sizeof(*cb)));
1363
- } else {
1364
- t->write_cb_pool = cb->next;
1365
- }
1366
- cb->call_at_byte = notify_offset;
1367
- cb->closure = s->fetching_send_message_finished;
1368
- s->fetching_send_message_finished = nullptr;
1369
- grpc_chttp2_write_cb** list =
1370
- s->fetching_send_message->flags() & GRPC_WRITE_THROUGH
1371
- ? &s->on_write_finished_cbs
1372
- : &s->on_flow_controlled_cbs;
1373
- cb->next = *list;
1374
- *list = cb;
1375
- }
1376
- s->fetching_send_message.reset();
1377
- return; /* early out */
1378
- } else if (s->fetching_send_message->Next(
1379
- UINT32_MAX, GRPC_CLOSURE_INIT(&s->complete_fetch_locked,
1380
- ::complete_fetch, s,
1381
- grpc_schedule_on_exec_ctx))) {
1382
- grpc_error_handle error =
1383
- s->fetching_send_message->Pull(&s->fetching_slice);
1384
- if (error != GRPC_ERROR_NONE) {
1385
- s->fetching_send_message.reset();
1386
- grpc_chttp2_cancel_stream(t, s, error);
1387
- } else {
1388
- add_fetched_slice_locked(t, s);
1389
- }
1390
- }
1391
- }
1392
- }
1393
-
1394
- static void complete_fetch(void* gs, grpc_error_handle error) {
1395
- grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
1396
- s->t->combiner->Run(GRPC_CLOSURE_INIT(&s->complete_fetch_locked,
1397
- ::complete_fetch_locked, s, nullptr),
1398
- GRPC_ERROR_REF(error));
1399
- }
1400
-
1401
- static void complete_fetch_locked(void* gs, grpc_error_handle error) {
1402
- grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
1403
- grpc_chttp2_transport* t = s->t;
1404
- if (error == GRPC_ERROR_NONE) {
1405
- error = s->fetching_send_message->Pull(&s->fetching_slice);
1406
- if (error == GRPC_ERROR_NONE) {
1407
- add_fetched_slice_locked(t, s);
1408
- continue_fetching_send_locked(t, s);
1409
- }
1410
- }
1411
- if (error != GRPC_ERROR_NONE) {
1412
- s->fetching_send_message.reset();
1413
- grpc_chttp2_cancel_stream(t, s, error);
1414
- }
1415
- }
1416
-
1417
1282
  static void log_metadata(const grpc_metadata_batch* md_batch, uint32_t id,
1418
1283
  bool is_client, bool is_initial) {
1419
1284
  const std::string prefix = absl::StrCat(
@@ -1489,7 +1354,7 @@ static void perform_stream_op_locked(void* stream_op,
1489
1354
  }
1490
1355
  if (!s->write_closed) {
1491
1356
  if (t->is_client) {
1492
- if (t->closed_with_error == GRPC_ERROR_NONE) {
1357
+ if (GRPC_ERROR_IS_NONE(t->closed_with_error)) {
1493
1358
  GPR_ASSERT(s->id == 0);
1494
1359
  grpc_chttp2_list_add_waiting_for_concurrency(t, s);
1495
1360
  maybe_start_some_streams(t);
@@ -1508,8 +1373,7 @@ static void perform_stream_op_locked(void* stream_op,
1508
1373
  GPR_ASSERT(s->id != 0);
1509
1374
  grpc_chttp2_mark_stream_writable(t, s);
1510
1375
  if (!(op->send_message &&
1511
- (op->payload->send_message.send_message->flags() &
1512
- GRPC_WRITE_BUFFER_HINT))) {
1376
+ (op->payload->send_message.flags & GRPC_WRITE_BUFFER_HINT))) {
1513
1377
  grpc_chttp2_initiate_write(
1514
1378
  t, GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA);
1515
1379
  }
@@ -1533,32 +1397,28 @@ static void perform_stream_op_locked(void* stream_op,
1533
1397
  GRPC_STATS_INC_HTTP2_OP_SEND_MESSAGE();
1534
1398
  t->num_messages_in_next_write++;
1535
1399
  GRPC_STATS_INC_HTTP2_SEND_MESSAGE_SIZE(
1536
- op->payload->send_message.send_message->length());
1400
+ op->payload->send_message.send_message->Length());
1537
1401
  on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
1538
- 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;
1539
1404
  if (s->write_closed) {
1540
1405
  op->payload->send_message.stream_write_closed = true;
1541
1406
  // We should NOT return an error here, so as to avoid a cancel OP being
1542
1407
  // started. The surface layer will notice that the stream has been closed
1543
1408
  // for writes and fail the send message op.
1544
- op->payload->send_message.send_message.reset();
1545
- grpc_chttp2_complete_closure_step(
1546
- t, s, &s->fetching_send_message_finished, GRPC_ERROR_NONE,
1547
- "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");
1548
1412
  } else {
1549
- GPR_ASSERT(s->fetching_send_message == nullptr);
1550
1413
  uint8_t* frame_hdr = grpc_slice_buffer_tiny_add(
1551
1414
  &s->flow_controlled_buffer, GRPC_HEADER_SIZE_IN_BYTES);
1552
- uint32_t flags = op_payload->send_message.send_message->flags();
1553
1415
  frame_hdr[0] = (flags & GRPC_WRITE_INTERNAL_COMPRESS) != 0;
1554
- size_t len = op_payload->send_message.send_message->length();
1416
+ size_t len = op_payload->send_message.send_message->Length();
1555
1417
  frame_hdr[1] = static_cast<uint8_t>(len >> 24);
1556
1418
  frame_hdr[2] = static_cast<uint8_t>(len >> 16);
1557
1419
  frame_hdr[3] = static_cast<uint8_t>(len >> 8);
1558
1420
  frame_hdr[4] = static_cast<uint8_t>(len);
1559
- s->fetching_send_message =
1560
- std::move(op_payload->send_message.send_message);
1561
- s->fetched_send_message_length = 0;
1421
+
1562
1422
  s->next_message_end_offset =
1563
1423
  s->flow_controlled_bytes_written +
1564
1424
  static_cast<int64_t>(s->flow_controlled_buffer.length) +
@@ -1569,8 +1429,44 @@ static void perform_stream_op_locked(void* stream_op,
1569
1429
  } else {
1570
1430
  s->write_buffering = false;
1571
1431
  }
1572
- continue_fetching_send_locked(t, s);
1573
- 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
+ }
1574
1470
  }
1575
1471
  }
1576
1472
 
@@ -1624,28 +1520,14 @@ static void perform_stream_op_locked(void* stream_op,
1624
1520
 
1625
1521
  if (op->recv_message) {
1626
1522
  GRPC_STATS_INC_HTTP2_OP_RECV_MESSAGE();
1627
- size_t before = 0;
1628
1523
  GPR_ASSERT(s->recv_message_ready == nullptr);
1629
- GPR_ASSERT(!s->pending_byte_stream);
1630
1524
  s->recv_message_ready = op_payload->recv_message.recv_message_ready;
1631
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;
1632
1528
  s->call_failed_before_recv_message =
1633
1529
  op_payload->recv_message.call_failed_before_recv_message;
1634
- if (s->id != 0) {
1635
- if (!s->read_closed) {
1636
- before = s->frame_storage.length +
1637
- s->unprocessed_incoming_frames_buffer.length;
1638
- }
1639
- }
1640
- grpc_chttp2_maybe_complete_recv_message(t, s);
1641
- if (s->id != 0) {
1642
- if (!s->read_closed && s->frame_storage.length == 0) {
1643
- size_t after = s->unprocessed_incoming_frames_buffer_cached_length;
1644
- s->flow_control->IncomingByteStreamUpdate(GRPC_HEADER_SIZE_IN_BYTES,
1645
- before - after);
1646
- grpc_chttp2_act_on_flowctl_action(s->flow_control->MakeAction(), t, s);
1647
- }
1648
- }
1530
+ grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
1649
1531
  }
1650
1532
 
1651
1533
  if (op->recv_trailing_metadata) {
@@ -1704,7 +1586,7 @@ static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error) {
1704
1586
  // callback remaining pings: they're not allowed to call into the transport,
1705
1587
  // and maybe they hold resources that need to be freed
1706
1588
  grpc_chttp2_ping_queue* pq = &t->ping_queue;
1707
- GPR_ASSERT(error != GRPC_ERROR_NONE);
1589
+ GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
1708
1590
  for (size_t j = 0; j < GRPC_CHTTP2_PCL_COUNT; j++) {
1709
1591
  grpc_closure_list_fail_all(&pq->lists[j], GRPC_ERROR_REF(error));
1710
1592
  grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &pq->lists[j]);
@@ -1714,7 +1596,7 @@ static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error) {
1714
1596
 
1715
1597
  static void send_ping_locked(grpc_chttp2_transport* t,
1716
1598
  grpc_closure* on_initiate, grpc_closure* on_ack) {
1717
- if (t->closed_with_error != GRPC_ERROR_NONE) {
1599
+ if (!GRPC_ERROR_IS_NONE(t->closed_with_error)) {
1718
1600
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_initiate,
1719
1601
  GRPC_ERROR_REF(t->closed_with_error));
1720
1602
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_ack,
@@ -1732,7 +1614,7 @@ static void send_ping_locked(grpc_chttp2_transport* t,
1732
1614
  // a ping in progress, the keepalive ping would piggyback onto that ping,
1733
1615
  // instead of waiting for that ping to complete and then starting a new ping.
1734
1616
  static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
1735
- if (t->closed_with_error != GRPC_ERROR_NONE) {
1617
+ if (!GRPC_ERROR_IS_NONE(t->closed_with_error)) {
1736
1618
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
1737
1619
  start_keepalive_ping_locked, t, nullptr),
1738
1620
  GRPC_ERROR_REF(t->closed_with_error));
@@ -1777,7 +1659,7 @@ void grpc_chttp2_retry_initiate_ping(void* tp, grpc_error_handle error) {
1777
1659
  static void retry_initiate_ping_locked(void* tp, grpc_error_handle error) {
1778
1660
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
1779
1661
  t->ping_state.is_delayed_ping_timer_set = false;
1780
- if (error == GRPC_ERROR_NONE) {
1662
+ if (GRPC_ERROR_IS_NONE(error)) {
1781
1663
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RETRY_SEND_PING);
1782
1664
  }
1783
1665
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "retry_initiate_ping_locked");
@@ -1834,7 +1716,7 @@ class GracefulGoaway : public grpc_core::RefCounted<GracefulGoaway> {
1834
1716
  // We already sent the final GOAWAY.
1835
1717
  return;
1836
1718
  }
1837
- if (t_->destroying || t_->closed_with_error != GRPC_ERROR_NONE) {
1719
+ if (t_->destroying || !GRPC_ERROR_IS_NONE(t_->closed_with_error)) {
1838
1720
  GRPC_CHTTP2_IF_TRACING(gpr_log(
1839
1721
  GPR_INFO,
1840
1722
  "transport:%p %s peer:%s Transport already shutting down. "
@@ -1871,7 +1753,7 @@ class GracefulGoaway : public grpc_core::RefCounted<GracefulGoaway> {
1871
1753
 
1872
1754
  static void OnTimer(void* arg, grpc_error_handle error) {
1873
1755
  auto* self = static_cast<GracefulGoaway*>(arg);
1874
- if (error != GRPC_ERROR_NONE) {
1756
+ if (!GRPC_ERROR_IS_NONE(error)) {
1875
1757
  self->Unref();
1876
1758
  return;
1877
1759
  }
@@ -1955,7 +1837,7 @@ static void perform_transport_op_locked(void* stream_op,
1955
1837
  grpc_chttp2_transport* t =
1956
1838
  static_cast<grpc_chttp2_transport*>(op->handler_private.extra_arg);
1957
1839
 
1958
- if (op->goaway_error != GRPC_ERROR_NONE) {
1840
+ if (!GRPC_ERROR_IS_NONE(op->goaway_error)) {
1959
1841
  send_goaway(t, op->goaway_error, /*immediate_disconnect_hint=*/false);
1960
1842
  }
1961
1843
 
@@ -1985,7 +1867,7 @@ static void perform_transport_op_locked(void* stream_op,
1985
1867
  t->state_tracker.RemoveWatcher(op->stop_connectivity_watch);
1986
1868
  }
1987
1869
 
1988
- if (op->disconnect_with_error != GRPC_ERROR_NONE) {
1870
+ if (!GRPC_ERROR_IS_NONE(op->disconnect_with_error)) {
1989
1871
  send_goaway(t, GRPC_ERROR_REF(op->disconnect_with_error),
1990
1872
  /*immediate_disconnect_hint=*/true);
1991
1873
  close_transport_locked(t, op->disconnect_with_error);
@@ -2019,10 +1901,6 @@ void grpc_chttp2_maybe_complete_recv_initial_metadata(grpc_chttp2_transport* t,
2019
1901
  s->published_metadata[0] != GRPC_METADATA_NOT_PUBLISHED) {
2020
1902
  if (s->seen_error) {
2021
1903
  grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
2022
- if (!s->pending_byte_stream) {
2023
- grpc_slice_buffer_reset_and_unref_internal(
2024
- &s->unprocessed_incoming_frames_buffer);
2025
- }
2026
1904
  }
2027
1905
  *s->recv_initial_metadata = std::move(s->initial_metadata_buffer);
2028
1906
  s->recv_initial_metadata->Set(grpc_core::PeerString(), t->peer_string);
@@ -2039,47 +1917,62 @@ void grpc_chttp2_maybe_complete_recv_initial_metadata(grpc_chttp2_transport* t,
2039
1917
  }
2040
1918
  }
2041
1919
 
2042
- void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* /*t*/,
1920
+ void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* t,
2043
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);
2044
1926
  grpc_error_handle error = GRPC_ERROR_NONE;
2045
- if (s->recv_message_ready != nullptr) {
2046
- *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
+ [&]() {
2047
1931
  if (s->final_metadata_requested && s->seen_error) {
2048
1932
  grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
2049
- if (!s->pending_byte_stream) {
2050
- grpc_slice_buffer_reset_and_unref_internal(
2051
- &s->unprocessed_incoming_frames_buffer);
2052
- }
2053
- }
2054
- if (!s->pending_byte_stream) {
2055
- while (s->unprocessed_incoming_frames_buffer.length > 0 ||
2056
- s->frame_storage.length > 0) {
2057
- if (s->unprocessed_incoming_frames_buffer.length == 0) {
2058
- grpc_slice_buffer_swap(&s->unprocessed_incoming_frames_buffer,
2059
- &s->frame_storage);
2060
- }
2061
- error = grpc_deframe_unprocessed_incoming_frames(
2062
- &s->data_parser, s, &s->unprocessed_incoming_frames_buffer, nullptr,
2063
- s->recv_message);
2064
- if (error != GRPC_ERROR_NONE) {
2065
- s->seen_error = true;
2066
- grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
2067
- grpc_slice_buffer_reset_and_unref_internal(
2068
- &s->unprocessed_incoming_frames_buffer);
2069
- break;
2070
- } else if (*s->recv_message != nullptr) {
2071
- break;
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
1949
+ }
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;
1961
+ }
1962
+ }
2072
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
2073
1969
  }
2074
1970
  }
2075
1971
  // save the length of the buffer before handing control back to application
2076
1972
  // threads. Needed to support correct flow control bookkeeping
2077
- s->unprocessed_incoming_frames_buffer_cached_length =
2078
- s->unprocessed_incoming_frames_buffer.length;
2079
- if (error == GRPC_ERROR_NONE && *s->recv_message != nullptr) {
1973
+ if (GRPC_ERROR_IS_NONE(error) && s->recv_message->has_value()) {
2080
1974
  null_then_sched_closure(&s->recv_message_ready);
2081
1975
  } else if (s->published_metadata[1] != GRPC_METADATA_NOT_PUBLISHED) {
2082
- *s->recv_message = nullptr;
2083
1976
  if (s->call_failed_before_recv_message != nullptr) {
2084
1977
  *s->call_failed_before_recv_message =
2085
1978
  (s->published_metadata[1] != GRPC_METADATA_PUBLISHED_AT_CLOSE);
@@ -2087,7 +1980,10 @@ void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* /*t*/,
2087
1980
  null_then_sched_closure(&s->recv_message_ready);
2088
1981
  }
2089
1982
  GRPC_ERROR_UNREF(error);
2090
- }
1983
+ }();
1984
+
1985
+ upd.SetPendingSize(s->frame_storage.length);
1986
+ grpc_chttp2_act_on_flowctl_action(upd.MakeAction(), t, s);
2091
1987
  }
2092
1988
 
2093
1989
  void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
@@ -2097,26 +1993,8 @@ void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
2097
1993
  s->write_closed) {
2098
1994
  if (s->seen_error || !t->is_client) {
2099
1995
  grpc_slice_buffer_reset_and_unref_internal(&s->frame_storage);
2100
- if (!s->pending_byte_stream) {
2101
- grpc_slice_buffer_reset_and_unref_internal(
2102
- &s->unprocessed_incoming_frames_buffer);
2103
- }
2104
1996
  }
2105
- bool pending_data = s->pending_byte_stream ||
2106
- s->unprocessed_incoming_frames_buffer.length > 0;
2107
- if (s->read_closed && s->frame_storage.length > 0 && !pending_data &&
2108
- !s->seen_error && s->recv_trailing_metadata_finished != nullptr) {
2109
- // Maybe some SYNC_FLUSH data is left in frame_storage. Consume them and
2110
- // maybe decompress the next 5 bytes in the stream.
2111
- grpc_slice_buffer_move_first(
2112
- &s->frame_storage,
2113
- std::min(s->frame_storage.length, size_t(GRPC_HEADER_SIZE_IN_BYTES)),
2114
- &s->unprocessed_incoming_frames_buffer);
2115
- if (s->unprocessed_incoming_frames_buffer.length > 0) {
2116
- pending_data = true;
2117
- }
2118
- }
2119
- if (s->read_closed && s->frame_storage.length == 0 && !pending_data &&
1997
+ if (s->read_closed && s->frame_storage.length == 0 &&
2120
1998
  s->recv_trailing_metadata_finished != nullptr) {
2121
1999
  grpc_transport_move_stats(&s->stats, s->collecting_stats);
2122
2000
  s->collecting_stats = nullptr;
@@ -2136,20 +2014,6 @@ static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
2136
2014
  t->incoming_stream = nullptr;
2137
2015
  grpc_chttp2_parsing_become_skip_parser(t);
2138
2016
  }
2139
- if (s->pending_byte_stream) {
2140
- if (s->on_next != nullptr) {
2141
- grpc_core::Chttp2IncomingByteStream* bs = s->data_parser.parsing_frame;
2142
- if (error == GRPC_ERROR_NONE) {
2143
- error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
2144
- }
2145
- bs->PublishError(error);
2146
- bs->Unref();
2147
- s->data_parser.parsing_frame = nullptr;
2148
- } else {
2149
- GRPC_ERROR_UNREF(s->byte_stream_error);
2150
- s->byte_stream_error = GRPC_ERROR_REF(error);
2151
- }
2152
- }
2153
2017
 
2154
2018
  if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
2155
2019
  post_benign_reclaimer(t);
@@ -2188,7 +2052,7 @@ void grpc_chttp2_cancel_stream(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2188
2052
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM);
2189
2053
  }
2190
2054
  }
2191
- if (due_to_error != GRPC_ERROR_NONE && !s->seen_error) {
2055
+ if (!GRPC_ERROR_IS_NONE(due_to_error) && !s->seen_error) {
2192
2056
  s->seen_error = true;
2193
2057
  }
2194
2058
  grpc_chttp2_mark_stream_closed(t, s, 1, 1, due_to_error);
@@ -2226,7 +2090,7 @@ void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2226
2090
 
2227
2091
  static void add_error(grpc_error_handle error, grpc_error_handle* refs,
2228
2092
  size_t* nrefs) {
2229
- if (error == GRPC_ERROR_NONE) return;
2093
+ if (GRPC_ERROR_IS_NONE(error)) return;
2230
2094
  for (size_t i = 0; i < *nrefs; i++) {
2231
2095
  if (error == refs[i]) {
2232
2096
  return;
@@ -2283,8 +2147,7 @@ void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
2283
2147
  GRPC_ERROR_REF(error),
2284
2148
  "send_trailing_metadata_finished");
2285
2149
 
2286
- s->fetching_send_message.reset();
2287
- grpc_chttp2_complete_closure_step(t, s, &s->fetching_send_message_finished,
2150
+ grpc_chttp2_complete_closure_step(t, s, &s->send_message_finished,
2288
2151
  GRPC_ERROR_REF(error),
2289
2152
  "fetching_send_message_finished");
2290
2153
  flush_write_list(t, s, &s->on_write_finished_cbs, GRPC_ERROR_REF(error));
@@ -2297,7 +2160,7 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2297
2160
  if (s->read_closed && s->write_closed) {
2298
2161
  // already closed, but we should still fake the status if needed.
2299
2162
  grpc_error_handle overall_error = removal_error(error, s, "Stream removed");
2300
- if (overall_error != GRPC_ERROR_NONE) {
2163
+ if (!GRPC_ERROR_IS_NONE(overall_error)) {
2301
2164
  grpc_chttp2_fake_status(t, s, overall_error);
2302
2165
  }
2303
2166
  grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
@@ -2325,7 +2188,7 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2325
2188
  // Purge streams waiting on concurrency still waiting for id assignment
2326
2189
  grpc_chttp2_list_remove_waiting_for_concurrency(t, s);
2327
2190
  }
2328
- if (overall_error != GRPC_ERROR_NONE) {
2191
+ if (!GRPC_ERROR_IS_NONE(overall_error)) {
2329
2192
  grpc_chttp2_fake_status(t, s, overall_error);
2330
2193
  }
2331
2194
  }
@@ -2554,8 +2417,11 @@ void grpc_chttp2_act_on_flowctl_action(
2554
2417
  const grpc_core::chttp2::FlowControlAction& action,
2555
2418
  grpc_chttp2_transport* t, grpc_chttp2_stream* s) {
2556
2419
  WithUrgency(t, action.send_stream_update(),
2557
- GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL,
2558
- [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
+ });
2559
2425
  WithUrgency(t, action.send_transport_update(),
2560
2426
  GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL, []() {});
2561
2427
  WithUrgency(t, action.send_initial_window_update(),
@@ -2580,11 +2446,11 @@ static grpc_error_handle try_http_parsing(grpc_chttp2_transport* t) {
2580
2446
  grpc_http_parser_init(&parser, GRPC_HTTP_RESPONSE, &response);
2581
2447
 
2582
2448
  grpc_error_handle parse_error = GRPC_ERROR_NONE;
2583
- 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++) {
2584
2450
  parse_error =
2585
2451
  grpc_http_parser_parse(&parser, t->read_buffer.slices[i], nullptr);
2586
2452
  }
2587
- if (parse_error == GRPC_ERROR_NONE &&
2453
+ if (GRPC_ERROR_IS_NONE(parse_error) &&
2588
2454
  (parse_error = grpc_http_parser_eof(&parser)) == GRPC_ERROR_NONE) {
2589
2455
  error = grpc_error_set_int(
2590
2456
  grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
@@ -2615,7 +2481,7 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
2615
2481
  (void)GRPC_ERROR_REF(error);
2616
2482
 
2617
2483
  grpc_error_handle err = error;
2618
- if (err != GRPC_ERROR_NONE) {
2484
+ if (!GRPC_ERROR_IS_NONE(err)) {
2619
2485
  err = grpc_error_set_int(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
2620
2486
  "Endpoint read failed", &err, 1),
2621
2487
  GRPC_ERROR_INT_OCCURRED_DURING_WRITE,
@@ -2623,7 +2489,7 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
2623
2489
  }
2624
2490
  std::swap(err, error);
2625
2491
  GRPC_ERROR_UNREF(err);
2626
- if (t->closed_with_error == GRPC_ERROR_NONE) {
2492
+ if (GRPC_ERROR_IS_NONE(t->closed_with_error)) {
2627
2493
  GPR_TIMER_SCOPE("reading_action.parse", 0);
2628
2494
  size_t i = 0;
2629
2495
  grpc_error_handle errors[3] = {GRPC_ERROR_REF(error), GRPC_ERROR_NONE,
@@ -2657,20 +2523,20 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
2657
2523
 
2658
2524
  GPR_TIMER_SCOPE("post_reading_action_locked", 0);
2659
2525
  bool keep_reading = false;
2660
- 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)) {
2661
2527
  error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
2662
2528
  "Transport closed", &t->closed_with_error, 1);
2663
2529
  }
2664
- if (error != GRPC_ERROR_NONE) {
2530
+ if (!GRPC_ERROR_IS_NONE(error)) {
2665
2531
  // If a goaway frame was received, this might be the reason why the read
2666
2532
  // failed. Add this info to the error
2667
- if (t->goaway_error != GRPC_ERROR_NONE) {
2533
+ if (!GRPC_ERROR_IS_NONE(t->goaway_error)) {
2668
2534
  error = grpc_error_add_child(error, GRPC_ERROR_REF(t->goaway_error));
2669
2535
  }
2670
2536
 
2671
2537
  close_transport_locked(t, GRPC_ERROR_REF(error));
2672
2538
  t->endpoint_reading = 0;
2673
- } else if (t->closed_with_error == GRPC_ERROR_NONE) {
2539
+ } else if (GRPC_ERROR_IS_NONE(t->closed_with_error)) {
2674
2540
  keep_reading = true;
2675
2541
  // Since we have read a byte, reset the keepalive timer
2676
2542
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
@@ -2698,18 +2564,17 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
2698
2564
  }
2699
2565
 
2700
2566
  static void continue_read_action_locked(grpc_chttp2_transport* t) {
2701
- const bool urgent = t->goaway_error != GRPC_ERROR_NONE;
2567
+ const bool urgent = !GRPC_ERROR_IS_NONE(t->goaway_error);
2702
2568
  GRPC_CLOSURE_INIT(&t->read_action_locked, read_action, t,
2703
2569
  grpc_schedule_on_exec_ctx);
2704
2570
  grpc_endpoint_read(t->ep, &t->read_buffer, &t->read_action_locked, urgent,
2705
2571
  /*min_progress_size=*/1);
2706
- grpc_chttp2_act_on_flowctl_action(t->flow_control->MakeAction(), t, nullptr);
2707
2572
  }
2708
2573
 
2709
2574
  // t is reffed prior to calling the first time, and once the callback chain
2710
2575
  // that kicks off finishes, it's unreffed
2711
2576
  void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
2712
- t->flow_control->bdp_estimator()->SchedulePing();
2577
+ t->flow_control.bdp_estimator()->SchedulePing();
2713
2578
  send_ping_locked(
2714
2579
  t,
2715
2580
  GRPC_CLOSURE_INIT(&t->start_bdp_ping_locked, start_bdp_ping, t,
@@ -2732,14 +2597,14 @@ static void start_bdp_ping_locked(void* tp, grpc_error_handle error) {
2732
2597
  gpr_log(GPR_INFO, "%s: Start BDP ping err=%s", t->peer_string.c_str(),
2733
2598
  grpc_error_std_string(error).c_str());
2734
2599
  }
2735
- 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)) {
2736
2601
  return;
2737
2602
  }
2738
2603
  // Reset the keepalive ping timer
2739
2604
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
2740
2605
  grpc_timer_cancel(&t->keepalive_ping_timer);
2741
2606
  }
2742
- t->flow_control->bdp_estimator()->StartPing();
2607
+ t->flow_control.bdp_estimator()->StartPing();
2743
2608
  t->bdp_ping_started = true;
2744
2609
  }
2745
2610
 
@@ -2756,7 +2621,7 @@ static void finish_bdp_ping_locked(void* tp, grpc_error_handle error) {
2756
2621
  gpr_log(GPR_INFO, "%s: Complete BDP ping err=%s", t->peer_string.c_str(),
2757
2622
  grpc_error_std_string(error).c_str());
2758
2623
  }
2759
- 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)) {
2760
2625
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
2761
2626
  return;
2762
2627
  }
@@ -2770,8 +2635,8 @@ static void finish_bdp_ping_locked(void* tp, grpc_error_handle error) {
2770
2635
  }
2771
2636
  t->bdp_ping_started = false;
2772
2637
  grpc_core::Timestamp next_ping =
2773
- t->flow_control->bdp_estimator()->CompletePing();
2774
- grpc_chttp2_act_on_flowctl_action(t->flow_control->PeriodicUpdate(), t,
2638
+ t->flow_control.bdp_estimator()->CompletePing();
2639
+ grpc_chttp2_act_on_flowctl_action(t->flow_control.PeriodicUpdate(), t,
2775
2640
  nullptr);
2776
2641
  GPR_ASSERT(!t->have_next_bdp_ping_timer);
2777
2642
  t->have_next_bdp_ping_timer = true;
@@ -2794,11 +2659,11 @@ static void next_bdp_ping_timer_expired_locked(void* tp,
2794
2659
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2795
2660
  GPR_ASSERT(t->have_next_bdp_ping_timer);
2796
2661
  t->have_next_bdp_ping_timer = false;
2797
- if (error != GRPC_ERROR_NONE) {
2662
+ if (!GRPC_ERROR_IS_NONE(error)) {
2798
2663
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
2799
2664
  return;
2800
2665
  }
2801
- if (t->flow_control->bdp_estimator()->accumulator() == 0) {
2666
+ if (t->flow_control.bdp_estimator()->accumulator() == 0) {
2802
2667
  // Block the bdp ping till we receive more data.
2803
2668
  t->bdp_ping_blocked = true;
2804
2669
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
@@ -2876,9 +2741,9 @@ static void init_keepalive_ping(void* arg, grpc_error_handle error) {
2876
2741
  static void init_keepalive_ping_locked(void* arg, grpc_error_handle error) {
2877
2742
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2878
2743
  GPR_ASSERT(t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING);
2879
- if (t->destroying || t->closed_with_error != GRPC_ERROR_NONE) {
2744
+ if (t->destroying || !GRPC_ERROR_IS_NONE(t->closed_with_error)) {
2880
2745
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
2881
- } else if (error == GRPC_ERROR_NONE) {
2746
+ } else if (GRPC_ERROR_IS_NONE(error)) {
2882
2747
  if (t->keepalive_permit_without_calls ||
2883
2748
  grpc_chttp2_stream_map_size(&t->stream_map) > 0) {
2884
2749
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_PINGING;
@@ -2915,7 +2780,7 @@ static void start_keepalive_ping(void* arg, grpc_error_handle error) {
2915
2780
 
2916
2781
  static void start_keepalive_ping_locked(void* arg, grpc_error_handle error) {
2917
2782
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2918
- if (error != GRPC_ERROR_NONE) {
2783
+ if (!GRPC_ERROR_IS_NONE(error)) {
2919
2784
  return;
2920
2785
  }
2921
2786
  if (t->channelz_socket != nullptr) {
@@ -2944,7 +2809,7 @@ static void finish_keepalive_ping(void* arg, grpc_error_handle error) {
2944
2809
  static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error) {
2945
2810
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2946
2811
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
2947
- if (error == GRPC_ERROR_NONE) {
2812
+ if (GRPC_ERROR_IS_NONE(error)) {
2948
2813
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
2949
2814
  GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
2950
2815
  gpr_log(GPR_INFO, "%s: Finish keepalive ping", t->peer_string.c_str());
@@ -2984,7 +2849,7 @@ static void keepalive_watchdog_fired_locked(void* arg,
2984
2849
  grpc_error_handle error) {
2985
2850
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2986
2851
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
2987
- if (error == GRPC_ERROR_NONE) {
2852
+ if (GRPC_ERROR_IS_NONE(error)) {
2988
2853
  gpr_log(GPR_INFO, "%s: Keepalive watchdog fired. Closing transport.",
2989
2854
  t->peer_string.c_str());
2990
2855
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
@@ -3034,187 +2899,6 @@ static void set_pollset_set(grpc_transport* gt, grpc_stream* /*gs*/,
3034
2899
  grpc_endpoint_add_to_pollset_set(t->ep, pollset_set);
3035
2900
  }
3036
2901
 
3037
- //
3038
- // BYTE STREAM
3039
- //
3040
-
3041
- static void reset_byte_stream(void* arg, grpc_error_handle error) {
3042
- grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(arg);
3043
- s->pending_byte_stream = false;
3044
- if (error == GRPC_ERROR_NONE) {
3045
- grpc_chttp2_maybe_complete_recv_message(s->t, s);
3046
- grpc_chttp2_maybe_complete_recv_trailing_metadata(s->t, s);
3047
- } else {
3048
- GPR_ASSERT(error != GRPC_ERROR_NONE);
3049
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, s->on_next, GRPC_ERROR_REF(error));
3050
- s->on_next = nullptr;
3051
- GRPC_ERROR_UNREF(s->byte_stream_error);
3052
- s->byte_stream_error = GRPC_ERROR_NONE;
3053
- grpc_chttp2_cancel_stream(s->t, s, GRPC_ERROR_REF(error));
3054
- s->byte_stream_error = GRPC_ERROR_REF(error);
3055
- }
3056
- }
3057
-
3058
- namespace grpc_core {
3059
-
3060
- Chttp2IncomingByteStream::Chttp2IncomingByteStream(
3061
- grpc_chttp2_transport* transport, grpc_chttp2_stream* stream,
3062
- uint32_t frame_size, uint32_t flags)
3063
- : ByteStream(frame_size, flags),
3064
- transport_(transport),
3065
- stream_(stream),
3066
- refs_(2),
3067
- remaining_bytes_(frame_size) {
3068
- GRPC_ERROR_UNREF(stream->byte_stream_error);
3069
- stream->byte_stream_error = GRPC_ERROR_NONE;
3070
- }
3071
-
3072
- void Chttp2IncomingByteStream::OrphanLocked(
3073
- void* arg, grpc_error_handle /*error_ignored*/) {
3074
- Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
3075
- grpc_chttp2_stream* s = bs->stream_;
3076
- grpc_chttp2_transport* t = s->t;
3077
- bs->Unref();
3078
- s->pending_byte_stream = false;
3079
- grpc_chttp2_maybe_complete_recv_message(t, s);
3080
- grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
3081
- }
3082
-
3083
- void Chttp2IncomingByteStream::Orphan() {
3084
- GPR_TIMER_SCOPE("incoming_byte_stream_destroy", 0);
3085
- transport_->combiner->Run(
3086
- GRPC_CLOSURE_INIT(&destroy_action_,
3087
- &Chttp2IncomingByteStream::OrphanLocked, this, nullptr),
3088
- GRPC_ERROR_NONE);
3089
- }
3090
-
3091
- void Chttp2IncomingByteStream::NextLocked(void* arg,
3092
- grpc_error_handle /*error_ignored*/) {
3093
- Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
3094
- grpc_chttp2_transport* t = bs->transport_;
3095
- grpc_chttp2_stream* s = bs->stream_;
3096
- size_t cur_length = s->frame_storage.length;
3097
- if (!s->read_closed) {
3098
- s->flow_control->IncomingByteStreamUpdate(bs->next_action_.max_size_hint,
3099
- cur_length);
3100
- grpc_chttp2_act_on_flowctl_action(s->flow_control->MakeAction(), t, s);
3101
- }
3102
- GPR_ASSERT(s->unprocessed_incoming_frames_buffer.length == 0);
3103
- if (s->frame_storage.length > 0) {
3104
- grpc_slice_buffer_swap(&s->frame_storage,
3105
- &s->unprocessed_incoming_frames_buffer);
3106
- ExecCtx::Run(DEBUG_LOCATION, bs->next_action_.on_complete, GRPC_ERROR_NONE);
3107
- } else if (s->byte_stream_error != GRPC_ERROR_NONE) {
3108
- ExecCtx::Run(DEBUG_LOCATION, bs->next_action_.on_complete,
3109
- GRPC_ERROR_REF(s->byte_stream_error));
3110
- if (s->data_parser.parsing_frame != nullptr) {
3111
- s->data_parser.parsing_frame->Unref();
3112
- s->data_parser.parsing_frame = nullptr;
3113
- }
3114
- } else if (s->read_closed) {
3115
- if (bs->remaining_bytes_ != 0) {
3116
- s->byte_stream_error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
3117
- "Truncated message", &s->read_closed_error, 1);
3118
- ExecCtx::Run(DEBUG_LOCATION, bs->next_action_.on_complete,
3119
- GRPC_ERROR_REF(s->byte_stream_error));
3120
- if (s->data_parser.parsing_frame != nullptr) {
3121
- s->data_parser.parsing_frame->Unref();
3122
- s->data_parser.parsing_frame = nullptr;
3123
- }
3124
- } else {
3125
- // Should never reach here.
3126
- GPR_ASSERT(false);
3127
- }
3128
- } else {
3129
- s->on_next = bs->next_action_.on_complete;
3130
- }
3131
- bs->Unref();
3132
- }
3133
-
3134
- bool Chttp2IncomingByteStream::Next(size_t max_size_hint,
3135
- grpc_closure* on_complete) {
3136
- GPR_TIMER_SCOPE("incoming_byte_stream_next", 0);
3137
- if (stream_->unprocessed_incoming_frames_buffer.length > 0) {
3138
- return true;
3139
- } else {
3140
- Ref();
3141
- next_action_.max_size_hint = max_size_hint;
3142
- next_action_.on_complete = on_complete;
3143
- transport_->combiner->Run(
3144
- GRPC_CLOSURE_INIT(&next_action_.closure,
3145
- &Chttp2IncomingByteStream::NextLocked, this, nullptr),
3146
- GRPC_ERROR_NONE);
3147
- return false;
3148
- }
3149
- }
3150
-
3151
- grpc_error_handle Chttp2IncomingByteStream::Pull(grpc_slice* slice) {
3152
- GPR_TIMER_SCOPE("incoming_byte_stream_pull", 0);
3153
- grpc_error_handle error;
3154
- if (stream_->unprocessed_incoming_frames_buffer.length > 0) {
3155
- error = grpc_deframe_unprocessed_incoming_frames(
3156
- &stream_->data_parser, stream_,
3157
- &stream_->unprocessed_incoming_frames_buffer, slice, nullptr);
3158
- if (error != GRPC_ERROR_NONE) {
3159
- return error;
3160
- }
3161
- } else {
3162
- error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
3163
- stream_->t->combiner->Run(&stream_->reset_byte_stream,
3164
- GRPC_ERROR_REF(error));
3165
- return error;
3166
- }
3167
- return GRPC_ERROR_NONE;
3168
- }
3169
-
3170
- void Chttp2IncomingByteStream::PublishError(grpc_error_handle error) {
3171
- GPR_ASSERT(error != GRPC_ERROR_NONE);
3172
- ExecCtx::Run(DEBUG_LOCATION, stream_->on_next, GRPC_ERROR_REF(error));
3173
- stream_->on_next = nullptr;
3174
- GRPC_ERROR_UNREF(stream_->byte_stream_error);
3175
- stream_->byte_stream_error = GRPC_ERROR_REF(error);
3176
- grpc_chttp2_cancel_stream(transport_, stream_, GRPC_ERROR_REF(error));
3177
- }
3178
-
3179
- grpc_error_handle Chttp2IncomingByteStream::Push(const grpc_slice& slice,
3180
- grpc_slice* slice_out) {
3181
- if (remaining_bytes_ < GRPC_SLICE_LENGTH(slice)) {
3182
- grpc_error_handle error =
3183
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Too many bytes in stream");
3184
- transport_->combiner->Run(&stream_->reset_byte_stream,
3185
- GRPC_ERROR_REF(error));
3186
- grpc_slice_unref_internal(slice);
3187
- return error;
3188
- } else {
3189
- remaining_bytes_ -= static_cast<uint32_t> GRPC_SLICE_LENGTH(slice);
3190
- if (slice_out != nullptr) {
3191
- *slice_out = slice;
3192
- }
3193
- return GRPC_ERROR_NONE;
3194
- }
3195
- }
3196
-
3197
- grpc_error_handle Chttp2IncomingByteStream::Finished(grpc_error_handle error,
3198
- bool reset_on_error) {
3199
- if (error == GRPC_ERROR_NONE) {
3200
- if (remaining_bytes_ != 0) {
3201
- error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
3202
- }
3203
- }
3204
- if (error != GRPC_ERROR_NONE && reset_on_error) {
3205
- transport_->combiner->Run(&stream_->reset_byte_stream,
3206
- GRPC_ERROR_REF(error));
3207
- }
3208
- Unref();
3209
- return error;
3210
- }
3211
-
3212
- void Chttp2IncomingByteStream::Shutdown(grpc_error_handle error) {
3213
- GRPC_ERROR_UNREF(Finished(error, true /* reset_on_error */));
3214
- }
3215
-
3216
- } // namespace grpc_core
3217
-
3218
2902
  //
3219
2903
  // RESOURCE QUOTAS
3220
2904
  //
@@ -3261,7 +2945,7 @@ static void post_destructive_reclaimer(grpc_chttp2_transport* t) {
3261
2945
 
3262
2946
  static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
3263
2947
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3264
- if (error == GRPC_ERROR_NONE &&
2948
+ if (GRPC_ERROR_IS_NONE(error) &&
3265
2949
  grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
3266
2950
  // Channel with no active streams: send a goaway to try and make it
3267
2951
  // disconnect cleanly
@@ -3274,7 +2958,7 @@ static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
3274
2958
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Buffers full"),
3275
2959
  GRPC_ERROR_INT_HTTP2_ERROR, GRPC_HTTP2_ENHANCE_YOUR_CALM),
3276
2960
  /*immediate_disconnect_hint=*/true);
3277
- } else if (error == GRPC_ERROR_NONE &&
2961
+ } else if (GRPC_ERROR_IS_NONE(error) &&
3278
2962
  GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
3279
2963
  gpr_log(GPR_INFO,
3280
2964
  "HTTP2: %s - skip benign reclamation, there are still %" PRIdPTR
@@ -3293,7 +2977,7 @@ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
3293
2977
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3294
2978
  size_t n = grpc_chttp2_stream_map_size(&t->stream_map);
3295
2979
  t->destructive_reclaimer_registered = false;
3296
- if (error == GRPC_ERROR_NONE && n > 0) {
2980
+ if (GRPC_ERROR_IS_NONE(error) && n > 0) {
3297
2981
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(
3298
2982
  grpc_chttp2_stream_map_rand(&t->stream_map));
3299
2983
  if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
@@ -3400,7 +3084,8 @@ grpc_chttp2_transport_get_socket_node(grpc_transport* transport) {
3400
3084
  }
3401
3085
 
3402
3086
  grpc_transport* grpc_create_chttp2_transport(
3403
- const grpc_channel_args* channel_args, grpc_endpoint* ep, bool is_client) {
3087
+ const grpc_core::ChannelArgs& channel_args, grpc_endpoint* ep,
3088
+ bool is_client) {
3404
3089
  auto t = new grpc_chttp2_transport(channel_args, ep, is_client);
3405
3090
  return &t->base;
3406
3091
  }