grpc 1.60.2 → 1.61.0.pre2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +208 -165
  3. data/include/grpc/event_engine/event_engine.h +59 -12
  4. data/include/grpc/event_engine/internal/memory_allocator_impl.h +6 -0
  5. data/include/grpc/event_engine/internal/slice_cast.h +12 -0
  6. data/include/grpc/event_engine/memory_allocator.h +3 -1
  7. data/include/grpc/event_engine/slice.h +5 -0
  8. data/include/grpc/grpc_security.h +22 -1
  9. data/include/grpc/impl/call.h +29 -0
  10. data/include/grpc/impl/channel_arg_names.h +12 -1
  11. data/include/grpc/impl/slice_type.h +1 -1
  12. data/include/grpc/module.modulemap +1 -0
  13. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +54 -7
  14. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +20 -6
  15. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +10 -13
  16. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -10
  17. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +326 -0
  18. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +143 -0
  19. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -2
  20. data/src/core/ext/filters/client_channel/client_channel.cc +32 -6
  21. data/src/core/ext/filters/client_channel/client_channel_internal.h +2 -0
  22. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +1 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +54 -21
  24. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -1
  26. data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.cc +12 -15
  27. data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.h +8 -5
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +139 -92
  29. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +9 -4
  30. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +9 -4
  31. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +10 -11
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +94 -93
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +5 -3
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +12 -15
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +38 -16
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +25 -28
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +10 -10
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +37 -35
  39. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -9
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +504 -461
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +232 -122
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -6
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +642 -251
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +2 -6
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +7 -8
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +3 -1
  48. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
  49. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -2
  50. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +6 -8
  51. data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.cc +1031 -0
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.h +277 -0
  53. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +128 -270
  54. data/src/core/ext/filters/client_channel/resolver/xds/{xds_resolver.h → xds_resolver_attributes.h} +5 -4
  55. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.cc +25 -0
  56. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.h +30 -0
  57. data/src/core/ext/filters/client_channel/retry_filter.cc +1 -0
  58. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +35 -17
  59. data/src/core/ext/filters/deadline/deadline_filter.cc +12 -0
  60. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +17 -13
  61. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +13 -4
  62. data/src/core/ext/filters/http/client/http_client_filter.cc +23 -32
  63. data/src/core/ext/filters/http/client/http_client_filter.h +10 -5
  64. data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
  65. data/src/core/ext/filters/http/client_authority_filter.h +12 -4
  66. data/src/core/ext/filters/http/http_filters_plugin.cc +42 -20
  67. data/src/core/ext/filters/http/message_compress/compression_filter.cc +55 -80
  68. data/src/core/ext/filters/http/message_compress/compression_filter.h +54 -12
  69. data/src/core/ext/filters/http/message_compress/legacy_compression_filter.cc +325 -0
  70. data/src/core/ext/filters/http/message_compress/legacy_compression_filter.h +139 -0
  71. data/src/core/ext/filters/http/server/http_server_filter.cc +41 -41
  72. data/src/core/ext/filters/http/server/http_server_filter.h +11 -4
  73. data/src/core/ext/filters/message_size/message_size_filter.cc +56 -76
  74. data/src/core/ext/filters/message_size/message_size_filter.h +35 -23
  75. data/src/core/ext/filters/rbac/rbac_filter.cc +15 -11
  76. data/src/core/ext/filters/rbac/rbac_filter.h +11 -4
  77. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +25 -13
  78. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +47 -50
  79. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +21 -4
  80. data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
  81. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
  82. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +11 -2
  83. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +68 -145
  84. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -3
  85. data/src/core/ext/transport/chttp2/transport/flow_control.cc +21 -82
  86. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -8
  87. data/src/core/ext/transport/chttp2/transport/frame.cc +506 -0
  88. data/src/core/ext/transport/chttp2/transport/frame.h +214 -0
  89. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -1
  90. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +33 -79
  91. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -7
  92. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -36
  93. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -2
  94. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +122 -32
  95. data/src/core/ext/transport/chttp2/transport/http2_settings.h +142 -37
  96. data/src/core/ext/transport/chttp2/transport/internal.h +1 -22
  97. data/src/core/ext/transport/chttp2/transport/parsing.cc +23 -37
  98. data/src/core/ext/transport/chttp2/transport/writing.cc +26 -58
  99. data/src/core/ext/transport/inproc/inproc_transport.cc +172 -13
  100. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +712 -0
  101. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +151 -0
  102. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +33 -0
  103. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +133 -0
  104. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +50 -0
  105. data/src/core/ext/xds/certificate_provider_store.cc +2 -1
  106. data/src/core/ext/xds/certificate_provider_store.h +0 -5
  107. data/src/core/ext/xds/xds_api.cc +31 -18
  108. data/src/core/ext/xds/xds_api.h +2 -2
  109. data/src/core/ext/xds/xds_bootstrap.h +3 -0
  110. data/src/core/ext/xds/xds_certificate_provider.cc +88 -287
  111. data/src/core/ext/xds/xds_certificate_provider.h +44 -111
  112. data/src/core/ext/xds/xds_client.cc +420 -414
  113. data/src/core/ext/xds/xds_client.h +31 -22
  114. data/src/core/ext/xds/xds_client_grpc.cc +3 -1
  115. data/src/core/ext/xds/xds_cluster.cc +104 -11
  116. data/src/core/ext/xds/xds_cluster.h +9 -1
  117. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +9 -5
  118. data/src/core/ext/xds/xds_common_types.cc +14 -10
  119. data/src/core/ext/xds/xds_endpoint.cc +9 -4
  120. data/src/core/ext/xds/xds_endpoint.h +5 -1
  121. data/src/core/ext/xds/xds_health_status.cc +12 -2
  122. data/src/core/ext/xds/xds_health_status.h +4 -2
  123. data/src/core/ext/xds/xds_http_rbac_filter.cc +5 -3
  124. data/src/core/ext/xds/xds_listener.cc +14 -8
  125. data/src/core/ext/xds/xds_resource_type_impl.h +6 -4
  126. data/src/core/ext/xds/xds_route_config.cc +34 -22
  127. data/src/core/ext/xds/xds_route_config.h +1 -0
  128. data/src/core/ext/xds/xds_server_config_fetcher.cc +61 -57
  129. data/src/core/ext/xds/xds_transport.h +3 -0
  130. data/src/core/ext/xds/xds_transport_grpc.cc +47 -50
  131. data/src/core/ext/xds/xds_transport_grpc.h +4 -0
  132. data/src/core/lib/channel/call_tracer.cc +12 -0
  133. data/src/core/lib/channel/call_tracer.h +17 -3
  134. data/src/core/lib/channel/channel_args.cc +24 -14
  135. data/src/core/lib/channel/channel_args.h +74 -13
  136. data/src/core/lib/channel/channel_stack.cc +27 -0
  137. data/src/core/lib/channel/channel_stack.h +10 -10
  138. data/src/core/lib/channel/connected_channel.cc +64 -18
  139. data/src/core/lib/channel/promise_based_filter.h +1041 -1
  140. data/src/core/lib/channel/server_call_tracer_filter.cc +43 -35
  141. data/src/core/lib/compression/compression_internal.cc +0 -3
  142. data/src/core/lib/event_engine/ares_resolver.cc +35 -14
  143. data/src/core/lib/event_engine/ares_resolver.h +9 -10
  144. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +8 -1
  145. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +132 -0
  146. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +61 -0
  147. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +52 -36
  148. data/src/core/lib/event_engine/posix_engine/posix_engine.h +4 -9
  149. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +11 -3
  150. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +9 -2
  151. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +7 -0
  152. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +17 -27
  153. data/src/core/lib/event_engine/posix_engine/timer_manager.h +0 -3
  154. data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +55 -0
  155. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +114 -0
  156. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.h +51 -0
  157. data/src/core/lib/event_engine/windows/windows_engine.cc +7 -7
  158. data/src/core/lib/experiments/config.cc +13 -0
  159. data/src/core/lib/experiments/config.h +3 -0
  160. data/src/core/lib/experiments/experiments.cc +245 -366
  161. data/src/core/lib/experiments/experiments.h +50 -156
  162. data/src/core/lib/gprpp/debug_location.h +13 -0
  163. data/src/core/lib/gprpp/dual_ref_counted.h +36 -7
  164. data/src/core/lib/gprpp/orphanable.h +27 -0
  165. data/src/core/lib/gprpp/ref_counted.h +63 -22
  166. data/src/core/lib/gprpp/ref_counted_ptr.h +70 -27
  167. data/src/core/lib/gprpp/ref_counted_string.h +13 -0
  168. data/src/core/lib/gprpp/status_helper.cc +1 -2
  169. data/src/core/lib/iomgr/combiner.cc +15 -51
  170. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +31 -0
  171. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +16 -0
  172. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -3
  173. data/src/core/lib/load_balancing/lb_policy.h +1 -1
  174. data/src/core/lib/promise/activity.cc +17 -2
  175. data/src/core/lib/promise/activity.h +5 -4
  176. data/src/core/lib/promise/all_ok.h +80 -0
  177. data/src/core/lib/promise/detail/join_state.h +2077 -0
  178. data/src/core/lib/promise/detail/promise_factory.h +1 -0
  179. data/src/core/lib/promise/detail/promise_like.h +8 -1
  180. data/src/core/lib/promise/detail/seq_state.h +3458 -150
  181. data/src/core/lib/promise/detail/status.h +42 -5
  182. data/src/core/lib/promise/for_each.h +13 -1
  183. data/src/core/lib/promise/if.h +4 -0
  184. data/src/core/lib/promise/latch.h +6 -3
  185. data/src/core/lib/promise/party.cc +33 -31
  186. data/src/core/lib/promise/party.h +142 -6
  187. data/src/core/lib/promise/poll.h +39 -13
  188. data/src/core/lib/promise/promise.h +4 -0
  189. data/src/core/lib/promise/seq.h +107 -7
  190. data/src/core/lib/promise/status_flag.h +196 -0
  191. data/src/core/lib/promise/try_join.h +132 -0
  192. data/src/core/lib/promise/try_seq.h +132 -10
  193. data/src/core/lib/resolver/endpoint_addresses.cc +0 -1
  194. data/src/core/lib/resolver/endpoint_addresses.h +48 -0
  195. data/src/core/lib/resource_quota/arena.h +2 -2
  196. data/src/core/lib/resource_quota/memory_quota.cc +57 -8
  197. data/src/core/lib/resource_quota/memory_quota.h +6 -0
  198. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +14 -11
  199. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +14 -5
  200. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -0
  201. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -0
  202. data/src/core/lib/security/credentials/external/external_account_credentials.cc +28 -20
  203. data/src/core/lib/security/credentials/external/external_account_credentials.h +4 -0
  204. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +4 -0
  205. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -0
  206. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -0
  207. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +4 -0
  208. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -1
  209. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +0 -3
  210. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +12 -0
  211. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +22 -5
  212. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +1 -5
  213. data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -0
  214. data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -28
  215. data/src/core/lib/security/credentials/xds/xds_credentials.h +2 -4
  216. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -3
  217. data/src/core/lib/security/transport/auth_filters.h +71 -4
  218. data/src/core/lib/security/transport/client_auth_filter.cc +2 -4
  219. data/src/core/lib/security/transport/legacy_server_auth_filter.cc +244 -0
  220. data/src/core/lib/security/transport/server_auth_filter.cc +70 -90
  221. data/src/core/lib/slice/slice_buffer.h +3 -0
  222. data/src/core/lib/surface/builtins.cc +1 -1
  223. data/src/core/lib/surface/call.cc +683 -196
  224. data/src/core/lib/surface/call.h +26 -13
  225. data/src/core/lib/surface/call_trace.cc +42 -1
  226. data/src/core/lib/surface/channel.cc +0 -1
  227. data/src/core/lib/surface/channel.h +0 -6
  228. data/src/core/lib/surface/channel_init.h +26 -0
  229. data/src/core/lib/surface/init.cc +14 -8
  230. data/src/core/lib/surface/server.cc +256 -237
  231. data/src/core/lib/surface/server.h +26 -54
  232. data/src/core/lib/surface/version.cc +2 -2
  233. data/src/core/lib/surface/wait_for_cq_end_op.h +94 -0
  234. data/src/core/lib/transport/call_final_info.cc +38 -0
  235. data/src/core/lib/transport/call_final_info.h +54 -0
  236. data/src/core/lib/transport/connectivity_state.cc +3 -2
  237. data/src/core/lib/transport/connectivity_state.h +4 -0
  238. data/src/core/lib/transport/metadata_batch.h +4 -4
  239. data/src/core/lib/transport/transport.cc +70 -19
  240. data/src/core/lib/transport/transport.h +395 -25
  241. data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -0
  242. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -3
  243. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  244. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  245. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
  246. data/src/core/tsi/ssl_transport_security.cc +65 -43
  247. data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
  248. data/src/ruby/ext/grpc/rb_grpc.c +0 -1
  249. data/src/ruby/ext/grpc/rb_grpc.h +0 -2
  250. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  251. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  252. data/src/ruby/lib/grpc/version.rb +1 -1
  253. data/third_party/upb/upb/reflection/def_pool.h +2 -2
  254. data/third_party/zlib/adler32.c +5 -27
  255. data/third_party/zlib/compress.c +5 -16
  256. data/third_party/zlib/crc32.c +86 -162
  257. data/third_party/zlib/deflate.c +233 -336
  258. data/third_party/zlib/deflate.h +8 -8
  259. data/third_party/zlib/gzguts.h +11 -12
  260. data/third_party/zlib/infback.c +7 -23
  261. data/third_party/zlib/inffast.c +1 -4
  262. data/third_party/zlib/inffast.h +1 -1
  263. data/third_party/zlib/inflate.c +30 -99
  264. data/third_party/zlib/inftrees.c +6 -11
  265. data/third_party/zlib/inftrees.h +3 -3
  266. data/third_party/zlib/trees.c +224 -302
  267. data/third_party/zlib/uncompr.c +4 -12
  268. data/third_party/zlib/zconf.h +6 -2
  269. data/third_party/zlib/zlib.h +191 -188
  270. data/third_party/zlib/zutil.c +16 -44
  271. data/third_party/zlib/zutil.h +10 -10
  272. metadata +35 -13
  273. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +0 -1173
  274. data/src/core/lib/event_engine/memory_allocator.cc +0 -74
  275. data/src/core/lib/transport/pid_controller.cc +0 -51
  276. data/src/core/lib/transport/pid_controller.h +0 -116
  277. data/third_party/upb/upb/collections/array.h +0 -17
  278. data/third_party/upb/upb/collections/map.h +0 -17
  279. data/third_party/upb/upb/upb.hpp +0 -18
@@ -79,6 +79,7 @@
79
79
  #include "src/core/lib/debug/stats.h"
80
80
  #include "src/core/lib/debug/stats_data.h"
81
81
  #include "src/core/lib/experiments/experiments.h"
82
+ #include "src/core/lib/gpr/string.h"
82
83
  #include "src/core/lib/gpr/useful.h"
83
84
  #include "src/core/lib/gprpp/bitset.h"
84
85
  #include "src/core/lib/gprpp/crash.h"
@@ -162,10 +163,6 @@ static void read_action_locked(grpc_core::RefCountedPtr<grpc_chttp2_transport>,
162
163
  static void continue_read_action_locked(
163
164
  grpc_core::RefCountedPtr<grpc_chttp2_transport> t);
164
165
 
165
- // Set a transport level setting, and push it to our peer
166
- static void queue_setting_update(grpc_chttp2_transport* t,
167
- grpc_chttp2_setting_id id, uint32_t value);
168
-
169
166
  static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
170
167
  grpc_error_handle error, bool tarpit);
171
168
 
@@ -342,7 +339,7 @@ void ForEachContextListEntryExecute(void* arg, Timestamps* ts,
342
339
  }
343
340
 
344
341
  HttpAnnotation::HttpAnnotation(
345
- Type type, Timestamp time,
342
+ Type type, gpr_timespec time,
346
343
  absl::optional<chttp2::TransportFlowControl::Stats> transport_stats,
347
344
  absl::optional<chttp2::StreamFlowControl::Stats> stream_stats)
348
345
  : CallTracerAnnotationInterface::Annotation(
@@ -367,7 +364,7 @@ std::string HttpAnnotation::ToString() const {
367
364
  default:
368
365
  absl::StrAppend(&s, "Unknown");
369
366
  }
370
- absl::StrAppend(&s, " time: ", time_.ToString());
367
+ absl::StrAppend(&s, " time: ", gpr_format_timespec(time_));
371
368
  if (transport_stats_.has_value()) {
372
369
  absl::StrAppend(&s, " transport:[", transport_stats_->ToString(), "]");
373
370
  }
@@ -503,10 +500,8 @@ static void read_channel_args(grpc_chttp2_transport* t,
503
500
  if (max_requests_per_read.has_value()) {
504
501
  t->max_requests_per_read =
505
502
  grpc_core::Clamp(*max_requests_per_read, 1, 10000);
506
- } else if (grpc_core::IsChttp2BatchRequestsEnabled()) {
507
- t->max_requests_per_read = 32;
508
503
  } else {
509
- t->max_requests_per_read = std::numeric_limits<size_t>::max();
504
+ t->max_requests_per_read = 32;
510
505
  }
511
506
 
512
507
  if (channel_args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
@@ -523,8 +518,8 @@ static void read_channel_args(grpc_chttp2_transport* t,
523
518
 
524
519
  t->ack_pings = channel_args.GetBool("grpc.http2.ack_pings").value_or(true);
525
520
 
526
- t->allow_tarpit = channel_args.GetBool(GRPC_ARG_HTTP_ALLOW_TARPIT)
527
- .value_or(grpc_core::IsTarpitEnabled());
521
+ t->allow_tarpit =
522
+ channel_args.GetBool(GRPC_ARG_HTTP_ALLOW_TARPIT).value_or(true);
528
523
  t->min_tarpit_duration_ms =
529
524
  channel_args
530
525
  .GetDurationFromIntMillis(GRPC_ARG_HTTP_TARPIT_MIN_DURATION_MS)
@@ -551,93 +546,54 @@ static void read_channel_args(grpc_chttp2_transport* t,
551
546
  t->max_header_list_size_soft_limit = soft_limit;
552
547
  }
553
548
 
554
- static const struct {
555
- absl::string_view channel_arg_name;
556
- grpc_chttp2_setting_id setting_id;
557
- int default_value;
558
- int min;
559
- int max;
560
- bool availability[2] /* server, client */;
561
- } settings_map[] = {{GRPC_ARG_MAX_CONCURRENT_STREAMS,
562
- GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS,
563
- -1,
564
- 0,
565
- INT32_MAX,
566
- {true, false}},
567
- {GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER,
568
- GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE,
569
- -1,
570
- 0,
571
- INT32_MAX,
572
- {true, true}},
573
- {GRPC_ARG_ABSOLUTE_MAX_METADATA_SIZE,
574
- GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE,
575
- -1,
576
- 0,
577
- INT32_MAX,
578
- {true, true}},
579
- {GRPC_ARG_HTTP2_MAX_FRAME_SIZE,
580
- GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
581
- -1,
582
- 16384,
583
- 16777215,
584
- {true, true}},
585
- {GRPC_ARG_HTTP2_ENABLE_TRUE_BINARY,
586
- GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA,
587
- 1,
588
- 0,
589
- 1,
590
- {true, true}},
591
- {GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES,
592
- GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE,
593
- -1,
594
- 5,
595
- INT32_MAX,
596
- {true, true}}};
597
-
598
- for (size_t i = 0; i < GPR_ARRAY_SIZE(settings_map); i++) {
599
- const auto& setting = settings_map[i];
600
- if (setting.availability[is_client]) {
601
- const int value = channel_args.GetInt(setting.channel_arg_name)
602
- .value_or(setting.default_value);
603
- if (value >= 0) {
604
- const int clamped_value =
605
- grpc_core::Clamp(value, setting.min, setting.max);
606
- queue_setting_update(t, setting.setting_id, clamped_value);
607
- if (setting.setting_id == GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS) {
608
- t->max_concurrent_streams_policy.SetTarget(clamped_value);
609
- }
610
- } else if (setting.setting_id ==
611
- GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE) {
612
- // Set value to 1.25 * soft limit if this is larger than
613
- // `DEFAULT_MAX_HEADER_LIST_SIZE` and
614
- // `GRPC_ARG_ABSOLUTE_MAX_METADATA_SIZE` is not set.
615
- const int soft_limit = channel_args.GetInt(GRPC_ARG_MAX_METADATA_SIZE)
616
- .value_or(setting.default_value);
617
- const int value = (soft_limit >= 0 && soft_limit < (INT_MAX / 1.25))
618
- ? static_cast<int>(soft_limit * 1.25)
619
- : soft_limit;
620
- if (value > DEFAULT_MAX_HEADER_LIST_SIZE) {
621
- queue_setting_update(
622
- t, setting.setting_id,
623
- grpc_core::Clamp(value, setting.min, setting.max));
624
- }
625
- }
626
- } else if (channel_args.Contains(setting.channel_arg_name)) {
627
- gpr_log(GPR_DEBUG, "%s is not available on %s",
628
- std::string(setting.channel_arg_name).c_str(),
629
- is_client ? "clients" : "servers");
549
+ int value;
550
+ if (!is_client) {
551
+ value = channel_args.GetInt(GRPC_ARG_MAX_CONCURRENT_STREAMS).value_or(-1);
552
+ if (value >= 0) {
553
+ t->settings.mutable_local().SetMaxConcurrentStreams(value);
554
+ t->max_concurrent_streams_policy.SetTarget(value);
555
+ }
556
+ } else if (channel_args.Contains(GRPC_ARG_MAX_CONCURRENT_STREAMS)) {
557
+ gpr_log(GPR_DEBUG, "%s is not available on clients",
558
+ GRPC_ARG_MAX_CONCURRENT_STREAMS);
559
+ }
560
+ value =
561
+ channel_args.GetInt(GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER).value_or(-1);
562
+ if (value >= 0) {
563
+ t->settings.mutable_local().SetHeaderTableSize(value);
564
+ }
565
+ value = channel_args.GetInt(GRPC_ARG_ABSOLUTE_MAX_METADATA_SIZE).value_or(-1);
566
+ if (value >= 0) {
567
+ t->settings.mutable_local().SetMaxHeaderListSize(value);
568
+ } else {
569
+ // Set value to 1.25 * soft limit if this is larger than
570
+ // `DEFAULT_MAX_HEADER_LIST_SIZE` and
571
+ // `GRPC_ARG_ABSOLUTE_MAX_METADATA_SIZE` is not set.
572
+ const int soft_limit =
573
+ channel_args.GetInt(GRPC_ARG_MAX_METADATA_SIZE).value_or(-1);
574
+ const int value = (soft_limit >= 0 && soft_limit < (INT_MAX / 1.25))
575
+ ? static_cast<int>(soft_limit * 1.25)
576
+ : soft_limit;
577
+ if (value > DEFAULT_MAX_HEADER_LIST_SIZE) {
578
+ t->settings.mutable_local().SetMaxHeaderListSize(value);
630
579
  }
631
580
  }
581
+ value = channel_args.GetInt(GRPC_ARG_HTTP2_MAX_FRAME_SIZE).value_or(-1);
582
+ if (value >= 0) {
583
+ t->settings.mutable_local().SetMaxFrameSize(value);
584
+ }
585
+ value =
586
+ channel_args.GetInt(GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES).value_or(-1);
587
+ if (value >= 0) {
588
+ t->settings.mutable_local().SetInitialWindowSize(value);
589
+ }
590
+ value = channel_args.GetInt(GRPC_ARG_HTTP2_ENABLE_TRUE_BINARY).value_or(-1);
591
+ if (value >= 0) {
592
+ t->settings.mutable_local().SetAllowTrueBinaryMetadata(value != 0);
593
+ }
632
594
 
633
595
  if (t->enable_preferred_rx_crypto_frame_advertisement) {
634
- const grpc_chttp2_setting_parameters* sp =
635
- &grpc_chttp2_settings_parameters
636
- [GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE];
637
- queue_setting_update(
638
- t, GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE,
639
- grpc_core::Clamp(INT_MAX, static_cast<int>(sp->min_value),
640
- static_cast<int>(sp->max_value)));
596
+ t->settings.mutable_local().SetPreferredReceiveCryptoMessageSize(INT_MAX);
641
597
  }
642
598
 
643
599
  t->ping_on_rst_stream_percent = grpc_core::Clamp(
@@ -647,7 +603,7 @@ static void read_channel_args(grpc_chttp2_transport* t,
647
603
 
648
604
  t->max_concurrent_streams_overload_protection =
649
605
  channel_args.GetBool(GRPC_ARG_MAX_CONCURRENT_STREAMS_OVERLOAD_PROTECTION)
650
- .value_or(grpc_core::IsOverloadProtectionEnabled());
606
+ .value_or(true);
651
607
  }
652
608
 
653
609
  static void init_keepalive_pings_if_enabled_locked(
@@ -711,33 +667,22 @@ grpc_chttp2_transport::grpc_chttp2_transport(
711
667
  grpc_slice_from_copied_string(GRPC_CHTTP2_CLIENT_CONNECT_STRING));
712
668
  }
713
669
  grpc_slice_buffer_init(&qbuf);
714
- // copy in initial settings to all setting sets
715
- size_t i;
716
- int j;
717
- for (i = 0; i < GRPC_CHTTP2_NUM_SETTINGS; i++) {
718
- for (j = 0; j < GRPC_NUM_SETTING_SETS; j++) {
719
- settings[j][i] = grpc_chttp2_settings_parameters[i].default_value;
720
- }
721
- }
722
670
  grpc_chttp2_goaway_parser_init(&goaway_parser);
723
671
 
724
672
  // configure http2 the way we like it
725
673
  if (is_client) {
726
- queue_setting_update(this, GRPC_CHTTP2_SETTINGS_ENABLE_PUSH, 0);
727
- queue_setting_update(this, GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, 0);
674
+ settings.mutable_local().SetEnablePush(false);
675
+ settings.mutable_local().SetMaxConcurrentStreams(0);
728
676
  }
729
- queue_setting_update(this, GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE,
730
- DEFAULT_MAX_HEADER_LIST_SIZE);
731
- queue_setting_update(this,
732
- GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA, 1);
677
+ settings.mutable_local().SetMaxHeaderListSize(DEFAULT_MAX_HEADER_LIST_SIZE);
678
+ settings.mutable_local().SetAllowTrueBinaryMetadata(true);
733
679
 
734
680
  read_channel_args(this, channel_args, is_client);
735
681
 
736
682
  // Initially allow *UP TO* MAX_CONCURRENT_STREAMS incoming before we start
737
683
  // blanket cancelling them.
738
684
  num_incoming_streams_before_settings_ack =
739
- settings[GRPC_LOCAL_SETTINGS]
740
- [GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS];
685
+ settings.local().max_concurrent_streams();
741
686
 
742
687
  grpc_core::ExecCtx exec_ctx;
743
688
  combiner->Run(
@@ -1127,9 +1072,7 @@ static void write_action(grpc_chttp2_transport* t) {
1127
1072
  // Choose max_frame_size as the prefered rx crypto frame size indicated by the
1128
1073
  // peer.
1129
1074
  int max_frame_size =
1130
- t->settings
1131
- [GRPC_PEER_SETTINGS]
1132
- [GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE];
1075
+ t->settings.peer().preferred_receive_crypto_message_size();
1133
1076
  // Note: max frame size is 0 if the remote peer does not support adjusting the
1134
1077
  // sending frame size.
1135
1078
  if (max_frame_size == 0) {
@@ -1206,23 +1149,6 @@ static void write_action_end_locked(
1206
1149
  grpc_chttp2_end_write(t.get(), error);
1207
1150
  }
1208
1151
 
1209
- // Dirties an HTTP2 setting to be sent out next time a writing path occurs.
1210
- // If the change needs to occur immediately, manually initiate a write.
1211
- static void queue_setting_update(grpc_chttp2_transport* t,
1212
- grpc_chttp2_setting_id id, uint32_t value) {
1213
- const grpc_chttp2_setting_parameters* sp =
1214
- &grpc_chttp2_settings_parameters[id];
1215
- uint32_t use_value = grpc_core::Clamp(value, sp->min_value, sp->max_value);
1216
- if (use_value != value) {
1217
- gpr_log(GPR_INFO, "Requested parameter %s clamped from %d to %d", sp->name,
1218
- value, use_value);
1219
- }
1220
- if (use_value != t->settings[GRPC_LOCAL_SETTINGS][id]) {
1221
- t->settings[GRPC_LOCAL_SETTINGS][id] = use_value;
1222
- t->dirtied_local_settings = true;
1223
- }
1224
- }
1225
-
1226
1152
  // Cancel out streams that haven't yet started if we have received a GOAWAY
1227
1153
  static void cancel_unstarted_streams(grpc_chttp2_transport* t,
1228
1154
  grpc_error_handle error, bool tarpit) {
@@ -1321,9 +1247,7 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1321
1247
  // start streams where we have free grpc_chttp2_stream ids and free
1322
1248
  // * concurrency
1323
1249
  while (t->next_stream_id <= MAX_CLIENT_STREAM_ID &&
1324
- t->stream_map.size() <
1325
- t->settings[GRPC_PEER_SETTINGS]
1326
- [GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS] &&
1250
+ t->stream_map.size() < t->settings.peer().max_concurrent_streams() &&
1327
1251
  grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
1328
1252
  // safe since we can't (legally) be parsing this stream yet
1329
1253
  GRPC_CHTTP2_IF_TRACING(gpr_log(
@@ -1510,7 +1434,7 @@ static void perform_stream_op_locked(void* stream_op,
1510
1434
  if (op->send_initial_metadata) {
1511
1435
  if (s->call_tracer) {
1512
1436
  s->call_tracer->RecordAnnotation(grpc_core::HttpAnnotation(
1513
- grpc_core::HttpAnnotation::Type::kStart, grpc_core::Timestamp::Now(),
1437
+ grpc_core::HttpAnnotation::Type::kStart, gpr_now(GPR_CLOCK_REALTIME),
1514
1438
  s->t->flow_control.stats(), s->flow_control.stats()));
1515
1439
  }
1516
1440
  if (t->is_client && t->channelz_socket != nullptr) {
@@ -2708,21 +2632,19 @@ void grpc_chttp2_act_on_flowctl_action(
2708
2632
  GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL, []() {});
2709
2633
  WithUrgency(t, action.send_initial_window_update(),
2710
2634
  GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS, [t, &action]() {
2711
- queue_setting_update(t,
2712
- GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE,
2713
- action.initial_window_size());
2714
- });
2715
- WithUrgency(t, action.send_max_frame_size_update(),
2716
- GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS, [t, &action]() {
2717
- queue_setting_update(t, GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
2718
- action.max_frame_size());
2635
+ t->settings.mutable_local().SetInitialWindowSize(
2636
+ action.initial_window_size());
2719
2637
  });
2638
+ WithUrgency(
2639
+ t, action.send_max_frame_size_update(),
2640
+ GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS, [t, &action]() {
2641
+ t->settings.mutable_local().SetMaxFrameSize(action.max_frame_size());
2642
+ });
2720
2643
  if (t->enable_preferred_rx_crypto_frame_advertisement) {
2721
2644
  WithUrgency(
2722
2645
  t, action.preferred_rx_crypto_frame_size_update(),
2723
2646
  GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS, [t, &action]() {
2724
- queue_setting_update(
2725
- t, GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE,
2647
+ t->settings.mutable_local().SetPreferredReceiveCryptoMessageSize(
2726
2648
  action.preferred_rx_crypto_frame_size());
2727
2649
  });
2728
2650
  }
@@ -2975,6 +2897,7 @@ static void next_bdp_ping_timer_expired_locked(
2975
2897
  grpc_core::RefCountedPtr<grpc_chttp2_transport> t,
2976
2898
  GRPC_UNUSED grpc_error_handle error) {
2977
2899
  GPR_DEBUG_ASSERT(error.ok());
2900
+ GPR_ASSERT(t->next_bdp_ping_timer_handle != TaskHandle::kInvalid);
2978
2901
  t->next_bdp_ping_timer_handle = TaskHandle::kInvalid;
2979
2902
  if (t->flow_control.bdp_estimator()->accumulator() == 0) {
2980
2903
  // Block the bdp ping till we receive more data.
@@ -113,14 +113,14 @@ class HttpAnnotation : public CallTracerAnnotationInterface::Annotation {
113
113
  };
114
114
 
115
115
  HttpAnnotation(
116
- Type type, Timestamp time,
116
+ Type type, gpr_timespec time,
117
117
  absl::optional<chttp2::TransportFlowControl::Stats> transport_stats,
118
118
  absl::optional<chttp2::StreamFlowControl::Stats> stream_stats);
119
119
 
120
120
  std::string ToString() const override;
121
121
 
122
122
  Type http_type() const { return type_; }
123
- Timestamp time() const { return time_; }
123
+ gpr_timespec time() const { return time_; }
124
124
  absl::optional<chttp2::TransportFlowControl::Stats> transport_stats() const {
125
125
  return transport_stats_;
126
126
  }
@@ -130,7 +130,7 @@ class HttpAnnotation : public CallTracerAnnotationInterface::Annotation {
130
130
 
131
131
  private:
132
132
  const Type type_;
133
- const Timestamp time_;
133
+ const gpr_timespec time_;
134
134
  absl::optional<chttp2::TransportFlowControl::Stats> transport_stats_;
135
135
  absl::optional<chttp2::StreamFlowControl::Stats> stream_stats_;
136
136
  };
@@ -104,16 +104,7 @@ TransportFlowControl::TransportFlowControl(absl::string_view name,
104
104
  MemoryOwner* memory_owner)
105
105
  : memory_owner_(memory_owner),
106
106
  enable_bdp_probe_(enable_bdp_probe),
107
- bdp_estimator_(name),
108
- pid_controller_(PidController::Args()
109
- .set_gain_p(4)
110
- .set_gain_i(8)
111
- .set_gain_d(0)
112
- .set_initial_control_value(TargetLogBdp())
113
- .set_min_control_value(-1)
114
- .set_max_control_value(25)
115
- .set_integral_range(10)),
116
- last_pid_update_(Timestamp::Now()) {}
107
+ bdp_estimator_(name) {}
117
108
 
118
109
  uint32_t TransportFlowControl::DesiredAnnounceSize(bool writing_anyway) const {
119
110
  const uint32_t target_announced_window =
@@ -184,41 +175,6 @@ FlowControlAction TransportFlowControl::UpdateAction(FlowControlAction action) {
184
175
  return action;
185
176
  }
186
177
 
187
- // Take in a target and modifies it based on the memory pressure of the system
188
- static double AdjustForMemoryPressure(double memory_pressure, double target) {
189
- // do not increase window under heavy memory pressure.
190
- static const double kLowMemPressure = 0.1;
191
- static const double kZeroTarget = 22;
192
- static const double kHighMemPressure = 0.8;
193
- static const double kMaxMemPressure = 0.9;
194
- if (memory_pressure < kLowMemPressure && target < kZeroTarget) {
195
- target = (target - kZeroTarget) * memory_pressure / kLowMemPressure +
196
- kZeroTarget;
197
- } else if (memory_pressure > kHighMemPressure) {
198
- target *= 1 - std::min(1.0, (memory_pressure - kHighMemPressure) /
199
- (kMaxMemPressure - kHighMemPressure));
200
- }
201
- return target;
202
- }
203
-
204
- double TransportFlowControl::TargetLogBdp() {
205
- return AdjustForMemoryPressure(
206
- memory_owner_->is_valid()
207
- ? memory_owner_->GetPressureInfo().pressure_control_value
208
- : 0.0,
209
- 1 + log2(bdp_estimator_.EstimateBdp()));
210
- }
211
-
212
- double TransportFlowControl::SmoothLogBdp(double value) {
213
- Timestamp now = Timestamp::Now();
214
- double bdp_error = value - pid_controller_.last_control_value();
215
- const double dt = (now - last_pid_update_).seconds();
216
- last_pid_update_ = now;
217
- // Limit dt to 100ms
218
- const double kMaxDt = 0.1;
219
- return pid_controller_.Update(bdp_error, dt > kMaxDt ? kMaxDt : dt);
220
- }
221
-
222
178
  double
223
179
  TransportFlowControl::TargetInitialWindowSizeBasedOnMemoryPressureAndBdp()
224
180
  const {
@@ -274,18 +230,14 @@ TransportFlowControl::TargetInitialWindowSizeBasedOnMemoryPressureAndBdp()
274
230
  }
275
231
 
276
232
  void TransportFlowControl::UpdateSetting(
277
- grpc_chttp2_setting_id id, int64_t* desired_value,
278
- uint32_t new_desired_value, FlowControlAction* action,
233
+ absl::string_view name, int64_t* desired_value, uint32_t new_desired_value,
234
+ FlowControlAction* action,
279
235
  FlowControlAction& (FlowControlAction::*set)(FlowControlAction::Urgency,
280
236
  uint32_t)) {
281
- new_desired_value =
282
- Clamp(new_desired_value, grpc_chttp2_settings_parameters[id].min_value,
283
- grpc_chttp2_settings_parameters[id].max_value);
284
237
  if (new_desired_value != *desired_value) {
285
238
  if (grpc_flowctl_trace.enabled()) {
286
239
  gpr_log(GPR_INFO, "[flowctl] UPDATE SETTING %s from %" PRId64 " to %d",
287
- grpc_chttp2_settings_parameters[id].name, *desired_value,
288
- new_desired_value);
240
+ std::string(name).c_str(), *desired_value, new_desired_value);
289
241
  }
290
242
  // Reaching zero can only happen for initial window size, and if it occurs
291
243
  // we really want to wake up writes and ensure all the queued stream
@@ -323,10 +275,8 @@ FlowControlAction TransportFlowControl::PeriodicUpdate() {
323
275
  // TODO(ncteisen): experiment with setting target to be huge under low
324
276
  // memory pressure.
325
277
  uint32_t target = static_cast<uint32_t>(RoundUpToPowerOf2(
326
- Clamp(IsMemoryPressureControllerEnabled()
327
- ? TargetInitialWindowSizeBasedOnMemoryPressureAndBdp()
328
- : pow(2, SmoothLogBdp(TargetLogBdp())),
329
- 0.0, static_cast<double>(kMaxInitialWindowSize))));
278
+ Clamp(TargetInitialWindowSizeBasedOnMemoryPressureAndBdp(), 0.0,
279
+ static_cast<double>(kMaxInitialWindowSize))));
330
280
  if (target < kMinPositiveInitialWindowSize) target = 0;
331
281
  if (g_test_only_transport_target_window_estimates_mocker != nullptr) {
332
282
  // Hook for simulating unusual flow control situations in tests.
@@ -336,13 +286,15 @@ FlowControlAction TransportFlowControl::PeriodicUpdate() {
336
286
  }
337
287
  // Though initial window 'could' drop to 0, we keep the floor at
338
288
  // kMinInitialWindowSize
339
- UpdateSetting(GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE,
340
- &target_initial_window_size_, target, &action,
341
- &FlowControlAction::set_send_initial_window_update);
289
+ UpdateSetting(Http2Settings::initial_window_size_name(),
290
+ &target_initial_window_size_,
291
+ std::min(target, Http2Settings::max_initial_window_size()),
292
+ &action, &FlowControlAction::set_send_initial_window_update);
342
293
  // we target the max of BDP or bandwidth in microseconds.
343
- UpdateSetting(GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE, &target_frame_size_,
344
- target, &action,
345
- &FlowControlAction::set_send_max_frame_size_update);
294
+ UpdateSetting(Http2Settings::max_frame_size_name(), &target_frame_size_,
295
+ Clamp(target, Http2Settings::min_max_frame_size(),
296
+ Http2Settings::max_max_frame_size()),
297
+ &action, &FlowControlAction::set_send_max_frame_size_update);
346
298
 
347
299
  if (IsTcpFrameSizeTuningEnabled()) {
348
300
  // Advertise PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE to peer. By advertising
@@ -352,10 +304,11 @@ FlowControlAction TransportFlowControl::PeriodicUpdate() {
352
304
  // Clamp(target_frame_size_ * 2, 16384, 0x7fffffff). In the future, this
353
305
  // maybe updated to a different function of the memory pressure.
354
306
  UpdateSetting(
355
- GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE,
307
+ Http2Settings::preferred_receive_crypto_message_size_name(),
356
308
  &target_preferred_rx_crypto_frame_size_,
357
- Clamp(static_cast<unsigned int>(target_frame_size_ * 2), 16384u,
358
- 0x7ffffffu),
309
+ Clamp(static_cast<unsigned int>(target_frame_size_ * 2),
310
+ Http2Settings::min_preferred_receive_crypto_message_size(),
311
+ Http2Settings::max_preferred_receive_crypto_message_size()),
359
312
  &action,
360
313
  &FlowControlAction::set_preferred_rx_crypto_frame_size_update);
361
314
  }
@@ -422,23 +375,9 @@ FlowControlAction StreamFlowControl::UpdateAction(FlowControlAction action) {
422
375
  }
423
376
  // min_progress_size_ > 0 means we have a reader ready to read.
424
377
  if (min_progress_size_ > 0) {
425
- if (IsLazierStreamUpdatesEnabled()) {
426
- if (announced_window_delta_ <=
427
- -static_cast<int64_t>(tfc_->sent_init_window()) / 2) {
428
- urgency = FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
429
- }
430
- } else {
431
- // If we're into initial window to receive that data we should wake up
432
- // and send an update.
433
- if (announced_window_delta_ < 0) {
434
- urgency = FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
435
- } else if (announced_window_delta_ == 0 &&
436
- tfc_->queued_init_window() == 0) {
437
- // Special case when initial window size is zero, meaning that
438
- // announced_window_delta cannot become negative (it may already be so
439
- // however).
440
- urgency = FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
441
- }
378
+ if (announced_window_delta_ <=
379
+ -static_cast<int64_t>(tfc_->sent_init_window()) / 2) {
380
+ urgency = FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
442
381
  }
443
382
  }
444
383
  action.set_send_stream_update(urgency);
@@ -40,7 +40,6 @@
40
40
  #include "src/core/lib/gprpp/time.h"
41
41
  #include "src/core/lib/resource_quota/memory_quota.h"
42
42
  #include "src/core/lib/transport/bdp_estimator.h"
43
- #include "src/core/lib/transport/pid_controller.h"
44
43
 
45
44
  extern grpc_core::TraceFlag grpc_flowctl_trace;
46
45
 
@@ -330,10 +329,8 @@ class TransportFlowControl final {
330
329
  }
331
330
 
332
331
  private:
333
- double TargetLogBdp();
334
- double SmoothLogBdp(double value);
335
332
  double TargetInitialWindowSizeBasedOnMemoryPressureAndBdp() const;
336
- static void UpdateSetting(grpc_chttp2_setting_id id, int64_t* desired_value,
333
+ static void UpdateSetting(absl::string_view name, int64_t* desired_value,
337
334
  uint32_t new_desired_value,
338
335
  FlowControlAction* action,
339
336
  FlowControlAction& (FlowControlAction::*set)(
@@ -359,10 +356,6 @@ class TransportFlowControl final {
359
356
  // bdp estimation
360
357
  BdpEstimator bdp_estimator_;
361
358
 
362
- // pid controller
363
- PidController pid_controller_;
364
- Timestamp last_pid_update_;
365
-
366
359
  int64_t remote_window_ = kDefaultWindow;
367
360
  int64_t target_initial_window_size_ = kDefaultWindow;
368
361
  int64_t target_frame_size_ = kDefaultFrameSize;