grpc 1.48.0-x86_64-linux → 1.49.1-x86_64-linux

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.

Potentially problematic release.


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

Files changed (721) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +104 -41
  3. data/include/grpc/event_engine/event_engine.h +19 -16
  4. data/include/grpc/impl/codegen/grpc_types.h +3 -8
  5. data/include/grpc/impl/codegen/port_platform.h +0 -8
  6. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +3 -3
  7. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +2 -2
  8. data/src/core/ext/filters/client_channel/client_channel.cc +125 -200
  9. data/src/core/ext/filters/client_channel/client_channel.h +15 -8
  10. data/src/core/ext/filters/client_channel/client_channel_factory.cc +0 -29
  11. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -10
  12. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  13. data/src/core/ext/filters/client_channel/config_selector.h +12 -4
  14. data/src/core/ext/filters/client_channel/connector.h +4 -5
  15. data/src/core/ext/filters/client_channel/http_proxy.cc +53 -65
  16. data/src/core/ext/filters/client_channel/http_proxy.h +12 -9
  17. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +14 -12
  18. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +6 -6
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +102 -131
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -3
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +5 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -2
  24. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +169 -63
  26. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +25 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +15 -19
  28. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +66 -78
  29. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +44 -44
  30. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +6 -5
  31. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +65 -77
  32. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +15 -14
  33. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +19 -14
  34. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +63 -67
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +40 -49
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +81 -97
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +53 -61
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +171 -102
  39. data/src/core/ext/filters/client_channel/proxy_mapper.h +13 -14
  40. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +19 -16
  41. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -7
  42. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +4 -8
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +431 -145
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +170 -99
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -7
  46. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -15
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +7 -17
  48. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +11 -0
  49. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +38 -17
  50. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
  51. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +5 -6
  52. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -13
  53. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +162 -165
  54. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +37 -30
  55. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -10
  56. data/src/core/ext/filters/client_channel/retry_filter.cc +0 -7
  57. data/src/core/ext/filters/client_channel/retry_service_config.cc +30 -19
  58. data/src/core/ext/filters/client_channel/retry_service_config.h +6 -9
  59. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +6 -7
  60. data/src/core/ext/filters/client_channel/subchannel.cc +49 -89
  61. data/src/core/ext/filters/client_channel/subchannel.h +8 -8
  62. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +1 -1
  63. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
  64. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -25
  65. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +3 -4
  66. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -6
  67. data/src/core/ext/filters/deadline/deadline_filter.h +2 -3
  68. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -3
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +1 -1
  70. data/src/core/ext/filters/fault_injection/service_config_parser.cc +17 -12
  71. data/src/core/ext/filters/fault_injection/service_config_parser.h +4 -5
  72. data/src/core/ext/filters/http/client/http_client_filter.cc +2 -3
  73. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  74. data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
  75. data/src/core/ext/filters/http/client_authority_filter.h +1 -1
  76. data/src/core/ext/filters/http/server/http_server_filter.cc +2 -3
  77. data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
  78. data/src/core/ext/filters/message_size/message_size_filter.cc +13 -7
  79. data/src/core/ext/filters/message_size/message_size_filter.h +3 -6
  80. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +16 -12
  81. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -6
  82. data/src/core/ext/filters/server_config_selector/server_config_selector.h +5 -0
  83. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +3 -5
  84. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +35 -62
  85. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +62 -89
  86. data/src/core/ext/transport/chttp2/server/chttp2_server.h +4 -6
  87. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +130 -165
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -2
  89. data/src/core/ext/transport/chttp2/transport/flow_control.cc +67 -2
  90. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
  91. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  92. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +25 -8
  93. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -0
  94. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -1
  95. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +8 -2
  96. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -10
  97. data/src/core/ext/transport/chttp2/transport/internal.h +2 -1
  98. data/src/core/ext/transport/inproc/inproc_transport.cc +40 -74
  99. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  100. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  101. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +4 -4
  102. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +24 -8
  103. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  104. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  105. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  106. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  107. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  108. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  109. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  110. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  111. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  112. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  113. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  114. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  115. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  116. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  117. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  118. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  119. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  120. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
  121. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  122. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  123. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +21 -19
  124. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +124 -34
  125. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  126. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  127. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +23 -22
  128. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +153 -48
  129. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  130. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  131. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  132. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  133. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  134. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  135. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +7 -7
  136. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +42 -14
  137. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  138. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  139. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  140. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  141. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  142. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  143. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  144. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  145. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  146. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  149. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  150. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  151. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +9 -9
  152. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +54 -18
  153. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  154. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  155. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +21 -20
  156. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +117 -44
  157. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  158. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  159. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  160. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  161. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +6 -2
  162. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  163. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  164. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  165. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  166. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  167. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  168. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +5 -5
  169. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +36 -12
  170. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  171. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  172. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  173. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  174. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +37 -13
  175. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +170 -15
  176. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  177. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  178. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +1 -1
  179. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +6 -2
  180. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  181. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  182. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  183. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  184. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  185. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  186. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  187. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  188. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -9
  189. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +100 -14
  190. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -22
  191. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +36 -77
  192. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +121 -76
  193. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +647 -163
  194. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  195. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  196. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  197. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  198. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +1 -1
  199. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -2
  200. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  201. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  202. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  203. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  204. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  205. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  206. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  207. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  208. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  209. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  210. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  211. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  212. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  213. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  214. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  215. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  216. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  217. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  218. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +1 -1
  219. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +6 -2
  220. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  221. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  222. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  223. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  224. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  225. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  226. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  227. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  228. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +1 -1
  229. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +6 -2
  230. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +35 -27
  231. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +177 -52
  232. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +6 -2
  233. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +1 -1
  234. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +6 -2
  235. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  236. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  237. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  238. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  239. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +5 -5
  240. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +42 -14
  241. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  242. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  243. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  244. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  245. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +131 -16
  246. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +632 -12
  247. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  248. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  249. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  250. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  251. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  252. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  253. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  254. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  255. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  256. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  257. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  258. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  259. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  260. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  261. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  262. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  263. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  264. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  265. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  266. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  267. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  268. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  269. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  270. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  271. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  272. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  273. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  274. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  275. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  276. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  277. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  278. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  279. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  280. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  281. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  282. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  283. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  284. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  285. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  286. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  287. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  288. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  289. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  290. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  291. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  292. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  293. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  294. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  295. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  296. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  297. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  298. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  299. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  300. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  301. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  302. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  303. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  304. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  305. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  306. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  307. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  308. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  309. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  310. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  311. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  312. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  313. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  314. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  315. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  316. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  317. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  318. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  319. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  320. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  321. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  322. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  323. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  324. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  325. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  326. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  327. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  328. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  329. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  330. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  331. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  332. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  333. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  334. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  335. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  336. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  337. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  338. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  339. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  340. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  341. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  342. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  343. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  344. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  345. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  346. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  347. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  348. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  349. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  350. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  351. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  352. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  353. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  354. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  355. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  356. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  357. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  358. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  359. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  360. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +6 -2
  361. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -1
  362. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
  363. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  364. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  365. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  366. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  367. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  368. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  369. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -1
  370. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  371. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  372. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  373. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  374. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  375. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  376. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  377. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  378. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +156 -154
  379. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +186 -183
  380. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +136 -134
  381. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  382. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +162 -139
  383. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  384. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  385. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +12 -8
  386. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  387. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +72 -75
  388. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +0 -5
  389. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +713 -670
  390. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  391. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  392. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  393. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  394. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  395. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  396. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  397. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +477 -466
  398. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  399. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +153 -84
  400. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  401. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  402. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  403. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  404. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  405. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  406. data/src/core/ext/xds/upb_utils.h +0 -21
  407. data/src/core/ext/xds/xds_api.cc +53 -86
  408. data/src/core/ext/xds/xds_api.h +19 -28
  409. data/src/core/ext/xds/xds_bootstrap.cc +39 -52
  410. data/src/core/ext/xds/xds_bootstrap.h +28 -8
  411. data/src/core/ext/xds/xds_certificate_provider.h +9 -0
  412. data/src/core/ext/xds/xds_channel_stack_modifier.cc +6 -4
  413. data/src/core/ext/xds/xds_channel_stack_modifier.h +8 -0
  414. data/src/core/ext/xds/xds_client.cc +555 -1214
  415. data/src/core/ext/xds/xds_client.h +16 -44
  416. data/src/core/ext/xds/xds_client_grpc.cc +291 -0
  417. data/src/core/ext/xds/xds_client_grpc.h +102 -0
  418. data/src/core/ext/xds/xds_cluster.cc +92 -103
  419. data/src/core/ext/xds/xds_cluster.h +6 -5
  420. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +10 -14
  421. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -0
  422. data/src/core/ext/xds/xds_common_types.cc +134 -110
  423. data/src/core/ext/xds/xds_common_types.h +6 -7
  424. data/src/core/ext/xds/xds_endpoint.cc +80 -80
  425. data/src/core/ext/xds/xds_endpoint.h +4 -4
  426. data/src/core/ext/xds/xds_http_fault_filter.cc +4 -11
  427. data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
  428. data/src/core/ext/xds/xds_http_filters.h +3 -3
  429. data/src/core/ext/xds/xds_http_rbac_filter.cc +39 -58
  430. data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
  431. data/src/core/ext/xds/xds_lb_policy_registry.cc +17 -20
  432. data/src/core/ext/xds/xds_lb_policy_registry.h +4 -4
  433. data/src/core/ext/xds/xds_listener.cc +329 -299
  434. data/src/core/ext/xds/xds_listener.h +4 -4
  435. data/src/core/ext/xds/xds_resource_type.h +13 -2
  436. data/src/core/ext/xds/xds_route_config.cc +180 -177
  437. data/src/core/ext/xds/xds_route_config.h +31 -17
  438. data/src/core/ext/xds/xds_routing.cc +3 -6
  439. data/src/core/ext/xds/xds_routing.h +7 -9
  440. data/src/core/ext/xds/xds_server_config_fetcher.cc +76 -81
  441. data/src/core/ext/xds/xds_transport.h +86 -0
  442. data/src/core/ext/xds/xds_transport_grpc.cc +349 -0
  443. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  444. data/src/core/lib/address_utils/parse_address.cc +19 -17
  445. data/src/core/lib/address_utils/parse_address.h +8 -5
  446. data/src/core/lib/avl/avl.h +47 -25
  447. data/src/core/lib/channel/call_tracer.h +1 -1
  448. data/src/core/lib/channel/channel_args.cc +88 -19
  449. data/src/core/lib/channel/channel_args.h +113 -62
  450. data/src/core/lib/channel/channel_stack.cc +0 -1
  451. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  452. data/src/core/lib/channel/channel_stack_builder.h +2 -2
  453. data/src/core/lib/channel/channel_stack_builder_impl.cc +2 -4
  454. data/src/core/lib/channel/channelz.cc +27 -37
  455. data/src/core/lib/channel/channelz.h +9 -0
  456. data/src/core/lib/channel/promise_based_filter.h +0 -1
  457. data/src/core/lib/config/core_configuration.h +48 -35
  458. data/src/core/lib/debug/stats.cc +12 -15
  459. data/src/core/lib/debug/stats.h +11 -3
  460. data/src/core/lib/event_engine/{event_engine.cc → default_event_engine.cc} +9 -5
  461. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine.h} +4 -8
  462. data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -3
  463. data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
  464. data/src/core/lib/event_engine/executor/executor.h +38 -0
  465. data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
  466. data/src/core/lib/event_engine/executor/threaded_executor.h +44 -0
  467. data/src/core/lib/event_engine/forkable.cc +101 -0
  468. data/src/core/lib/event_engine/forkable.h +61 -0
  469. data/src/core/lib/event_engine/poller.h +54 -0
  470. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.cc → posix_engine/posix_engine.cc} +30 -47
  471. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.h → posix_engine/posix_engine.h} +27 -28
  472. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.cc +4 -5
  473. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.h +8 -8
  474. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.cc +4 -4
  475. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.h +5 -5
  476. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.cc +46 -10
  477. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.h +17 -8
  478. data/src/core/lib/event_engine/promise.h +11 -2
  479. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  480. data/src/core/lib/event_engine/{iomgr_engine/thread_pool.cc → thread_pool.cc} +49 -14
  481. data/src/core/lib/event_engine/{iomgr_engine/thread_pool.h → thread_pool.h} +21 -10
  482. data/src/core/lib/event_engine/utils.cc +49 -0
  483. data/src/core/lib/event_engine/utils.h +40 -0
  484. data/src/core/lib/event_engine/windows/iocp.cc +149 -0
  485. data/src/core/lib/event_engine/windows/iocp.h +68 -0
  486. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  487. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  488. data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
  489. data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
  490. data/src/core/lib/gpr/time.cc +11 -9
  491. data/src/core/lib/gpr/useful.h +29 -0
  492. data/src/core/lib/gprpp/bitset.h +3 -13
  493. data/src/core/lib/gprpp/debug_location.h +39 -7
  494. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  495. data/src/core/lib/gprpp/no_destruct.h +94 -0
  496. data/src/core/lib/gprpp/ref_counted_ptr.h +0 -1
  497. data/src/core/lib/gprpp/status_helper.cc +1 -0
  498. data/src/core/lib/gprpp/table.h +0 -1
  499. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.cc +3 -5
  500. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.h +5 -7
  501. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  502. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -27
  503. data/src/core/lib/http/httpcli.cc +12 -24
  504. data/src/core/lib/http/httpcli_security_connector.cc +11 -11
  505. data/src/core/lib/iomgr/call_combiner.cc +0 -26
  506. data/src/core/lib/iomgr/closure.h +0 -9
  507. data/src/core/lib/iomgr/combiner.cc +0 -20
  508. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  509. data/src/core/lib/iomgr/error.cc +0 -773
  510. data/src/core/lib/iomgr/error.h +0 -145
  511. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  512. data/src/core/lib/iomgr/ev_poll_posix.cc +17 -9
  513. data/src/core/lib/iomgr/exec_ctx.cc +0 -12
  514. data/src/core/lib/iomgr/executor.cc +0 -10
  515. data/src/core/lib/iomgr/executor.h +0 -3
  516. data/src/core/lib/iomgr/lockfree_event.cc +0 -17
  517. data/src/core/lib/iomgr/port.h +3 -0
  518. data/src/core/lib/iomgr/resolve_address.h +29 -6
  519. data/src/core/lib/iomgr/resolve_address_posix.cc +42 -8
  520. data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
  521. data/src/core/lib/iomgr/resolve_address_windows.cc +44 -10
  522. data/src/core/lib/iomgr/resolve_address_windows.h +19 -5
  523. data/src/core/lib/iomgr/socket_windows.h +0 -2
  524. data/src/core/lib/iomgr/tcp_posix.cc +118 -6
  525. data/src/core/lib/iomgr/timer_generic.cc +6 -8
  526. data/src/core/lib/json/json.h +19 -22
  527. data/src/core/lib/json/json_args.h +34 -0
  528. data/src/core/lib/json/json_object_loader.cc +233 -0
  529. data/src/core/lib/json/json_object_loader.h +618 -0
  530. data/src/core/lib/json/json_reader.cc +86 -62
  531. data/src/core/lib/json/json_util.cc +8 -36
  532. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +3 -44
  533. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +15 -24
  534. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  535. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.cc +49 -72
  536. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.h +27 -27
  537. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +6 -6
  538. data/src/core/lib/promise/activity.h +56 -8
  539. data/src/core/lib/promise/arena_promise.h +84 -81
  540. data/src/core/lib/promise/context.h +0 -1
  541. data/src/core/lib/promise/detail/basic_seq.h +43 -23
  542. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  543. data/src/core/lib/promise/map.h +0 -1
  544. data/src/core/lib/promise/seq.h +25 -4
  545. data/src/core/lib/promise/sleep.cc +38 -42
  546. data/src/core/lib/promise/sleep.h +27 -24
  547. data/src/core/lib/promise/try_seq.h +26 -6
  548. data/src/core/lib/resolver/resolver.cc +0 -47
  549. data/src/core/lib/resolver/resolver.h +2 -12
  550. data/src/core/lib/resolver/resolver_factory.h +2 -3
  551. data/src/core/lib/resolver/resolver_registry.cc +1 -1
  552. data/src/core/lib/resolver/resolver_registry.h +2 -3
  553. data/src/core/lib/resolver/server_address.cc +11 -15
  554. data/src/core/lib/resolver/server_address.h +4 -8
  555. data/src/core/lib/resource_quota/api.cc +1 -1
  556. data/src/core/lib/resource_quota/arena.cc +21 -1
  557. data/src/core/lib/resource_quota/arena.h +24 -2
  558. data/src/core/lib/resource_quota/memory_quota.cc +157 -17
  559. data/src/core/lib/resource_quota/memory_quota.h +98 -17
  560. data/src/core/lib/resource_quota/periodic_update.cc +79 -0
  561. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  562. data/src/core/lib/security/authorization/evaluate_args.cc +10 -7
  563. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
  564. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  565. data/src/core/lib/security/authorization/matchers.cc +13 -10
  566. data/src/core/lib/security/authorization/rbac_policy.cc +0 -1
  567. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -3
  568. data/src/core/lib/security/credentials/alts/alts_credentials.h +3 -4
  569. data/src/core/lib/security/credentials/composite/composite_credentials.cc +3 -7
  570. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -4
  571. data/src/core/lib/security/credentials/credentials.h +16 -12
  572. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +18 -11
  573. data/src/core/lib/security/credentials/external/external_account_credentials.cc +32 -23
  574. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
  575. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -6
  576. data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -12
  577. data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -4
  578. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +29 -26
  579. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -3
  580. data/src/core/lib/security/credentials/iam/iam_credentials.cc +0 -1
  581. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +3 -3
  582. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -4
  583. data/src/core/lib/security/credentials/jwt/json_token.cc +12 -3
  584. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -8
  585. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +11 -13
  586. data/src/core/lib/security/credentials/local/local_credentials.cc +3 -4
  587. data/src/core/lib/security/credentials/local/local_credentials.h +3 -4
  588. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +17 -18
  589. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +0 -1
  590. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -21
  591. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +3 -4
  592. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +6 -0
  593. data/src/core/lib/security/credentials/tls/tls_credentials.cc +13 -25
  594. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -4
  595. data/src/core/lib/security/credentials/xds/xds_credentials.cc +13 -30
  596. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  597. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -18
  598. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +26 -38
  599. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  600. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
  601. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +6 -5
  602. data/src/core/lib/security/security_connector/local/local_security_connector.cc +13 -11
  603. data/src/core/lib/security/security_connector/local/local_security_connector.h +2 -2
  604. data/src/core/lib/security/security_connector/security_connector.h +5 -3
  605. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +5 -4
  606. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +5 -5
  607. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +5 -5
  608. data/src/core/lib/security/transport/auth_filters.h +1 -1
  609. data/src/core/lib/security/transport/client_auth_filter.cc +3 -4
  610. data/src/core/lib/security/transport/security_handshaker.cc +32 -44
  611. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  612. data/src/core/lib/service_config/service_config.h +11 -0
  613. data/src/core/lib/service_config/service_config_impl.cc +98 -97
  614. data/src/core/lib/service_config/service_config_impl.h +11 -13
  615. data/src/core/lib/service_config/service_config_parser.cc +26 -27
  616. data/src/core/lib/service_config/service_config_parser.h +10 -22
  617. data/src/core/lib/slice/percent_encoding.cc +4 -13
  618. data/src/core/lib/slice/slice.cc +10 -4
  619. data/src/core/lib/surface/call.cc +8 -2
  620. data/src/core/lib/surface/channel.cc +6 -6
  621. data/src/core/lib/surface/channel.h +1 -1
  622. data/src/core/lib/surface/completion_queue.cc +0 -2
  623. data/src/core/lib/surface/completion_queue.h +0 -3
  624. data/src/core/lib/surface/init.cc +2 -6
  625. data/src/core/lib/surface/lame_client.cc +2 -3
  626. data/src/core/lib/surface/lame_client.h +1 -1
  627. data/src/core/lib/surface/server.cc +7 -12
  628. data/src/core/lib/surface/server.h +7 -7
  629. data/src/core/lib/surface/validate_metadata.cc +4 -14
  630. data/src/core/lib/surface/version.cc +2 -2
  631. data/src/core/lib/transport/connectivity_state.cc +0 -1
  632. data/src/core/lib/transport/connectivity_state.h +1 -1
  633. data/src/core/lib/transport/error_utils.cc +0 -36
  634. data/src/core/lib/transport/handshaker.cc +7 -9
  635. data/src/core/lib/transport/handshaker.h +4 -5
  636. data/src/core/lib/transport/handshaker_factory.h +2 -3
  637. data/src/core/lib/transport/handshaker_registry.cc +2 -1
  638. data/src/core/lib/transport/handshaker_registry.h +2 -4
  639. data/src/core/lib/transport/http_connect_handshaker.cc +16 -16
  640. data/src/core/lib/transport/metadata_batch.cc +5 -0
  641. data/src/core/lib/transport/metadata_batch.h +52 -7
  642. data/src/core/lib/transport/parsed_metadata.h +0 -1
  643. data/src/core/lib/transport/tcp_connect_handshaker.cc +12 -18
  644. data/src/core/lib/transport/transport.h +0 -7
  645. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +40 -21
  646. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  647. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +14 -7
  648. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  649. data/src/core/tsi/fake_transport_security.cc +53 -30
  650. data/src/core/tsi/local_transport_security.cc +9 -5
  651. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +10 -1
  652. data/src/core/tsi/ssl_transport_security.cc +47 -23
  653. data/src/core/tsi/transport_security.cc +18 -6
  654. data/src/core/tsi/transport_security.h +2 -1
  655. data/src/core/tsi/transport_security_interface.h +17 -5
  656. data/src/ruby/ext/grpc/extconf.rb +2 -0
  657. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  658. data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
  659. data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
  660. data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
  661. data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
  662. data/src/ruby/lib/grpc/grpc_c.so +0 -0
  663. data/src/ruby/lib/grpc/version.rb +1 -1
  664. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  665. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  666. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  667. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  668. data/third_party/upb/upb/arena.c +277 -0
  669. data/third_party/upb/upb/arena.h +225 -0
  670. data/third_party/upb/upb/array.c +114 -0
  671. data/third_party/upb/upb/array.h +83 -0
  672. data/third_party/upb/upb/collections.h +36 -0
  673. data/third_party/upb/upb/decode.c +161 -65
  674. data/third_party/upb/upb/decode.h +1 -0
  675. data/third_party/upb/upb/decode_fast.c +1 -1
  676. data/third_party/upb/upb/def.c +10 -2
  677. data/third_party/upb/upb/def.h +8 -1
  678. data/third_party/upb/upb/def.hpp +7 -4
  679. data/third_party/upb/upb/encode.c +29 -20
  680. data/third_party/upb/upb/encode.h +16 -6
  681. data/third_party/upb/upb/extension_registry.c +93 -0
  682. data/third_party/upb/upb/extension_registry.h +84 -0
  683. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  684. data/third_party/upb/upb/internal/table.h +385 -0
  685. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  686. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  687. data/third_party/upb/upb/json_decode.c +1512 -0
  688. data/third_party/upb/upb/json_decode.h +47 -0
  689. data/third_party/upb/upb/json_encode.c +7 -3
  690. data/third_party/upb/upb/json_encode.h +6 -3
  691. data/third_party/upb/upb/map.c +108 -0
  692. data/third_party/upb/upb/map.h +117 -0
  693. data/third_party/upb/upb/message_value.h +66 -0
  694. data/third_party/upb/upb/mini_table.c +1147 -0
  695. data/third_party/upb/upb/mini_table.h +189 -0
  696. data/third_party/upb/upb/mini_table.hpp +112 -0
  697. data/third_party/upb/upb/msg.c +2 -62
  698. data/third_party/upb/upb/msg.h +2 -45
  699. data/third_party/upb/upb/msg_internal.h +28 -22
  700. data/third_party/upb/upb/port_def.inc +2 -1
  701. data/third_party/upb/upb/port_undef.inc +1 -0
  702. data/third_party/upb/upb/reflection.c +2 -159
  703. data/third_party/upb/upb/reflection.h +2 -112
  704. data/third_party/upb/upb/status.c +86 -0
  705. data/third_party/upb/upb/status.h +66 -0
  706. data/third_party/upb/upb/table.c +2 -2
  707. data/third_party/upb/upb/table_internal.h +3 -352
  708. data/third_party/upb/upb/text_encode.c +3 -2
  709. data/third_party/upb/upb/upb.c +4 -290
  710. data/third_party/upb/upb/upb.h +7 -196
  711. metadata +89 -38
  712. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
  713. data/src/core/lib/iomgr/error_internal.h +0 -66
  714. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  715. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  716. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  717. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  718. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  719. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  720. data/src/core/lib/promise/detail/switch.h +0 -1455
  721. data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
@@ -40,6 +40,7 @@
40
40
  #include "absl/types/variant.h"
41
41
 
42
42
  #include <grpc/impl/codegen/connectivity_state.h>
43
+ #include <grpc/impl/codegen/grpc_types.h>
43
44
  #include <grpc/slice_buffer.h>
44
45
  #include <grpc/status.h>
45
46
  #include <grpc/support/alloc.h>
@@ -75,7 +76,6 @@
75
76
  #include "src/core/lib/iomgr/timer.h"
76
77
  #include "src/core/lib/profiling/timers.h"
77
78
  #include "src/core/lib/promise/poll.h"
78
- #include "src/core/lib/resource_quota/api.h"
79
79
  #include "src/core/lib/resource_quota/arena.h"
80
80
  #include "src/core/lib/resource_quota/memory_quota.h"
81
81
  #include "src/core/lib/resource_quota/resource_quota.h"
@@ -286,147 +286,126 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
286
286
  static const grpc_transport_vtable* get_vtable(void);
287
287
 
288
288
  static void read_channel_args(grpc_chttp2_transport* t,
289
- const grpc_channel_args* channel_args,
289
+ const grpc_core::ChannelArgs& channel_args,
290
290
  bool is_client) {
291
- bool channelz_enabled = GRPC_ENABLE_CHANNELZ_DEFAULT;
292
- size_t i;
293
- int j;
294
-
295
- for (i = 0; i < channel_args->num_args; i++) {
296
- if (0 == strcmp(channel_args->args[i].key,
297
- GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER)) {
298
- const grpc_integer_options options = {-1, 0, INT_MAX};
299
- const int value =
300
- grpc_channel_arg_get_integer(&channel_args->args[i], options);
301
- if (value >= 0) {
302
- if ((t->next_stream_id & 1) != (value & 1)) {
303
- gpr_log(GPR_ERROR, "%s: low bit must be %d on %s",
304
- GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER, t->next_stream_id & 1,
305
- is_client ? "client" : "server");
306
- } else {
307
- t->next_stream_id = static_cast<uint32_t>(value);
308
- }
309
- }
310
- } else if (0 == strcmp(channel_args->args[i].key,
311
- GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER)) {
312
- const grpc_integer_options options = {-1, 0, INT_MAX};
313
- const int value =
314
- grpc_channel_arg_get_integer(&channel_args->args[i], options);
315
- if (value >= 0) {
316
- t->hpack_compressor.SetMaxUsableSize(value);
317
- }
318
- } else if (0 == strcmp(channel_args->args[i].key,
319
- GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)) {
320
- t->ping_policy.max_pings_without_data = grpc_channel_arg_get_integer(
321
- &channel_args->args[i],
322
- {g_default_max_pings_without_data, 0, INT_MAX});
323
- } else if (0 == strcmp(channel_args->args[i].key,
324
- GRPC_ARG_HTTP2_MAX_PING_STRIKES)) {
325
- t->ping_policy.max_ping_strikes = grpc_channel_arg_get_integer(
326
- &channel_args->args[i], {g_default_max_ping_strikes, 0, INT_MAX});
327
- } else if (0 ==
328
- strcmp(channel_args->args[i].key,
329
- GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)) {
330
- t->ping_policy.min_recv_ping_interval_without_data =
331
- grpc_core::Duration::Milliseconds(grpc_channel_arg_get_integer(
332
- &channel_args->args[i],
333
- grpc_integer_options{
334
- g_default_min_recv_ping_interval_without_data_ms, 0,
335
- INT_MAX}));
336
- } else if (0 == strcmp(channel_args->args[i].key,
337
- GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE)) {
338
- t->write_buffer_size = static_cast<uint32_t>(grpc_channel_arg_get_integer(
339
- &channel_args->args[i], {0, 0, MAX_WRITE_BUFFER_SIZE}));
340
- } else if (0 ==
341
- strcmp(channel_args->args[i].key, GRPC_ARG_KEEPALIVE_TIME_MS)) {
342
- const int value = grpc_channel_arg_get_integer(
343
- &channel_args->args[i],
344
- grpc_integer_options{t->is_client
345
- ? g_default_client_keepalive_time_ms
346
- : g_default_server_keepalive_time_ms,
347
- 1, INT_MAX});
348
- t->keepalive_time = value == INT_MAX
349
- ? grpc_core::Duration::Infinity()
350
- : grpc_core::Duration::Milliseconds(value);
351
- } else if (0 == strcmp(channel_args->args[i].key,
352
- GRPC_ARG_KEEPALIVE_TIMEOUT_MS)) {
353
- const int value = grpc_channel_arg_get_integer(
354
- &channel_args->args[i],
355
- grpc_integer_options{t->is_client
356
- ? g_default_client_keepalive_timeout_ms
357
- : g_default_server_keepalive_timeout_ms,
358
- 0, INT_MAX});
359
- t->keepalive_timeout = value == INT_MAX
360
- ? grpc_core::Duration::Infinity()
361
- : grpc_core::Duration::Milliseconds(value);
362
- } else if (0 == strcmp(channel_args->args[i].key,
363
- GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)) {
364
- t->keepalive_permit_without_calls = static_cast<uint32_t>(
365
- grpc_channel_arg_get_integer(&channel_args->args[i], {0, 0, 1}));
366
- } else if (0 == strcmp(channel_args->args[i].key,
367
- GRPC_ARG_OPTIMIZATION_TARGET)) {
368
- gpr_log(GPR_INFO, "GRPC_ARG_OPTIMIZATION_TARGET is deprecated");
369
- } else if (0 ==
370
- strcmp(channel_args->args[i].key, GRPC_ARG_ENABLE_CHANNELZ)) {
371
- channelz_enabled = grpc_channel_arg_get_bool(
372
- &channel_args->args[i], GRPC_ENABLE_CHANNELZ_DEFAULT);
291
+ const int initial_sequence_number =
292
+ channel_args.GetInt(GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER).value_or(-1);
293
+ if (initial_sequence_number > 0) {
294
+ if ((t->next_stream_id & 1) != (initial_sequence_number & 1)) {
295
+ gpr_log(GPR_ERROR, "%s: low bit must be %d on %s",
296
+ GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER, t->next_stream_id & 1,
297
+ is_client ? "client" : "server");
373
298
  } else {
374
- static const struct {
375
- const char* channel_arg_name;
376
- grpc_chttp2_setting_id setting_id;
377
- grpc_integer_options integer_options;
378
- bool availability[2] /* server, client */;
379
- } settings_map[] = {{GRPC_ARG_MAX_CONCURRENT_STREAMS,
380
- GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS,
381
- {-1, 0, INT32_MAX},
382
- {true, false}},
383
- {GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER,
384
- GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE,
385
- {-1, 0, INT32_MAX},
386
- {true, true}},
387
- {GRPC_ARG_MAX_METADATA_SIZE,
388
- GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE,
389
- {-1, 0, INT32_MAX},
390
- {true, true}},
391
- {GRPC_ARG_HTTP2_MAX_FRAME_SIZE,
392
- GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
393
- {-1, 16384, 16777215},
394
- {true, true}},
395
- {GRPC_ARG_HTTP2_ENABLE_TRUE_BINARY,
396
- GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA,
397
- {1, 0, 1},
398
- {true, true}},
399
- {GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES,
400
- GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE,
401
- {-1, 5, INT32_MAX},
402
- {true, true}}};
403
- for (j = 0; j < static_cast<int> GPR_ARRAY_SIZE(settings_map); j++) {
404
- if (0 == strcmp(channel_args->args[i].key,
405
- settings_map[j].channel_arg_name)) {
406
- if (!settings_map[j].availability[is_client]) {
407
- gpr_log(GPR_DEBUG, "%s is not available on %s",
408
- settings_map[j].channel_arg_name,
409
- is_client ? "clients" : "servers");
410
- } else {
411
- int value = grpc_channel_arg_get_integer(
412
- &channel_args->args[i], settings_map[j].integer_options);
413
- if (value >= 0) {
414
- queue_setting_update(t, settings_map[j].setting_id,
415
- static_cast<uint32_t>(value));
416
- }
417
- }
418
- break;
419
- }
420
- }
299
+ t->next_stream_id = static_cast<uint32_t>(initial_sequence_number);
421
300
  }
422
301
  }
423
- if (channelz_enabled) {
302
+
303
+ const int max_hpack_table_size =
304
+ channel_args.GetInt(GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER).value_or(-1);
305
+ if (max_hpack_table_size >= 0) {
306
+ t->hpack_compressor.SetMaxUsableSize(max_hpack_table_size);
307
+ }
308
+
309
+ t->ping_policy.max_pings_without_data =
310
+ std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)
311
+ .value_or(g_default_max_pings_without_data));
312
+ t->ping_policy.max_ping_strikes =
313
+ std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_MAX_PING_STRIKES)
314
+ .value_or(g_default_max_ping_strikes));
315
+ t->ping_policy.min_recv_ping_interval_without_data =
316
+ std::max(grpc_core::Duration::Zero(),
317
+ channel_args
318
+ .GetDurationFromIntMillis(
319
+ GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)
320
+ .value_or(grpc_core::Duration::Milliseconds(
321
+ g_default_min_recv_ping_interval_without_data_ms)));
322
+ t->write_buffer_size =
323
+ std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE)
324
+ .value_or(grpc_core::chttp2::kDefaultWindow));
325
+ t->keepalive_time =
326
+ std::max(grpc_core::Duration::Milliseconds(1),
327
+ channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIME_MS)
328
+ .value_or(grpc_core::Duration::Milliseconds(
329
+ t->is_client ? g_default_client_keepalive_time_ms
330
+ : g_default_server_keepalive_time_ms)));
331
+ t->keepalive_timeout = std::max(
332
+ grpc_core::Duration::Zero(),
333
+ channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIMEOUT_MS)
334
+ .value_or(grpc_core::Duration::Milliseconds(
335
+ t->is_client ? g_default_client_keepalive_timeout_ms
336
+ : g_default_server_keepalive_timeout_ms)));
337
+ t->keepalive_permit_without_calls =
338
+ channel_args.GetBool(GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)
339
+ .value_or(false);
340
+
341
+ if (channel_args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
342
+ .value_or(GRPC_ENABLE_CHANNELZ_DEFAULT)) {
424
343
  t->channelz_socket =
425
344
  grpc_core::MakeRefCounted<grpc_core::channelz::SocketNode>(
426
345
  std::string(grpc_endpoint_get_local_address(t->ep)), t->peer_string,
427
346
  absl::StrFormat("%s %s", get_vtable()->name, t->peer_string),
428
- grpc_core::channelz::SocketNode::Security::GetFromChannelArgs(
429
- channel_args));
347
+ channel_args
348
+ .GetObjectRef<grpc_core::channelz::SocketNode::Security>());
349
+ }
350
+
351
+ static const struct {
352
+ absl::string_view channel_arg_name;
353
+ grpc_chttp2_setting_id setting_id;
354
+ int default_value;
355
+ int min;
356
+ int max;
357
+ bool availability[2] /* server, client */;
358
+ } settings_map[] = {{GRPC_ARG_MAX_CONCURRENT_STREAMS,
359
+ GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS,
360
+ -1,
361
+ 0,
362
+ INT32_MAX,
363
+ {true, false}},
364
+ {GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER,
365
+ GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE,
366
+ -1,
367
+ 0,
368
+ INT32_MAX,
369
+ {true, true}},
370
+ {GRPC_ARG_MAX_METADATA_SIZE,
371
+ GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE,
372
+ -1,
373
+ 0,
374
+ INT32_MAX,
375
+ {true, true}},
376
+ {GRPC_ARG_HTTP2_MAX_FRAME_SIZE,
377
+ GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
378
+ -1,
379
+ 16384,
380
+ 16777215,
381
+ {true, true}},
382
+ {GRPC_ARG_HTTP2_ENABLE_TRUE_BINARY,
383
+ GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA,
384
+ 1,
385
+ 0,
386
+ 1,
387
+ {true, true}},
388
+ {GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES,
389
+ GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE,
390
+ -1,
391
+ 5,
392
+ INT32_MAX,
393
+ {true, true}}};
394
+
395
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(settings_map); i++) {
396
+ const auto& setting = settings_map[i];
397
+ if (setting.availability[is_client]) {
398
+ const int value = channel_args.GetInt(setting.channel_arg_name)
399
+ .value_or(setting.default_value);
400
+ if (value >= 0) {
401
+ queue_setting_update(t, setting.setting_id,
402
+ grpc_core::Clamp(value, setting.min, setting.max));
403
+ }
404
+ } else if (channel_args.Contains(setting.channel_arg_name)) {
405
+ gpr_log(GPR_DEBUG, "%s is not available on %s",
406
+ std::string(setting.channel_arg_name).c_str(),
407
+ is_client ? "clients" : "servers");
408
+ }
430
409
  }
431
410
  }
432
411
 
@@ -481,13 +460,14 @@ static void init_keepalive_pings_if_enabled(grpc_chttp2_transport* t) {
481
460
  }
482
461
 
483
462
  grpc_chttp2_transport::grpc_chttp2_transport(
484
- const grpc_channel_args* channel_args, grpc_endpoint* ep, bool is_client)
463
+ const grpc_core::ChannelArgs& channel_args, grpc_endpoint* ep,
464
+ bool is_client)
485
465
  : refs(1, GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_refcount)
486
466
  ? "chttp2_refcount"
487
467
  : nullptr),
488
468
  ep(ep),
489
469
  peer_string(grpc_endpoint_get_peer(ep)),
490
- memory_owner(grpc_core::ResourceQuotaFromChannelArgs(channel_args)
470
+ memory_owner(channel_args.GetObject<grpc_core::ResourceQuota>()
491
471
  ->memory_quota()
492
472
  ->CreateMemoryOwner(absl::StrCat(
493
473
  grpc_endpoint_get_peer(ep), ":client_transport"))),
@@ -498,10 +478,10 @@ grpc_chttp2_transport::grpc_chttp2_transport(
498
478
  GRPC_CHANNEL_READY),
499
479
  is_client(is_client),
500
480
  next_stream_id(is_client ? 1 : 2),
501
- flow_control(peer_string.c_str(),
502
- grpc_channel_args_find_bool(channel_args,
503
- GRPC_ARG_HTTP2_BDP_PROBE, true),
504
- &memory_owner),
481
+ flow_control(
482
+ peer_string.c_str(),
483
+ channel_args.GetBool(GRPC_ARG_HTTP2_BDP_PROBE).value_or(true),
484
+ &memory_owner),
505
485
  deframe_state(is_client ? GRPC_DTS_FH_0 : GRPC_DTS_CLIENT_PREFIX_0) {
506
486
  GPR_ASSERT(strlen(GRPC_CHTTP2_CLIENT_CONNECT_STRING) ==
507
487
  GRPC_CHTTP2_CLIENT_CONNECT_STRLEN);
@@ -543,9 +523,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
543
523
  configure_transport_ping_policy(this);
544
524
  init_transport_keepalive_settings(this);
545
525
 
546
- if (channel_args != nullptr) {
547
- read_channel_args(this, channel_args, is_client);
548
- }
526
+ read_channel_args(this, channel_args, is_client);
549
527
 
550
528
  // No pings allowed before receiving a header or data frame.
551
529
  ping_state.pings_before_data_required = 0;
@@ -1150,14 +1128,14 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1150
1128
  gpr_log(GPR_ERROR,
1151
1129
  "Received a GOAWAY with error code ENHANCE_YOUR_CALM and debug "
1152
1130
  "data equal to \"too_many_pings\"");
1153
- constexpr auto max_keepalive_time = grpc_core::Duration::Milliseconds(
1154
- INT_MAX / KEEPALIVE_TIME_BACKOFF_MULTIPLIER);
1155
- t->keepalive_time =
1156
- t->keepalive_time > max_keepalive_time
1157
- ? grpc_core::Duration::Infinity()
1158
- : t->keepalive_time * KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
1131
+ constexpr int max_keepalive_time_millis =
1132
+ INT_MAX / KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
1133
+ int throttled_keepalive_time =
1134
+ t->keepalive_time.millis() > max_keepalive_time_millis
1135
+ ? INT_MAX
1136
+ : t->keepalive_time.millis() * KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
1159
1137
  status.SetPayload(grpc_core::kKeepaliveThrottlingKey,
1160
- absl::Cord(std::to_string(t->keepalive_time.millis())));
1138
+ absl::Cord(std::to_string(throttled_keepalive_time)));
1161
1139
  }
1162
1140
  // lie: use transient failure from the transport to indicate goaway has been
1163
1141
  // received.
@@ -1270,13 +1248,8 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1270
1248
  write_state_name(t->write_state));
1271
1249
  }
1272
1250
  if (!GRPC_ERROR_IS_NONE(error)) {
1273
- #ifdef GRPC_ERROR_IS_ABSEIL_STATUS
1274
1251
  grpc_error_handle cl_err =
1275
1252
  grpc_core::internal::StatusMoveFromHeapPtr(closure->error_data.error);
1276
- #else
1277
- grpc_error_handle cl_err =
1278
- reinterpret_cast<grpc_error_handle>(closure->error_data.error);
1279
- #endif
1280
1253
  if (GRPC_ERROR_IS_NONE(cl_err)) {
1281
1254
  cl_err = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1282
1255
  "Error in HTTP transport completing operation");
@@ -1284,24 +1257,15 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1284
1257
  t->peer_string);
1285
1258
  }
1286
1259
  cl_err = grpc_error_add_child(cl_err, error);
1287
- #ifdef GRPC_ERROR_IS_ABSEIL_STATUS
1288
1260
  closure->error_data.error = grpc_core::internal::StatusAllocHeapPtr(cl_err);
1289
- #else
1290
- closure->error_data.error = reinterpret_cast<intptr_t>(cl_err);
1291
- #endif
1292
1261
  }
1293
1262
  if (closure->next_data.scratch < CLOSURE_BARRIER_FIRST_REF_BIT) {
1294
1263
  if ((t->write_state == GRPC_CHTTP2_WRITE_STATE_IDLE) ||
1295
1264
  !(closure->next_data.scratch & CLOSURE_BARRIER_MAY_COVER_WRITE)) {
1296
1265
  // Using GRPC_CLOSURE_SCHED instead of GRPC_CLOSURE_RUN to avoid running
1297
1266
  // closures earlier than when it is safe to do so.
1298
- #ifdef GRPC_ERROR_IS_ABSEIL_STATUS
1299
1267
  grpc_error_handle run_error =
1300
1268
  grpc_core::internal::StatusMoveFromHeapPtr(closure->error_data.error);
1301
- #else
1302
- grpc_error_handle run_error =
1303
- reinterpret_cast<grpc_error_handle>(closure->error_data.error);
1304
- #endif
1305
1269
  closure->error_data.error = 0;
1306
1270
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, run_error);
1307
1271
  } else {
@@ -3120,7 +3084,8 @@ grpc_chttp2_transport_get_socket_node(grpc_transport* transport) {
3120
3084
  }
3121
3085
 
3122
3086
  grpc_transport* grpc_create_chttp2_transport(
3123
- const grpc_channel_args* channel_args, grpc_endpoint* ep, bool is_client) {
3087
+ const grpc_core::ChannelArgs& channel_args, grpc_endpoint* ep,
3088
+ bool is_client) {
3124
3089
  auto t = new grpc_chttp2_transport(channel_args, ep, is_client);
3125
3090
  return &t->base;
3126
3091
  }
@@ -21,9 +21,9 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <grpc/impl/codegen/grpc_types.h>
25
24
  #include <grpc/slice.h>
26
25
 
26
+ #include "src/core/lib/channel/channel_args.h"
27
27
  #include "src/core/lib/channel/channelz.h"
28
28
  #include "src/core/lib/debug/trace.h"
29
29
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
@@ -41,7 +41,8 @@ extern grpc_core::DebugOnlyTraceFlag grpc_trace_chttp2_hpack_parser;
41
41
  /// from the caller; if the caller still needs the resource_user after creating
42
42
  /// a transport, the caller must take another ref.
43
43
  grpc_transport* grpc_create_chttp2_transport(
44
- const grpc_channel_args* channel_args, grpc_endpoint* ep, bool is_client);
44
+ const grpc_core::ChannelArgs& channel_args, grpc_endpoint* ep,
45
+ bool is_client);
45
46
 
46
47
  grpc_core::RefCountedPtr<grpc_core::channelz::SocketNode>
47
48
  grpc_chttp2_transport_get_socket_node(grpc_transport* transport);
@@ -36,11 +36,17 @@
36
36
  #include <grpc/support/log.h>
37
37
 
38
38
  #include "src/core/lib/gpr/useful.h"
39
+ #include "src/core/lib/gprpp/global_config_env.h"
39
40
  #include "src/core/lib/iomgr/exec_ctx.h"
40
41
  #include "src/core/lib/resource_quota/memory_quota.h"
41
42
 
42
43
  grpc_core::TraceFlag grpc_flowctl_trace(false, "flowctl");
43
44
 
45
+ GPR_GLOBAL_CONFIG_DEFINE_BOOL(
46
+ grpc_experimental_broad_flow_control_range, false,
47
+ "Use an enlarged memory pressure range for scaling flow control when using "
48
+ "a resource quota.");
49
+
44
50
  namespace grpc_core {
45
51
  namespace chttp2 {
46
52
 
@@ -198,7 +204,9 @@ static double AdjustForMemoryPressure(double memory_pressure, double target) {
198
204
 
199
205
  double TransportFlowControl::TargetLogBdp() {
200
206
  return AdjustForMemoryPressure(
201
- memory_owner_->is_valid() ? memory_owner_->InstantaneousPressure() : 0.0,
207
+ memory_owner_->is_valid()
208
+ ? memory_owner_->GetPressureInfo().pressure_control_value
209
+ : 0.0,
202
210
  1 + log2(bdp_estimator_.EstimateBdp()));
203
211
  }
204
212
 
@@ -212,6 +220,59 @@ double TransportFlowControl::SmoothLogBdp(double value) {
212
220
  return pid_controller_.Update(bdp_error, dt > kMaxDt ? kMaxDt : dt);
213
221
  }
214
222
 
223
+ double
224
+ TransportFlowControl::TargetInitialWindowSizeBasedOnMemoryPressureAndBdp()
225
+ const {
226
+ const double bdp = bdp_estimator_.EstimateBdp() * 2.0;
227
+ const double memory_pressure =
228
+ memory_owner_->GetPressureInfo().pressure_control_value;
229
+ // Linear interpolation between two values.
230
+ // Given a line segment between the two points (t_min, a), and (t_max, b),
231
+ // and a value t such that t_min <= t <= t_max, return the value on the line
232
+ // segment at t.
233
+ auto lerp = [](double t, double t_min, double t_max, double a, double b) {
234
+ return a + (b - a) * (t - t_min) / (t_max - t_min);
235
+ };
236
+ // We split memory pressure into three broad regions:
237
+ // 1. Low memory pressure, the "anything goes" case - we assume no memory
238
+ // pressure concerns and advertise a huge window to keep things flowing.
239
+ // 2. Moderate memory pressure, the "adjust to BDP" case - we linearly ramp
240
+ // down window size to 2*BDP - which should still allow bytes to flow, but
241
+ // is arguably more considered.
242
+ // 3. High memory pressure - past 50% we linearly ramp down window size from
243
+ // BDP to 0 - at which point senders effectively must request to send bytes
244
+ // to us.
245
+ //
246
+ // ▲
247
+ // │
248
+ // 16mb ────┤---------x----
249
+ // │ -----
250
+ // BDP ────┤ ----x---
251
+ // │ ----
252
+ // │ -----
253
+ // │ ----
254
+ // │ -----
255
+ // │ ---x
256
+ // ├─────────┬─────────────┬────────────────────────┬─────►
257
+ // │Anything │Adjust to │Drop to zero │
258
+ // │Goes │BDP │ │
259
+ // 0% 20% 50% 100% memory
260
+ // pressure
261
+ const double kAnythingGoesPressure = 0.2;
262
+ const double kAdjustedToBdpPressure = 0.5;
263
+ const double kAnythingGoesWindow = std::max(double(1 << 24), bdp);
264
+ if (memory_pressure < kAnythingGoesPressure) {
265
+ return kAnythingGoesWindow;
266
+ } else if (memory_pressure < kAdjustedToBdpPressure) {
267
+ return lerp(memory_pressure, kAnythingGoesPressure, kAdjustedToBdpPressure,
268
+ kAnythingGoesWindow, bdp);
269
+ } else if (memory_pressure < 1.0) {
270
+ return lerp(memory_pressure, kAdjustedToBdpPressure, 1.0, bdp, 0);
271
+ } else {
272
+ return 0;
273
+ }
274
+ }
275
+
215
276
  void TransportFlowControl::UpdateSetting(
216
277
  int64_t* desired_value, int64_t new_desired_value,
217
278
  FlowControlAction* action,
@@ -227,13 +288,17 @@ void TransportFlowControl::UpdateSetting(
227
288
  }
228
289
 
229
290
  FlowControlAction TransportFlowControl::PeriodicUpdate() {
291
+ static const bool kSmoothMemoryPressure =
292
+ GPR_GLOBAL_CONFIG_GET(grpc_experimental_smooth_memory_presure);
230
293
  FlowControlAction action;
231
294
  if (enable_bdp_probe_) {
232
295
  // get bdp estimate and update initial_window accordingly.
233
296
  // target might change based on how much memory pressure we are under
234
297
  // TODO(ncteisen): experiment with setting target to be huge under low
235
298
  // memory pressure.
236
- double target = pow(2, SmoothLogBdp(TargetLogBdp()));
299
+ double target = kSmoothMemoryPressure
300
+ ? TargetInitialWindowSizeBasedOnMemoryPressureAndBdp()
301
+ : pow(2, SmoothLogBdp(TargetLogBdp()));
237
302
  if (g_test_only_transport_target_window_estimates_mocker != nullptr) {
238
303
  // Hook for simulating unusual flow control situations in tests.
239
304
  target = g_test_only_transport_target_window_estimates_mocker
@@ -252,6 +252,7 @@ class TransportFlowControl final {
252
252
  private:
253
253
  double TargetLogBdp();
254
254
  double SmoothLogBdp(double value);
255
+ double TargetInitialWindowSizeBasedOnMemoryPressureAndBdp() const;
255
256
  static void UpdateSetting(int64_t* desired_value, int64_t new_desired_value,
256
257
  FlowControlAction* action,
257
258
  FlowControlAction& (FlowControlAction::*set)(
@@ -17,7 +17,8 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
- #include <stdint.h>
20
+ #include <cstddef>
21
+ #include <cstdint>
21
22
 
22
23
  namespace grpc_core {
23
24
  namespace hpack_constants {
@@ -33,6 +34,11 @@ static constexpr uint32_t EntriesForBytes(uint32_t bytes) noexcept {
33
34
  return (bytes + kEntryOverhead - 1) / kEntryOverhead;
34
35
  }
35
36
 
37
+ static constexpr size_t SizeForEntry(size_t key_length,
38
+ size_t value_length) noexcept {
39
+ return key_length + value_length + kEntryOverhead;
40
+ }
41
+
36
42
  static constexpr uint32_t kInitialTableEntries =
37
43
  EntriesForBytes(kInitialTableSize);
38
44
  } // namespace hpack_constants
@@ -431,13 +431,15 @@ void HPackCompressor::Framer::Encode(HttpSchemeMetadata,
431
431
  }
432
432
 
433
433
  void HPackCompressor::Framer::Encode(GrpcTraceBinMetadata, const Slice& slice) {
434
- EncodeIndexedKeyWithBinaryValue(&compressor_->grpc_trace_bin_index_,
435
- "grpc-trace-bin", slice.Ref());
434
+ EncodeRepeatingSliceValue(GrpcTraceBinMetadata::key(), slice,
435
+ &compressor_->grpc_trace_bin_index_,
436
+ HPackEncoderTable::MaxEntrySize());
436
437
  }
437
438
 
438
439
  void HPackCompressor::Framer::Encode(GrpcTagsBinMetadata, const Slice& slice) {
439
- EncodeIndexedKeyWithBinaryValue(&compressor_->grpc_tags_bin_index_,
440
- "grpc-tags-bin", slice.Ref());
440
+ EncodeRepeatingSliceValue(GrpcTagsBinMetadata::key(), slice,
441
+ &compressor_->grpc_tags_bin_index_,
442
+ HPackEncoderTable::MaxEntrySize());
441
443
  }
442
444
 
443
445
  void HPackCompressor::Framer::Encode(HttpStatusMetadata, uint32_t status) {
@@ -521,6 +523,18 @@ void HPackCompressor::Framer::EncodeIndexedKeyWithBinaryValue(
521
523
  }
522
524
  }
523
525
 
526
+ void HPackCompressor::Framer::EncodeRepeatingSliceValue(
527
+ const absl::string_view& key, const Slice& slice, uint32_t* index,
528
+ size_t max_compression_size) {
529
+ if (hpack_constants::SizeForEntry(key.size(), slice.size()) >
530
+ max_compression_size) {
531
+ EmitLitHdrWithBinaryStringKeyNotIdx(Slice::FromStaticString(key),
532
+ slice.Ref());
533
+ } else {
534
+ EncodeIndexedKeyWithBinaryValue(index, key, slice.Ref());
535
+ }
536
+ }
537
+
524
538
  void HPackCompressor::Framer::Encode(GrpcTimeoutMetadata, Timestamp deadline) {
525
539
  Timeout timeout = Timeout::FromDuration(deadline - ExecCtx::Get()->Now());
526
540
  for (auto it = compressor_->previous_timeouts_.begin();
@@ -553,7 +567,9 @@ void HPackCompressor::Framer::Encode(GrpcTimeoutMetadata, Timestamp deadline) {
553
567
  }
554
568
 
555
569
  void HPackCompressor::Framer::Encode(UserAgentMetadata, const Slice& slice) {
556
- if (slice.length() > HPackEncoderTable::MaxEntrySize()) {
570
+ if (hpack_constants::SizeForEntry(UserAgentMetadata::key().size(),
571
+ slice.size()) >
572
+ HPackEncoderTable::MaxEntrySize()) {
557
573
  EmitLitHdrWithNonBinaryStringKeyNotIdx(
558
574
  Slice::FromStaticString(UserAgentMetadata::key()), slice.Ref());
559
575
  return;
@@ -562,9 +578,10 @@ void HPackCompressor::Framer::Encode(UserAgentMetadata, const Slice& slice) {
562
578
  compressor_->user_agent_ = slice.Ref();
563
579
  compressor_->user_agent_index_ = 0;
564
580
  }
565
- EncodeAlwaysIndexed(
566
- &compressor_->user_agent_index_, "user-agent", slice.Ref(),
567
- 10 /* user-agent */ + slice.size() + hpack_constants::kEntryOverhead);
581
+ EncodeAlwaysIndexed(&compressor_->user_agent_index_, UserAgentMetadata::key(),
582
+ slice.Ref(),
583
+ hpack_constants::SizeForEntry(
584
+ UserAgentMetadata::key().size(), slice.size()));
568
585
  }
569
586
 
570
587
  void HPackCompressor::Framer::Encode(GrpcStatusMetadata,
@@ -154,6 +154,10 @@ class HPackCompressor {
154
154
  void EncodeIndexedKeyWithBinaryValue(uint32_t* index, absl::string_view key,
155
155
  Slice value);
156
156
 
157
+ void EncodeRepeatingSliceValue(const absl::string_view& key,
158
+ const Slice& slice, uint32_t* index,
159
+ size_t max_compression_size);
160
+
157
161
  size_t CurrentFrameSize() const;
158
162
  void Add(Slice slice);
159
163
  uint8_t* AddTiny(size_t len);
@@ -17,7 +17,6 @@
17
17
  #include "src/core/ext/transport/chttp2/transport/hpack_encoder_table.h"
18
18
 
19
19
  #include <algorithm>
20
- #include <cstdint>
21
20
 
22
21
  #include <grpc/support/log.h>
23
22
 
@@ -20,6 +20,8 @@
20
20
  #include <stddef.h>
21
21
  #include <stdint.h>
22
22
 
23
+ #include <limits>
24
+
23
25
  #include "absl/container/inlined_vector.h"
24
26
 
25
27
  #include "src/core/ext/transport/chttp2/transport/hpack_constants.h"
@@ -30,9 +32,13 @@ namespace grpc_core {
30
32
  // sizes.
31
33
  class HPackEncoderTable {
32
34
  public:
35
+ using EntrySize = uint16_t;
36
+
33
37
  HPackEncoderTable() : elem_size_(hpack_constants::kInitialTableEntries) {}
34
38
 
35
- static constexpr size_t MaxEntrySize() { return 65535; }
39
+ static constexpr size_t MaxEntrySize() {
40
+ return std::numeric_limits<EntrySize>::max();
41
+ }
36
42
 
37
43
  // Reserve space in table for the new element, evict entries if needed.
38
44
  // Return the new index of the element. Return 0 to indicate not adding to
@@ -65,7 +71,7 @@ class HPackEncoderTable {
65
71
  uint32_t table_elems_ = 0;
66
72
  uint32_t table_size_ = 0;
67
73
  // The size of each element in the HPACK table.
68
- absl::InlinedVector<uint16_t, hpack_constants::kInitialTableEntries>
74
+ absl::InlinedVector<EntrySize, hpack_constants::kInitialTableEntries>
69
75
  elem_size_;
70
76
  };
71
77