grpc 1.47.0 → 1.48.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 (574) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +105 -47
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +20 -11
  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 +2 -1
  11. data/include/grpc/impl/codegen/port_platform.h +6 -3
  12. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  13. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
  14. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
  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 +51 -65
  19. data/src/core/ext/filters/client_channel/client_channel.h +19 -4
  20. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  21. data/src/core/ext/filters/client_channel/connector.h +1 -1
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  24. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
  31. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
  32. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
  33. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
  43. data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
  44. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
  45. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
  52. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
  53. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
  55. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
  56. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
  59. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  60. data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
  61. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
  62. data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
  63. data/src/core/ext/filters/client_channel/subchannel.h +6 -22
  64. data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
  65. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
  68. data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
  70. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
  71. data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
  72. data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
  73. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
  74. data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
  75. data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
  76. data/src/core/ext/filters/http/client_authority_filter.h +5 -2
  77. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
  78. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
  79. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  80. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
  81. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  82. data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
  83. data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
  85. data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
  86. data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
  87. data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
  88. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
  89. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
  90. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
  91. data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
  92. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
  93. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
  94. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
  95. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
  96. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
  97. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
  98. data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
  99. data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
  100. data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
  101. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
  102. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
  103. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
  106. data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
  107. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
  108. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
  109. data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
  110. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
  111. data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
  112. data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
  113. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  114. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
  115. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  116. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
  117. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  118. data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
  119. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  120. data/src/core/ext/xds/certificate_provider_store.cc +2 -0
  121. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  122. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
  123. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
  124. data/src/core/ext/xds/upb_utils.h +1 -2
  125. data/src/core/ext/xds/xds_api.cc +16 -18
  126. data/src/core/ext/xds/xds_api.h +12 -5
  127. data/src/core/ext/xds/xds_bootstrap.cc +37 -24
  128. data/src/core/ext/xds/xds_bootstrap.h +9 -11
  129. data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
  130. data/src/core/ext/xds/xds_certificate_provider.h +16 -1
  131. data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
  132. data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
  133. data/src/core/ext/xds/xds_client.cc +71 -22
  134. data/src/core/ext/xds/xds_client.h +17 -3
  135. data/src/core/ext/xds/xds_client_stats.cc +3 -4
  136. data/src/core/ext/xds/xds_client_stats.h +4 -3
  137. data/src/core/ext/xds/xds_cluster.cc +21 -10
  138. data/src/core/ext/xds/xds_cluster.h +9 -1
  139. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
  140. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
  141. data/src/core/ext/xds/xds_common_types.cc +36 -22
  142. data/src/core/ext/xds/xds_common_types.h +12 -4
  143. data/src/core/ext/xds/xds_endpoint.cc +25 -15
  144. data/src/core/ext/xds/xds_endpoint.h +13 -5
  145. data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
  146. data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
  147. data/src/core/ext/xds/xds_http_filters.cc +7 -0
  148. data/src/core/ext/xds/xds_http_filters.h +3 -3
  149. data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
  150. data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
  151. data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
  152. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  153. data/src/core/ext/xds/xds_listener.cc +51 -33
  154. data/src/core/ext/xds/xds_listener.h +10 -1
  155. data/src/core/ext/xds/xds_resource_type.h +3 -3
  156. data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
  157. data/src/core/ext/xds/xds_route_config.cc +56 -28
  158. data/src/core/ext/xds/xds_route_config.h +11 -2
  159. data/src/core/ext/xds/xds_routing.cc +16 -0
  160. data/src/core/ext/xds/xds_routing.h +7 -2
  161. data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
  162. data/src/core/lib/address_utils/parse_address.cc +5 -8
  163. data/src/core/lib/address_utils/parse_address.h +3 -2
  164. data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
  165. data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
  166. data/src/core/lib/avl/avl.h +3 -3
  167. data/src/core/lib/backoff/backoff.cc +1 -1
  168. data/src/core/lib/backoff/backoff.h +1 -1
  169. data/src/core/lib/channel/call_tracer.h +3 -3
  170. data/src/core/lib/channel/channel_args.h +1 -0
  171. data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
  172. data/src/core/lib/channel/channel_fwd.h +26 -0
  173. data/src/core/lib/channel/channel_stack.cc +4 -4
  174. data/src/core/lib/channel/channel_stack.h +1 -11
  175. data/src/core/lib/channel/channel_stack_builder.h +2 -5
  176. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  177. data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
  178. data/src/core/lib/channel/channelz.cc +2 -1
  179. data/src/core/lib/channel/channelz.h +2 -3
  180. data/src/core/lib/channel/channelz_registry.cc +4 -5
  181. data/src/core/lib/channel/connected_channel.cc +1 -0
  182. data/src/core/lib/channel/connected_channel.h +1 -0
  183. data/src/core/lib/channel/promise_based_filter.cc +11 -5
  184. data/src/core/lib/channel/promise_based_filter.h +2 -0
  185. data/src/core/lib/compression/compression.cc +6 -1
  186. data/src/core/lib/compression/compression_internal.cc +3 -6
  187. data/src/core/lib/compression/compression_internal.h +3 -2
  188. data/src/core/lib/compression/message_compress.cc +3 -1
  189. data/src/core/lib/compression/message_compress.h +2 -3
  190. data/src/core/lib/debug/stats.cc +9 -9
  191. data/src/core/lib/debug/stats.h +2 -1
  192. data/src/core/lib/debug/stats_data.cc +2 -1
  193. data/src/core/lib/debug/stats_data.h +0 -4
  194. data/src/core/lib/debug/trace.h +13 -12
  195. data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
  196. data/src/core/lib/event_engine/event_engine.cc +24 -19
  197. data/src/core/lib/event_engine/event_engine_factory.h +2 -2
  198. data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
  199. data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
  200. data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
  201. data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
  202. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
  203. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
  204. data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
  205. data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
  206. data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
  207. data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
  208. data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
  209. data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
  210. data/src/core/lib/event_engine/promise.h +69 -0
  211. data/src/core/lib/gpr/time_posix.cc +6 -9
  212. data/src/core/lib/gpr/time_windows.cc +10 -7
  213. data/src/core/lib/gprpp/manual_constructor.h +0 -67
  214. data/src/core/lib/gprpp/status_helper.cc +44 -30
  215. data/src/core/lib/gprpp/time.cc +8 -0
  216. data/src/core/lib/gprpp/time.h +4 -0
  217. data/src/core/lib/http/format_request.cc +5 -4
  218. data/src/core/lib/http/format_request.h +1 -1
  219. data/src/core/lib/http/httpcli.cc +18 -12
  220. data/src/core/lib/http/httpcli.h +19 -3
  221. data/src/core/lib/http/httpcli_security_connector.cc +16 -4
  222. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
  223. data/src/core/lib/http/parser.cc +6 -7
  224. data/src/core/lib/http/parser.h +3 -0
  225. data/src/core/lib/iomgr/call_combiner.cc +2 -2
  226. data/src/core/lib/iomgr/endpoint.h +1 -1
  227. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
  228. data/src/core/lib/iomgr/error.cc +11 -9
  229. data/src/core/lib/iomgr/error.h +9 -5
  230. data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
  231. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  232. data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
  233. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  234. data/src/core/lib/iomgr/ev_posix.cc +54 -92
  235. data/src/core/lib/iomgr/ev_posix.h +5 -3
  236. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  237. data/src/core/lib/iomgr/iomgr.cc +7 -0
  238. data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
  239. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
  240. data/src/core/lib/iomgr/load_file.cc +1 -1
  241. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
  242. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  243. data/src/core/lib/iomgr/tcp_client.cc +12 -7
  244. data/src/core/lib/iomgr/tcp_client.h +24 -13
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
  246. data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
  247. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  248. data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
  249. data/src/core/lib/iomgr/tcp_posix.cc +91 -29
  250. data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
  251. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
  253. data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
  254. data/src/core/lib/iomgr/tcp_windows.cc +5 -5
  255. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  256. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  257. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  258. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  259. data/src/core/lib/iomgr/work_serializer.h +2 -3
  260. data/src/core/lib/matchers/matchers.cc +6 -3
  261. data/src/core/lib/matchers/matchers.h +2 -0
  262. data/src/core/lib/promise/activity.cc +0 -1
  263. data/src/core/lib/promise/activity.h +7 -13
  264. data/src/core/lib/promise/loop.h +1 -0
  265. data/src/core/lib/promise/promise.h +1 -0
  266. data/src/core/lib/promise/sleep.cc +36 -31
  267. data/src/core/lib/promise/sleep.h +25 -25
  268. data/src/core/lib/resolver/resolver.cc +5 -0
  269. data/src/core/lib/resolver/resolver.h +3 -0
  270. data/src/core/lib/resolver/resolver_factory.h +5 -2
  271. data/src/core/lib/resolver/resolver_registry.cc +2 -9
  272. data/src/core/lib/resolver/resolver_registry.h +12 -1
  273. data/src/core/lib/resolver/server_address.cc +8 -0
  274. data/src/core/lib/resolver/server_address.h +9 -2
  275. data/src/core/lib/resource_quota/memory_quota.cc +18 -60
  276. data/src/core/lib/resource_quota/memory_quota.h +11 -25
  277. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  278. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  279. data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
  280. data/src/core/lib/security/authorization/evaluate_args.h +6 -3
  281. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
  282. data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
  283. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
  284. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
  285. data/src/core/lib/security/authorization/matchers.cc +9 -1
  286. data/src/core/lib/security/authorization/matchers.h +7 -0
  287. data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
  288. data/src/core/lib/security/authorization/rbac_policy.h +7 -0
  289. data/src/core/lib/security/context/security_context.cc +5 -2
  290. data/src/core/lib/security/context/security_context.h +14 -2
  291. data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
  292. data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
  293. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  294. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  295. data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
  296. data/src/core/lib/security/credentials/call_creds_util.h +1 -0
  297. data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
  298. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
  299. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  300. data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
  301. data/src/core/lib/security/credentials/credentials.cc +4 -8
  302. data/src/core/lib/security/credentials/credentials.h +10 -8
  303. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
  304. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
  305. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  306. data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
  307. data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
  308. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
  309. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  310. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
  311. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
  312. data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
  313. data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
  314. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  315. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
  316. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
  317. data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
  318. data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
  319. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
  320. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
  321. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  322. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  323. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
  324. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
  325. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
  326. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
  327. data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
  328. data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
  329. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
  330. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
  331. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
  332. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
  333. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
  334. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
  335. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  336. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  337. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
  338. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
  339. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
  340. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
  341. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
  342. data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
  343. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
  344. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  345. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  346. data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
  347. data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
  348. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
  349. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
  350. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
  354. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  355. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
  356. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  357. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
  358. data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
  359. data/src/core/lib/security/security_connector/security_connector.cc +20 -18
  360. data/src/core/lib/security/security_connector/security_connector.h +18 -6
  361. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
  362. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  363. data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
  364. data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
  365. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  366. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
  367. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
  368. data/src/core/lib/security/transport/auth_filters.h +7 -0
  369. data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
  370. data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
  371. data/src/core/lib/security/transport/secure_endpoint.h +4 -3
  372. data/src/core/lib/security/transport/security_handshaker.cc +44 -11
  373. data/src/core/lib/security/transport/security_handshaker.h +4 -0
  374. data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
  375. data/src/core/lib/security/util/json_util.cc +3 -2
  376. data/src/core/lib/security/util/json_util.h +0 -2
  377. data/src/core/lib/service_config/service_config_call_data.h +2 -1
  378. data/src/core/lib/service_config/service_config_impl.cc +6 -6
  379. data/src/core/lib/service_config/service_config_impl.h +1 -3
  380. data/src/core/lib/service_config/service_config_parser.cc +2 -4
  381. data/src/core/lib/slice/slice_buffer.cc +30 -1
  382. data/src/core/lib/slice/slice_buffer.h +37 -6
  383. data/src/core/lib/slice/slice_string_helpers.cc +0 -20
  384. data/src/core/lib/slice/slice_string_helpers.h +0 -4
  385. data/src/core/lib/surface/call.cc +53 -115
  386. data/src/core/lib/surface/call.h +5 -1
  387. data/src/core/lib/surface/channel.h +2 -0
  388. data/src/core/lib/surface/channel_ping.cc +1 -1
  389. data/src/core/lib/surface/completion_queue.cc +15 -14
  390. data/src/core/lib/surface/completion_queue.h +2 -1
  391. data/src/core/lib/surface/init.cc +0 -1
  392. data/src/core/lib/surface/lame_client.cc +1 -1
  393. data/src/core/lib/surface/lame_client.h +1 -1
  394. data/src/core/lib/surface/server.cc +14 -8
  395. data/src/core/lib/surface/server.h +4 -1
  396. data/src/core/lib/surface/validate_metadata.cc +1 -1
  397. data/src/core/lib/surface/version.cc +2 -2
  398. data/src/core/lib/transport/error_utils.cc +13 -7
  399. data/src/core/lib/transport/handshaker.cc +3 -3
  400. data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
  401. data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
  402. data/src/core/lib/transport/transport.cc +0 -3
  403. data/src/core/lib/transport/transport.h +20 -14
  404. data/src/core/lib/transport/transport_fwd.h +20 -0
  405. data/src/core/lib/transport/transport_impl.h +1 -0
  406. data/src/core/lib/transport/transport_op_string.cc +9 -9
  407. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  408. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  409. data/src/core/tsi/fake_transport_security.cc +13 -1
  410. data/src/core/tsi/fake_transport_security.h +6 -0
  411. data/src/core/tsi/ssl_transport_security.cc +1 -1
  412. data/src/core/tsi/transport_security_grpc.cc +3 -2
  413. data/src/core/tsi/transport_security_grpc.h +5 -2
  414. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  415. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  416. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  417. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  418. data/src/ruby/ext/grpc/extconf.rb +49 -18
  419. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  420. data/src/ruby/lib/grpc/errors.rb +1 -1
  421. data/src/ruby/lib/grpc/version.rb +1 -1
  422. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  423. data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
  424. data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
  425. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  426. data/third_party/abseil-cpp/absl/base/config.h +182 -41
  427. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  428. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  429. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  430. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  431. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  432. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  433. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  434. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  435. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  436. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  437. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
  438. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  439. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  440. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  441. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
  442. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  443. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  444. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
  445. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  446. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  447. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  448. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  449. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  450. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
  451. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  452. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
  453. data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
  454. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  455. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  456. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
  457. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
  458. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
  459. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
  460. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
  461. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  462. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
  463. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  464. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  465. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  466. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  467. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  468. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
  469. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  470. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
  471. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  472. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
  473. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  474. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  475. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  476. data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
  477. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  478. data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
  479. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  480. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
  481. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  482. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  483. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  484. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  485. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  486. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  487. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
  488. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  489. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  490. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  491. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  492. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  493. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  494. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  495. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  496. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  497. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  498. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  499. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  500. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  501. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
  502. data/third_party/abseil-cpp/absl/status/status.cc +174 -2
  503. data/third_party/abseil-cpp/absl/status/status.h +22 -12
  504. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  505. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  506. data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
  507. data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
  508. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  509. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  510. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  511. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  512. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  513. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  514. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
  515. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
  516. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
  517. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
  518. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  519. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  520. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  521. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  522. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  523. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  524. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  525. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  526. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
  527. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
  528. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  529. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  530. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  531. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  532. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
  533. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
  534. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  535. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
  536. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
  537. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  538. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  539. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  540. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  541. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  542. data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
  543. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  544. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  545. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  546. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  547. data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
  548. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  549. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  550. data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
  551. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  552. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  553. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  554. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  555. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  556. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  557. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  558. data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
  559. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  560. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  561. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  562. data/third_party/abseil-cpp/absl/time/time.h +16 -12
  563. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  564. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  565. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  566. data/third_party/abseil-cpp/absl/types/span.h +2 -1
  567. metadata +39 -15
  568. data/src/core/lib/slice/slice_split.cc +0 -103
  569. data/src/core/lib/slice/slice_split.h +0 -36
  570. data/src/core/lib/transport/byte_stream.cc +0 -165
  571. data/src/core/lib/transport/byte_stream.h +0 -170
  572. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
  573. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
  574. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -22,20 +22,23 @@
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
24
  #include <stdint.h>
25
- #include <stdlib.h>
26
25
 
27
- #include <algorithm>
26
+ #include <iosfwd>
27
+ #include <string>
28
+
29
+ #include "absl/functional/function_ref.h"
30
+ #include "absl/status/status.h"
31
+ #include "absl/types/optional.h"
32
+ #include "absl/utility/utility.h"
33
+
34
+ #include <grpc/support/log.h>
28
35
 
29
- #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
30
36
  #include "src/core/lib/debug/trace.h"
31
37
  #include "src/core/lib/gprpp/time.h"
32
- #include "src/core/lib/iomgr/error.h"
38
+ #include "src/core/lib/resource_quota/memory_quota.h"
33
39
  #include "src/core/lib/transport/bdp_estimator.h"
34
40
  #include "src/core/lib/transport/pid_controller.h"
35
41
 
36
- struct grpc_chttp2_transport;
37
- struct grpc_chttp2_stream;
38
-
39
42
  extern grpc_core::TraceFlag grpc_flowctl_trace;
40
43
 
41
44
  namespace grpc {
@@ -48,18 +51,19 @@ namespace grpc_core {
48
51
  namespace chttp2 {
49
52
 
50
53
  static constexpr uint32_t kDefaultWindow = 65535;
54
+ static constexpr uint32_t kDefaultFrameSize = 16384;
51
55
  static constexpr int64_t kMaxWindow = static_cast<int64_t>((1u << 31) - 1);
52
56
  // TODO(ncteisen): Tune this
53
57
  static constexpr uint32_t kFrameSize = 1024 * 1024;
54
58
  static constexpr const uint32_t kMinInitialWindowSize = 128;
55
59
  static constexpr const uint32_t kMaxInitialWindowSize = (1u << 30);
56
60
  // The maximum per-stream flow control window delta to advertise.
57
- static constexpr const uint32_t kMaxWindowDelta = (1u << 20);
61
+ static constexpr const int64_t kMaxWindowDelta = (1u << 20);
58
62
 
59
63
  class TransportFlowControl;
60
64
  class StreamFlowControl;
61
65
 
62
- extern bool g_test_only_transport_flow_control_window_check;
66
+ enum class StallEdge { kNoChange, kStalled, kUnstalled };
63
67
 
64
68
  // Encapsulates a collections of actions the transport needs to take with
65
69
  // regard to flow control. Each action comes with urgencies that tell the
@@ -109,7 +113,20 @@ class FlowControlAction {
109
113
  }
110
114
 
111
115
  static const char* UrgencyString(Urgency u);
112
- void Trace(grpc_chttp2_transport* t) const;
116
+ std::string DebugString() const;
117
+
118
+ void AssertEmpty() { GPR_ASSERT(*this == FlowControlAction()); }
119
+
120
+ bool operator==(const FlowControlAction& other) const {
121
+ return send_stream_update_ == other.send_stream_update_ &&
122
+ send_transport_update_ == other.send_transport_update_ &&
123
+ send_initial_window_update_ == other.send_initial_window_update_ &&
124
+ send_max_frame_size_update_ == other.send_max_frame_size_update_ &&
125
+ (send_initial_window_update_ == Urgency::NO_ACTION_NEEDED ||
126
+ initial_window_size_ == other.initial_window_size_) &&
127
+ (send_max_frame_size_update_ == Urgency::NO_ACTION_NEEDED ||
128
+ max_frame_size_ == other.max_frame_size_);
129
+ }
113
130
 
114
131
  private:
115
132
  Urgency send_stream_update_ = Urgency::NO_ACTION_NEEDED;
@@ -120,120 +137,16 @@ class FlowControlAction {
120
137
  uint32_t max_frame_size_ = 0;
121
138
  };
122
139
 
123
- class FlowControlTrace {
124
- public:
125
- FlowControlTrace(const char* reason, TransportFlowControl* tfc,
126
- StreamFlowControl* sfc) {
127
- if (enabled_) Init(reason, tfc, sfc);
128
- }
129
-
130
- ~FlowControlTrace() {
131
- if (enabled_) Finish();
132
- }
133
-
134
- private:
135
- void Init(const char* reason, TransportFlowControl* tfc,
136
- StreamFlowControl* sfc);
137
- void Finish();
138
-
139
- const bool enabled_ = GRPC_TRACE_FLAG_ENABLED(grpc_flowctl_trace);
140
-
141
- TransportFlowControl* tfc_;
142
- StreamFlowControl* sfc_;
143
- const char* reason_;
144
- int64_t remote_window_;
145
- int64_t target_window_;
146
- int64_t announced_window_;
147
- int64_t remote_window_delta_;
148
- int64_t local_window_delta_;
149
- int64_t announced_window_delta_;
150
- };
151
-
152
- // Fat interface with all methods a flow control implementation needs to
153
- // support.
154
- class TransportFlowControlBase {
155
- public:
156
- TransportFlowControlBase() {}
157
- virtual ~TransportFlowControlBase() {}
158
-
159
- // Is flow control enabled? This is needed in other codepaths like the checks
160
- // in parsing and in writing.
161
- virtual bool flow_control_enabled() const = 0;
162
-
163
- // Called to check if the transport needs to send a WINDOW_UPDATE frame
164
- virtual uint32_t MaybeSendUpdate(bool /* writing_anyway */) = 0;
165
-
166
- // Using the protected members, returns and Action to be taken by the
167
- // tranport.
168
- virtual FlowControlAction MakeAction() = 0;
169
-
170
- // Using the protected members, returns and Action to be taken by the
171
- // tranport. Also checks for updates to our BDP estimate and acts
172
- // accordingly.
173
- virtual FlowControlAction PeriodicUpdate() = 0;
174
-
175
- // Called to do bookkeeping when a stream owned by this transport sends
176
- // data on the wire
177
- virtual void StreamSentData(int64_t /* size */) = 0;
178
-
179
- // Called to do bookkeeping when a stream owned by this transport receives
180
- // data from the wire. Also does error checking for frame size.
181
- virtual grpc_error_handle RecvData(int64_t /* incoming_frame_size */) = 0;
182
-
183
- // Called to do bookkeeping when we receive a WINDOW_UPDATE frame.
184
- virtual void RecvUpdate(uint32_t /* size */) = 0;
185
-
186
- // Returns the BdpEstimator held by this object. Caller is responsible for
187
- // checking for nullptr. TODO(ncteisen): consider fully encapsulating all
188
- // bdp estimator actions inside TransportFlowControl
189
- virtual BdpEstimator* bdp_estimator() { return nullptr; }
190
-
191
- // Getters
192
- int64_t remote_window() const { return remote_window_; }
193
- virtual int64_t target_window() const { return target_initial_window_size_; }
194
- int64_t announced_window() const { return announced_window_; }
195
-
196
- // Used in certain benchmarks in which we don't want FlowControl to be a
197
- // factor
198
- virtual void TestOnlyForceHugeWindow() {}
199
-
200
- protected:
201
- friend class grpc::testing::TrickledCHTTP2;
202
- int64_t remote_window_ = kDefaultWindow;
203
- int64_t target_initial_window_size_ = kDefaultWindow;
204
- int64_t announced_window_ = kDefaultWindow;
205
- };
206
-
207
- // Implementation of flow control that does NOTHING. Always returns maximum
208
- // values, never initiates writes, and assumes that the remote peer is doing
209
- // the same. To be used to narrow down on flow control as the cause of negative
210
- // performance.
211
- class TransportFlowControlDisabled final : public TransportFlowControlBase {
212
- public:
213
- // Maxes out all values
214
- explicit TransportFlowControlDisabled(grpc_chttp2_transport* t);
215
-
216
- bool flow_control_enabled() const override { return false; }
217
-
218
- // Never do anything.
219
- uint32_t MaybeSendUpdate(bool /* writing_anyway */) override { return 0; }
220
- FlowControlAction MakeAction() override { return FlowControlAction(); }
221
- FlowControlAction PeriodicUpdate() override { return FlowControlAction(); }
222
- void StreamSentData(int64_t /* size */) override {}
223
- grpc_error_handle RecvData(int64_t /* incoming_frame_size */) override {
224
- return GRPC_ERROR_NONE;
225
- }
226
- void RecvUpdate(uint32_t /* size */) override {}
227
- };
140
+ std::ostream& operator<<(std::ostream& out, FlowControlAction::Urgency urgency);
141
+ std::ostream& operator<<(std::ostream& out, const FlowControlAction& action);
228
142
 
229
143
  // Implementation of flow control that abides to HTTP/2 spec and attempts
230
144
  // to be as performant as possible.
231
- class TransportFlowControl final : public TransportFlowControlBase {
145
+ class TransportFlowControl final {
232
146
  public:
233
- TransportFlowControl(const grpc_chttp2_transport* t, bool enable_bdp_probe);
234
- ~TransportFlowControl() override {}
235
-
236
- bool flow_control_enabled() const override { return true; }
147
+ explicit TransportFlowControl(const char* name, bool enable_bdp_probe,
148
+ MemoryOwner* memory_owner);
149
+ ~TransportFlowControl() {}
237
150
 
238
151
  bool bdp_probe() const { return enable_bdp_probe_; }
239
152
 
@@ -241,85 +154,112 @@ class TransportFlowControl final : public TransportFlowControlBase {
241
154
  // else returns zero; writing_anyway indicates if a write would happen
242
155
  // regardless of the send - if it is false and this function returns non-zero,
243
156
  // this announce will cause a write to occur
244
- uint32_t MaybeSendUpdate(bool writing_anyway) override;
157
+ uint32_t MaybeSendUpdate(bool writing_anyway);
158
+
159
+ // Track an update to the incoming flow control counters - that is how many
160
+ // tokens we report to our peer that we're willing to accept.
161
+ // Instantiators *must* call MakeAction before destruction of this value.
162
+ class IncomingUpdateContext {
163
+ public:
164
+ explicit IncomingUpdateContext(TransportFlowControl* tfc) : tfc_(tfc) {}
165
+ ~IncomingUpdateContext() { GPR_ASSERT(tfc_ == nullptr); }
166
+
167
+ IncomingUpdateContext(const IncomingUpdateContext&) = delete;
168
+ IncomingUpdateContext& operator=(const IncomingUpdateContext&) = delete;
169
+
170
+ // Reads the flow control data and returns an actionable struct that will
171
+ // tell chttp2 exactly what it needs to do
172
+ FlowControlAction MakeAction() {
173
+ return absl::exchange(tfc_, nullptr)->UpdateAction(FlowControlAction());
174
+ }
245
175
 
246
- // Reads the flow control data and returns and actionable struct that will
247
- // tell chttp2 exactly what it needs to do
248
- FlowControlAction MakeAction() override {
249
- return UpdateAction(FlowControlAction());
250
- }
176
+ // Notify of data receipt. Returns OkStatus if the data was accepted,
177
+ // else an error status if the connection should be closed.
178
+ absl::Status RecvData(
179
+ int64_t incoming_frame_size, absl::FunctionRef<absl::Status()> stream =
180
+ []() { return absl::OkStatus(); });
181
+
182
+ // Update a stream announce window delta, keeping track of how much total
183
+ // positive delta is present on the transport.
184
+ void UpdateAnnouncedWindowDelta(int64_t* delta, int64_t change) {
185
+ if (change == 0) return;
186
+ if (*delta > 0) {
187
+ tfc_->announced_stream_total_over_incoming_window_ -= *delta;
188
+ }
189
+ *delta += change;
190
+ if (*delta > 0) {
191
+ tfc_->announced_stream_total_over_incoming_window_ += *delta;
192
+ }
193
+ }
194
+
195
+ private:
196
+ TransportFlowControl* tfc_;
197
+ };
198
+
199
+ // Track an update to the outgoing flow control counters - that is how many
200
+ // tokens our peer has said we can send.
201
+ class OutgoingUpdateContext {
202
+ public:
203
+ explicit OutgoingUpdateContext(TransportFlowControl* tfc) : tfc_(tfc) {}
204
+ void StreamSentData(int64_t size) { tfc_->remote_window_ -= size; }
205
+
206
+ // we have received a WINDOW_UPDATE frame for a transport
207
+ void RecvUpdate(uint32_t size) { tfc_->remote_window_ += size; }
208
+
209
+ // Finish the update and check whether we became stalled or unstalled.
210
+ StallEdge Finish() {
211
+ bool is_stalled = tfc_->remote_window_ <= 0;
212
+ if (is_stalled != was_stalled_) {
213
+ return is_stalled ? StallEdge::kStalled : StallEdge::kUnstalled;
214
+ } else {
215
+ return StallEdge::kNoChange;
216
+ }
217
+ }
218
+
219
+ private:
220
+ TransportFlowControl* tfc_;
221
+ const bool was_stalled_ = tfc_->remote_window_ <= 0;
222
+ };
251
223
 
252
224
  // Call periodically (at a low-ish rate, 100ms - 10s makes sense)
253
225
  // to perform more complex flow control calculations and return an action
254
226
  // to let chttp2 change its parameters
255
- FlowControlAction PeriodicUpdate() override;
227
+ FlowControlAction PeriodicUpdate();
256
228
 
257
- void StreamSentData(int64_t size) override { remote_window_ -= size; }
229
+ int64_t target_window() const;
230
+ int64_t target_frame_size() const { return target_frame_size_; }
258
231
 
259
- grpc_error_handle ValidateRecvData(int64_t incoming_frame_size);
260
- void CommitRecvData(int64_t incoming_frame_size) {
261
- announced_window_ -= incoming_frame_size;
262
- }
232
+ BdpEstimator* bdp_estimator() { return &bdp_estimator_; }
263
233
 
264
- grpc_error_handle RecvData(int64_t incoming_frame_size) override {
265
- FlowControlTrace trace(" data recv", this, nullptr);
266
- grpc_error_handle error = ValidateRecvData(incoming_frame_size);
267
- if (error != GRPC_ERROR_NONE) return error;
268
- CommitRecvData(incoming_frame_size);
269
- return GRPC_ERROR_NONE;
270
- }
234
+ uint32_t acked_init_window() const { return acked_init_window_; }
271
235
 
272
- // we have received a WINDOW_UPDATE frame for a transport
273
- void RecvUpdate(uint32_t size) override {
274
- FlowControlTrace trace("t updt recv", this, nullptr);
275
- remote_window_ += size;
276
- }
277
-
278
- // See comment above announced_stream_total_over_incoming_window_ for the
279
- // logic behind this decision.
280
- int64_t target_window() const override {
281
- return static_cast<uint32_t>(
282
- std::min(static_cast<int64_t>((1u << 31) - 1),
283
- announced_stream_total_over_incoming_window_ +
284
- target_initial_window_size_));
285
- }
236
+ void SetAckedInitialWindow(uint32_t value) { acked_init_window_ = value; }
286
237
 
287
- const grpc_chttp2_transport* transport() const { return t_; }
238
+ // Getters
239
+ int64_t remote_window() const { return remote_window_; }
240
+ int64_t announced_window() const { return announced_window_; }
288
241
 
289
- void PreUpdateAnnouncedWindowOverIncomingWindow(int64_t delta) {
290
- if (delta > 0) {
291
- announced_stream_total_over_incoming_window_ -= delta;
292
- }
242
+ int64_t announced_stream_total_over_incoming_window() const {
243
+ return announced_stream_total_over_incoming_window_;
293
244
  }
294
245
 
295
- void PostUpdateAnnouncedWindowOverIncomingWindow(int64_t delta) {
246
+ void RemoveAnnouncedWindowDelta(int64_t delta) {
296
247
  if (delta > 0) {
297
- announced_stream_total_over_incoming_window_ += delta;
248
+ announced_stream_total_over_incoming_window_ -= delta;
298
249
  }
299
250
  }
300
251
 
301
- BdpEstimator* bdp_estimator() override { return &bdp_estimator_; }
302
-
303
- void TestOnlyForceHugeWindow() override {
304
- announced_window_ = 1024 * 1024 * 1024;
305
- remote_window_ = 1024 * 1024 * 1024;
306
- }
307
-
308
252
  private:
309
253
  double TargetLogBdp();
310
254
  double SmoothLogBdp(double value);
311
- FlowControlAction::Urgency DeltaUrgency(int64_t value,
312
- grpc_chttp2_setting_id setting_id);
255
+ static void UpdateSetting(int64_t* desired_value, int64_t new_desired_value,
256
+ FlowControlAction* action,
257
+ FlowControlAction& (FlowControlAction::*set)(
258
+ FlowControlAction::Urgency, uint32_t));
313
259
 
314
- FlowControlAction UpdateAction(FlowControlAction action) {
315
- if (announced_window_ < target_window() / 2) {
316
- action.set_send_transport_update(
317
- FlowControlAction::Urgency::UPDATE_IMMEDIATELY);
318
- }
319
- return action;
320
- }
260
+ FlowControlAction UpdateAction(FlowControlAction action);
321
261
 
322
- const grpc_chttp2_transport* const t_;
262
+ MemoryOwner* const memory_owner_;
323
263
 
324
264
  /** calculating what we should give for local window:
325
265
  we track the total amount of flow control over initial window size
@@ -340,140 +280,87 @@ class TransportFlowControl final : public TransportFlowControlBase {
340
280
  /* pid controller */
341
281
  PidController pid_controller_;
342
282
  Timestamp last_pid_update_;
283
+
284
+ int64_t remote_window_ = kDefaultWindow;
285
+ int64_t target_initial_window_size_ = kDefaultWindow;
286
+ int64_t target_frame_size_ = kDefaultFrameSize;
287
+ int64_t announced_window_ = kDefaultWindow;
288
+ uint32_t acked_init_window_ = kDefaultWindow;
343
289
  };
344
290
 
345
- // Fat interface with all methods a stream flow control implementation needs
346
- // to support.
347
- class StreamFlowControlBase {
291
+ // Implementation of flow control that abides to HTTP/2 spec and attempts
292
+ // to be as performant as possible.
293
+ class StreamFlowControl final {
348
294
  public:
349
- StreamFlowControlBase() {}
350
- virtual ~StreamFlowControlBase() {}
351
-
352
- // Updates an action using the protected members.
353
- virtual FlowControlAction UpdateAction(FlowControlAction /* action */) {
354
- abort();
295
+ explicit StreamFlowControl(TransportFlowControl* tfc);
296
+ ~StreamFlowControl() {
297
+ tfc_->RemoveAnnouncedWindowDelta(announced_window_delta_);
355
298
  }
356
299
 
357
- // Using the protected members, returns an Action for this stream to be
358
- // taken by the tranport.
359
- virtual FlowControlAction MakeAction() = 0;
360
-
361
- // Bookkeeping for when data is sent on this stream.
362
- virtual void SentData(int64_t /* outgoing_frame_size */) = 0;
363
-
364
- // Bookkeeping and error checking for when data is received by this stream.
365
- virtual grpc_error_handle RecvData(int64_t /* incoming_frame_size */) = 0;
300
+ // Track an update to the incoming flow control counters - that is how many
301
+ // tokens we report to our peer that we're willing to accept.
302
+ // Instantiators *must* call MakeAction before destruction of this value.
303
+ class IncomingUpdateContext {
304
+ public:
305
+ explicit IncomingUpdateContext(StreamFlowControl* sfc)
306
+ : tfc_upd_(sfc->tfc_), sfc_(sfc) {}
366
307
 
367
- // Called to check if this stream needs to send a WINDOW_UPDATE frame.
368
- virtual uint32_t MaybeSendUpdate() = 0;
369
-
370
- // Bookkeeping for receiving a WINDOW_UPDATE from for this stream.
371
- virtual void RecvUpdate(uint32_t /* size */) = 0;
372
-
373
- // Bookkeeping for when a call pulls bytes out of the transport. At this
374
- // point we consider the data 'used' and can thus let out peer know we are
375
- // ready for more data.
376
- virtual void IncomingByteStreamUpdate(size_t /* max_size_hint */,
377
- size_t /* have_already */) {
378
- abort();
379
- }
380
-
381
- // Used in certain benchmarks in which we don't want FlowControl to be a
382
- // factor
383
- virtual void TestOnlyForceHugeWindow() {}
308
+ FlowControlAction MakeAction() {
309
+ return sfc_->UpdateAction(tfc_upd_.MakeAction());
310
+ }
384
311
 
385
- // Getters
386
- int64_t remote_window_delta() const { return remote_window_delta_; }
387
- int64_t local_window_delta() const { return local_window_delta_; }
388
- int64_t announced_window_delta() const { return announced_window_delta_; }
312
+ // we have received data from the wire
313
+ absl::Status RecvData(int64_t incoming_frame_size);
389
314
 
390
- protected:
391
- friend class grpc::testing::TrickledCHTTP2;
392
- int64_t remote_window_delta_ = 0;
393
- int64_t local_window_delta_ = 0;
394
- int64_t announced_window_delta_ = 0;
395
- };
396
-
397
- // Implementation of flow control that does NOTHING. Always returns maximum
398
- // values, never initiates writes, and assumes that the remote peer is doing
399
- // the same. To be used to narrow down on flow control as the cause of negative
400
- // performance.
401
- class StreamFlowControlDisabled : public StreamFlowControlBase {
402
- public:
403
- FlowControlAction UpdateAction(FlowControlAction action) override {
404
- return action;
405
- }
406
- FlowControlAction MakeAction() override { return FlowControlAction(); }
407
- void SentData(int64_t /* outgoing_frame_size */) override {}
408
- grpc_error_handle RecvData(int64_t /* incoming_frame_size */) override {
409
- return GRPC_ERROR_NONE;
410
- }
411
- uint32_t MaybeSendUpdate() override { return 0; }
412
- void RecvUpdate(uint32_t /* size */) override {}
413
- void IncomingByteStreamUpdate(size_t /* max_size_hint */,
414
- size_t /* have_already */) override {}
415
- };
315
+ // the application is asking for a certain amount of bytes
316
+ void SetMinProgressSize(uint32_t min_progress_size) {
317
+ sfc_->min_progress_size_ = min_progress_size;
318
+ }
416
319
 
417
- // Implementation of flow control that abides to HTTP/2 spec and attempts
418
- // to be as performant as possible.
419
- class StreamFlowControl final : public StreamFlowControlBase {
420
- public:
421
- StreamFlowControl(TransportFlowControl* tfc, const grpc_chttp2_stream* s);
422
- ~StreamFlowControl() override {
423
- tfc_->PreUpdateAnnouncedWindowOverIncomingWindow(announced_window_delta_);
424
- }
320
+ void SetPendingSize(int64_t pending_size);
425
321
 
426
- FlowControlAction UpdateAction(FlowControlAction action) override;
427
- FlowControlAction MakeAction() override {
428
- return UpdateAction(tfc_->MakeAction());
429
- }
322
+ private:
323
+ TransportFlowControl::IncomingUpdateContext tfc_upd_;
324
+ StreamFlowControl* const sfc_;
325
+ };
430
326
 
431
- // we have sent data on the wire, we must track this in our bookkeeping for
432
- // the remote peer's flow control.
433
- void SentData(int64_t outgoing_frame_size) override {
434
- FlowControlTrace tracer(" data sent", tfc_, this);
435
- tfc_->StreamSentData(outgoing_frame_size);
436
- remote_window_delta_ -= outgoing_frame_size;
437
- }
327
+ // Track an update to the outgoing flow control counters - that is how many
328
+ // tokens our peer has said we can send.
329
+ class OutgoingUpdateContext {
330
+ public:
331
+ explicit OutgoingUpdateContext(StreamFlowControl* sfc)
332
+ : tfc_upd_(sfc->tfc_), sfc_(sfc) {}
333
+ // we have received a WINDOW_UPDATE frame for a stream
334
+ void RecvUpdate(uint32_t size) { sfc_->remote_window_delta_ += size; }
335
+ // we have sent data on the wire, we must track this in our bookkeeping for
336
+ // the remote peer's flow control.
337
+ void SentData(int64_t outgoing_frame_size) {
338
+ tfc_upd_.StreamSentData(outgoing_frame_size);
339
+ sfc_->remote_window_delta_ -= outgoing_frame_size;
340
+ }
438
341
 
439
- // we have received data from the wire
440
- grpc_error_handle RecvData(int64_t incoming_frame_size) override;
342
+ private:
343
+ TransportFlowControl::OutgoingUpdateContext tfc_upd_;
344
+ StreamFlowControl* const sfc_;
345
+ };
441
346
 
442
347
  // returns an announce if we should send a stream update to our peer, else
443
348
  // returns zero
444
- uint32_t MaybeSendUpdate() override;
445
-
446
- // we have received a WINDOW_UPDATE frame for a stream
447
- void RecvUpdate(uint32_t size) override {
448
- FlowControlTrace trace("s updt recv", tfc_, this);
449
- remote_window_delta_ += size;
450
- }
451
-
452
- // the application is asking for a certain amount of bytes
453
- void IncomingByteStreamUpdate(size_t max_size_hint,
454
- size_t have_already) override;
349
+ uint32_t MaybeSendUpdate();
455
350
 
456
351
  int64_t remote_window_delta() const { return remote_window_delta_; }
457
- int64_t local_window_delta() const { return local_window_delta_; }
458
352
  int64_t announced_window_delta() const { return announced_window_delta_; }
459
-
460
- const grpc_chttp2_stream* stream() const { return s_; }
461
-
462
- void TestOnlyForceHugeWindow() override {
463
- announced_window_delta_ = 1024 * 1024 * 1024;
464
- local_window_delta_ = 1024 * 1024 * 1024;
465
- remote_window_delta_ = 1024 * 1024 * 1024;
466
- }
353
+ uint32_t min_progress_size() const { return min_progress_size_; }
467
354
 
468
355
  private:
469
356
  TransportFlowControl* const tfc_;
470
- const grpc_chttp2_stream* const s_;
357
+ int64_t min_progress_size_ = 0;
358
+ int64_t remote_window_delta_ = 0;
359
+ int64_t announced_window_delta_ = 0;
360
+ absl::optional<int64_t> pending_size_;
471
361
 
472
- void UpdateAnnouncedWindowDelta(TransportFlowControl* tfc, int64_t change) {
473
- tfc->PreUpdateAnnouncedWindowOverIncomingWindow(announced_window_delta_);
474
- announced_window_delta_ += change;
475
- tfc->PostUpdateAnnouncedWindowOverIncomingWindow(announced_window_delta_);
476
- }
362
+ FlowControlAction UpdateAction(FlowControlAction action);
363
+ uint32_t DesiredAnnounceSize() const;
477
364
  };
478
365
 
479
366
  class TestOnlyTransportTargetWindowEstimatesMocker {