grpc 1.48.0 → 1.50.0

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

Potentially problematic release.


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

Files changed (846) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +114 -150
  3. data/include/grpc/event_engine/endpoint_config.h +11 -5
  4. data/include/grpc/event_engine/event_engine.h +20 -17
  5. data/include/grpc/impl/codegen/atm_gcc_atomic.h +19 -28
  6. data/include/grpc/impl/codegen/atm_gcc_sync.h +0 -2
  7. data/include/grpc/impl/codegen/atm_windows.h +0 -2
  8. data/include/grpc/impl/codegen/grpc_types.h +9 -8
  9. data/include/grpc/impl/codegen/port_platform.h +0 -8
  10. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +6 -6
  11. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +2 -2
  12. data/src/core/ext/filters/client_channel/backup_poller.cc +4 -6
  13. data/src/core/ext/filters/client_channel/client_channel.cc +154 -218
  14. data/src/core/ext/filters/client_channel/client_channel.h +16 -9
  15. data/src/core/ext/filters/client_channel/client_channel_factory.cc +0 -29
  16. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -10
  17. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +0 -16
  18. data/src/core/ext/filters/client_channel/config_selector.h +12 -4
  19. data/src/core/ext/filters/client_channel/connector.h +4 -5
  20. data/src/core/ext/filters/client_channel/http_proxy.cc +55 -74
  21. data/src/core/ext/filters/client_channel/http_proxy.h +15 -11
  22. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +20 -16
  23. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +11 -10
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +0 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +181 -194
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -3
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +5 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -0
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -2
  30. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +20 -11
  31. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +250 -146
  33. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +41 -1
  34. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +35 -32
  35. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +195 -299
  36. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +237 -250
  37. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +12 -7
  38. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +431 -498
  39. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +31 -30
  40. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +27 -27
  41. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +108 -124
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +68 -76
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +131 -227
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +126 -121
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +325 -304
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +4 -8
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +431 -145
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +172 -101
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -7
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +18 -16
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +7 -17
  52. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +11 -0
  53. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +51 -32
  54. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +87 -41
  55. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +16 -6
  56. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -13
  57. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +167 -168
  58. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +40 -32
  59. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -10
  60. data/src/core/ext/filters/client_channel/retry_filter.cc +25 -36
  61. data/src/core/ext/filters/client_channel/retry_service_config.cc +30 -19
  62. data/src/core/ext/filters/client_channel/retry_service_config.h +6 -9
  63. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +6 -7
  64. data/src/core/ext/filters/client_channel/subchannel.cc +86 -121
  65. data/src/core/ext/filters/client_channel/subchannel.h +20 -11
  66. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +1 -1
  67. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
  68. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -25
  69. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +4 -6
  70. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -6
  71. data/src/core/ext/filters/deadline/deadline_filter.h +2 -3
  72. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +24 -19
  73. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +9 -1
  74. data/src/core/ext/filters/fault_injection/service_config_parser.cc +17 -12
  75. data/src/core/ext/filters/fault_injection/service_config_parser.h +4 -5
  76. data/src/core/ext/filters/http/client/http_client_filter.cc +3 -5
  77. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  78. data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
  79. data/src/core/ext/filters/http/client_authority_filter.h +1 -1
  80. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +2 -4
  81. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -2
  82. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -5
  83. data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +13 -7
  85. data/src/core/ext/filters/message_size/message_size_filter.h +3 -6
  86. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +16 -12
  87. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -6
  88. data/src/core/ext/filters/server_config_selector/server_config_selector.h +5 -0
  89. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +3 -5
  90. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +40 -63
  91. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +86 -107
  92. data/src/core/ext/transport/chttp2/server/chttp2_server.h +4 -6
  93. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -1
  94. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +155 -295
  95. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -2
  96. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +287 -0
  97. data/src/core/ext/transport/chttp2/transport/decode_huff.h +1018 -0
  98. data/src/core/ext/transport/chttp2/transport/flow_control.cc +139 -42
  99. data/src/core/ext/transport/chttp2/transport/flow_control.h +12 -6
  100. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +1 -2
  101. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  102. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +27 -28
  103. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -0
  104. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -1
  105. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +8 -2
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +30 -38
  107. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +1 -10
  108. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +11 -6
  109. data/src/core/ext/transport/chttp2/transport/internal.h +4 -1
  110. data/src/core/ext/transport/chttp2/transport/parsing.cc +44 -0
  111. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -14
  112. data/src/core/ext/transport/inproc/inproc_transport.cc +41 -77
  113. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  114. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  115. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +4 -4
  116. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +24 -8
  117. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  118. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  119. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  120. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  121. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  122. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  123. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  124. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  125. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  126. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  127. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  128. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  129. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  130. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  131. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  132. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  133. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  134. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
  135. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  136. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  137. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +21 -19
  138. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +124 -34
  139. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  140. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  141. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +23 -22
  142. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +153 -48
  143. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  144. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  145. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  146. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  147. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  148. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  149. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +7 -7
  150. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +42 -14
  151. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  152. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  153. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  154. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  155. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  156. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  157. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  158. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  159. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  160. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  161. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  162. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  163. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  164. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  165. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +9 -9
  166. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +54 -18
  167. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  168. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  169. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +21 -20
  170. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +117 -44
  171. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  172. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  173. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  174. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  175. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +6 -2
  176. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  177. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  178. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  179. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  180. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  181. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  182. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +5 -5
  183. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +36 -12
  184. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  185. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  186. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  187. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  188. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +37 -13
  189. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +170 -15
  190. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  191. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  192. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +1 -1
  193. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +6 -2
  194. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  195. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  196. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  197. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  198. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  199. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  200. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  201. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  202. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -9
  203. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +100 -14
  204. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -22
  205. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +36 -77
  206. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +121 -76
  207. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +647 -163
  208. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  209. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  210. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  211. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  212. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +1 -1
  213. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -2
  214. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  215. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  216. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  217. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  218. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  219. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  220. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  221. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  222. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  223. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  224. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  225. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  226. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  227. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  228. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  229. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  230. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  231. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  232. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +1 -1
  233. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +6 -2
  234. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  235. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  236. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  237. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  238. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  239. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  240. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  241. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  242. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +1 -1
  243. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +6 -2
  244. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +35 -27
  245. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +177 -52
  246. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +6 -2
  247. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +1 -1
  248. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +6 -2
  249. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  250. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  251. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  252. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  253. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +5 -5
  254. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +42 -14
  255. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  256. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  257. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  258. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  259. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +131 -16
  260. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +632 -12
  261. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  262. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  263. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  264. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  265. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  266. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  267. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  268. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  269. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  270. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  271. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  272. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  273. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  274. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  275. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  276. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  277. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  278. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  279. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  280. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  281. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  282. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  283. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  284. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  285. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  286. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  287. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  288. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  289. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  290. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  291. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  292. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  293. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  294. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  295. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  296. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  297. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  298. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  299. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  300. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  301. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  302. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  303. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  304. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  305. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  306. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  307. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  308. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  309. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  310. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  311. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  312. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  313. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  314. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  315. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  316. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  317. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  318. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  319. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  320. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  321. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  322. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  323. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  324. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  325. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  326. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  327. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  328. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  329. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  330. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  331. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  332. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  333. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  334. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  335. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  336. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  337. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  338. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  339. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  340. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  341. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  342. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  343. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  344. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  345. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  346. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  347. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  348. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  349. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  350. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  351. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  352. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  353. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  354. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  355. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  356. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  357. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  358. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  359. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  360. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  361. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  362. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  363. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  364. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  365. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  366. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  367. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  368. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  369. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  370. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  371. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  372. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  373. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  374. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +6 -2
  375. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -1
  376. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
  377. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  378. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  379. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  380. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  381. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  382. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  383. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -1
  384. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  385. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  386. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  387. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  388. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  389. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  390. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  391. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  392. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +156 -154
  393. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +186 -183
  394. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +136 -134
  395. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  396. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +162 -139
  397. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  398. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  399. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +12 -8
  400. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  401. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +72 -75
  402. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +0 -5
  403. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +713 -670
  404. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  405. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  406. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  407. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  408. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  409. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  410. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  411. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +477 -466
  412. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  413. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +153 -84
  414. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  415. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  416. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  417. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  418. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  419. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  420. data/src/core/ext/xds/certificate_provider_store.cc +63 -3
  421. data/src/core/ext/xds/certificate_provider_store.h +9 -1
  422. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +5 -5
  423. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +1 -1
  424. data/src/core/ext/xds/upb_utils.h +0 -21
  425. data/src/core/ext/xds/xds_api.cc +73 -102
  426. data/src/core/ext/xds/xds_api.h +26 -28
  427. data/src/core/ext/xds/xds_bootstrap.cc +5 -550
  428. data/src/core/ext/xds/xds_bootstrap.h +39 -91
  429. data/src/core/ext/xds/xds_bootstrap_grpc.cc +370 -0
  430. data/src/core/ext/xds/xds_bootstrap_grpc.h +169 -0
  431. data/src/core/ext/xds/xds_certificate_provider.h +9 -0
  432. data/src/core/ext/xds/xds_channel_stack_modifier.cc +6 -4
  433. data/src/core/ext/xds/xds_channel_stack_modifier.h +8 -0
  434. data/src/core/ext/xds/xds_client.cc +732 -1317
  435. data/src/core/ext/xds/xds_client.h +33 -59
  436. data/src/core/ext/xds/xds_client_grpc.cc +229 -0
  437. data/src/core/ext/xds/xds_client_grpc.h +79 -0
  438. data/src/core/ext/xds/xds_client_stats.cc +4 -4
  439. data/src/core/ext/xds/xds_cluster.cc +162 -165
  440. data/src/core/ext/xds/xds_cluster.h +8 -7
  441. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +12 -14
  442. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -0
  443. data/src/core/ext/xds/xds_common_types.cc +140 -108
  444. data/src/core/ext/xds/xds_common_types.h +6 -7
  445. data/src/core/ext/xds/xds_endpoint.cc +87 -85
  446. data/src/core/ext/xds/xds_endpoint.h +4 -5
  447. data/src/core/ext/xds/xds_http_fault_filter.cc +4 -11
  448. data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
  449. data/src/core/ext/xds/xds_http_filters.h +3 -3
  450. data/src/core/ext/xds/xds_http_rbac_filter.cc +39 -58
  451. data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
  452. data/src/core/ext/xds/xds_lb_policy_registry.cc +21 -22
  453. data/src/core/ext/xds/xds_lb_policy_registry.h +4 -4
  454. data/src/core/ext/xds/xds_listener.cc +348 -313
  455. data/src/core/ext/xds/xds_listener.h +4 -5
  456. data/src/core/ext/xds/xds_resource_type.h +23 -9
  457. data/src/core/ext/xds/xds_route_config.cc +193 -191
  458. data/src/core/ext/xds/xds_route_config.h +31 -17
  459. data/src/core/ext/xds/xds_routing.cc +3 -6
  460. data/src/core/ext/xds/xds_routing.h +7 -9
  461. data/src/core/ext/xds/xds_server_config_fetcher.cc +81 -84
  462. data/src/core/ext/xds/xds_transport.h +86 -0
  463. data/src/core/ext/xds/xds_transport_grpc.cc +357 -0
  464. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  465. data/src/core/lib/address_utils/parse_address.cc +19 -17
  466. data/src/core/lib/address_utils/parse_address.h +8 -5
  467. data/src/core/lib/avl/avl.h +47 -25
  468. data/src/core/lib/backoff/backoff.cc +2 -4
  469. data/src/core/lib/channel/call_finalization.h +1 -3
  470. data/src/core/lib/channel/call_tracer.h +1 -1
  471. data/src/core/lib/channel/channel_args.cc +88 -19
  472. data/src/core/lib/channel/channel_args.h +218 -67
  473. data/src/core/lib/channel/channel_stack.cc +0 -1
  474. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  475. data/src/core/lib/channel/channel_stack_builder.h +2 -2
  476. data/src/core/lib/channel/channel_stack_builder_impl.cc +2 -4
  477. data/src/core/lib/channel/channel_trace.cc +3 -4
  478. data/src/core/lib/channel/channelz.cc +27 -37
  479. data/src/core/lib/channel/channelz.h +9 -0
  480. data/src/core/lib/channel/promise_based_filter.cc +18 -19
  481. data/src/core/lib/channel/promise_based_filter.h +0 -1
  482. data/src/core/lib/channel/status_util.cc +27 -0
  483. data/src/core/lib/channel/status_util.h +10 -0
  484. data/src/core/lib/config/core_configuration.cc +5 -1
  485. data/src/core/lib/config/core_configuration.h +81 -35
  486. data/src/core/lib/debug/stats.cc +39 -46
  487. data/src/core/lib/debug/stats.h +11 -13
  488. data/src/core/lib/debug/stats_data.cc +118 -614
  489. data/src/core/lib/debug/stats_data.h +67 -465
  490. data/src/core/lib/debug/trace.cc +0 -2
  491. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +12 -20
  492. data/src/core/lib/event_engine/channel_args_endpoint_config.h +13 -7
  493. data/src/core/lib/event_engine/{event_engine.cc → default_event_engine.cc} +9 -5
  494. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine.h} +4 -8
  495. data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -3
  496. data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
  497. data/src/core/lib/event_engine/executor/executor.h +38 -0
  498. data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
  499. data/src/core/lib/event_engine/executor/threaded_executor.h +44 -0
  500. data/src/core/lib/event_engine/forkable.cc +101 -0
  501. data/src/core/lib/event_engine/forkable.h +61 -0
  502. data/src/core/lib/event_engine/poller.h +56 -0
  503. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.cc → posix_engine/posix_engine.cc} +30 -47
  504. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.h → posix_engine/posix_engine.h} +27 -28
  505. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.cc +4 -5
  506. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.h +8 -8
  507. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.cc +4 -4
  508. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.h +5 -5
  509. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.cc +87 -30
  510. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.h +40 -9
  511. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  512. data/src/core/lib/event_engine/thread_pool.cc +195 -0
  513. data/src/core/lib/event_engine/thread_pool.h +114 -0
  514. data/src/core/lib/event_engine/time_util.cc +30 -0
  515. data/src/core/lib/event_engine/time_util.h +32 -0
  516. data/src/core/lib/event_engine/utils.cc +44 -0
  517. data/src/core/lib/event_engine/utils.h +36 -0
  518. data/src/core/lib/event_engine/windows/iocp.cc +155 -0
  519. data/src/core/lib/event_engine/windows/iocp.h +69 -0
  520. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  521. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  522. data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
  523. data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
  524. data/src/core/lib/experiments/config.cc +146 -0
  525. data/src/core/lib/experiments/config.h +43 -0
  526. data/src/core/lib/experiments/experiments.cc +75 -0
  527. data/src/core/lib/experiments/experiments.h +56 -0
  528. data/src/core/lib/gpr/alloc.cc +1 -9
  529. data/src/core/lib/gpr/log_windows.cc +0 -1
  530. data/src/core/lib/gpr/string_util_windows.cc +3 -30
  531. data/src/core/lib/gpr/sync_abseil.cc +0 -14
  532. data/src/core/lib/gpr/sync_posix.cc +0 -14
  533. data/src/core/lib/gpr/time.cc +11 -9
  534. data/src/core/lib/gpr/time_posix.cc +0 -6
  535. data/src/core/lib/gpr/time_precise.h +1 -1
  536. data/src/core/lib/gpr/tmpfile_windows.cc +5 -7
  537. data/src/core/lib/gpr/useful.h +40 -0
  538. data/src/core/lib/gprpp/bitset.h +3 -13
  539. data/src/core/lib/gprpp/debug_location.h +39 -7
  540. data/src/core/lib/{gpr → gprpp}/env.h +25 -12
  541. data/src/core/lib/{gpr → gprpp}/env_linux.cc +20 -15
  542. data/src/core/lib/{gpr → gprpp}/env_posix.cc +11 -10
  543. data/src/core/lib/gprpp/env_windows.cc +56 -0
  544. data/src/core/lib/gprpp/fork.cc +14 -22
  545. data/src/core/lib/gprpp/fork.h +0 -8
  546. data/src/core/lib/gprpp/global_config_env.cc +7 -6
  547. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  548. data/src/core/lib/gprpp/no_destruct.h +94 -0
  549. data/src/core/lib/gprpp/notification.h +67 -0
  550. data/src/core/lib/gprpp/packed_table.h +40 -0
  551. data/src/core/lib/gprpp/ref_counted_ptr.h +20 -34
  552. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  553. data/src/core/lib/gprpp/status_helper.cc +1 -0
  554. data/src/core/lib/gprpp/status_helper.h +6 -0
  555. data/src/core/lib/gprpp/table.h +9 -2
  556. data/src/core/lib/gprpp/tchar.cc +49 -0
  557. data/src/core/lib/gprpp/tchar.h +33 -0
  558. data/src/core/lib/gprpp/time.cc +21 -0
  559. data/src/core/lib/gprpp/time.h +55 -0
  560. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.cc +3 -5
  561. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.h +5 -7
  562. data/src/core/lib/gprpp/validation_errors.cc +61 -0
  563. data/src/core/lib/gprpp/validation_errors.h +110 -0
  564. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  565. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -27
  566. data/src/core/{ext/filters/client_channel → lib/handshaker}/proxy_mapper.h +16 -17
  567. data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
  568. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  569. data/src/core/lib/http/httpcli.cc +12 -24
  570. data/src/core/lib/http/httpcli_security_connector.cc +11 -11
  571. data/src/core/lib/iomgr/call_combiner.cc +0 -34
  572. data/src/core/lib/iomgr/closure.h +0 -10
  573. data/src/core/lib/iomgr/combiner.cc +0 -20
  574. data/src/core/lib/iomgr/endpoint_pair_posix.cc +14 -9
  575. data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
  576. data/src/core/lib/iomgr/error.cc +0 -773
  577. data/src/core/lib/iomgr/error.h +0 -145
  578. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  579. data/src/core/lib/iomgr/ev_epoll1_linux.cc +1 -38
  580. data/src/core/lib/iomgr/ev_poll_posix.cc +19 -26
  581. data/src/core/lib/iomgr/exec_ctx.cc +0 -22
  582. data/src/core/lib/iomgr/exec_ctx.h +7 -31
  583. data/src/core/lib/iomgr/executor.cc +0 -10
  584. data/src/core/lib/iomgr/executor.h +0 -3
  585. data/src/core/lib/iomgr/iocp_windows.cc +1 -2
  586. data/src/core/lib/iomgr/iomgr.cc +6 -8
  587. data/src/core/lib/iomgr/iomgr_fwd.h +1 -0
  588. data/src/core/lib/iomgr/lockfree_event.cc +0 -17
  589. data/src/core/lib/iomgr/pollset.h +1 -1
  590. data/src/core/lib/iomgr/pollset_set.h +0 -1
  591. data/src/core/lib/iomgr/port.h +3 -0
  592. data/src/core/lib/iomgr/resolve_address.h +30 -6
  593. data/src/core/lib/iomgr/resolve_address_impl.h +1 -0
  594. data/src/core/lib/iomgr/resolve_address_posix.cc +43 -8
  595. data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
  596. data/src/core/lib/iomgr/resolve_address_windows.cc +45 -10
  597. data/src/core/lib/iomgr/resolve_address_windows.h +19 -5
  598. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +2 -1
  599. data/src/core/lib/iomgr/socket_utils_common_posix.cc +12 -34
  600. data/src/core/lib/iomgr/socket_utils_posix.cc +83 -1
  601. data/src/core/lib/iomgr/socket_utils_posix.h +98 -6
  602. data/src/core/lib/iomgr/socket_windows.h +0 -2
  603. data/src/core/lib/iomgr/tcp_client.cc +6 -7
  604. data/src/core/lib/iomgr/tcp_client.h +11 -11
  605. data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -6
  606. data/src/core/lib/iomgr/tcp_client_posix.cc +33 -29
  607. data/src/core/lib/iomgr/tcp_client_posix.h +12 -9
  608. data/src/core/lib/iomgr/tcp_client_windows.cc +6 -6
  609. data/src/core/lib/iomgr/tcp_posix.cc +249 -120
  610. data/src/core/lib/iomgr/tcp_posix.h +3 -1
  611. data/src/core/lib/iomgr/tcp_server.cc +5 -4
  612. data/src/core/lib/iomgr/tcp_server.h +9 -6
  613. data/src/core/lib/iomgr/tcp_server_posix.cc +17 -28
  614. data/src/core/lib/iomgr/tcp_server_utils_posix.h +2 -2
  615. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +3 -3
  616. data/src/core/lib/iomgr/tcp_server_windows.cc +6 -7
  617. data/src/core/lib/iomgr/tcp_windows.cc +0 -1
  618. data/src/core/lib/iomgr/tcp_windows.h +0 -1
  619. data/src/core/lib/iomgr/timer_generic.cc +10 -12
  620. data/src/core/lib/iomgr/timer_manager.cc +1 -2
  621. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +0 -2
  622. data/src/core/lib/json/json.h +19 -22
  623. data/src/core/lib/json/json_args.h +34 -0
  624. data/src/core/lib/json/json_object_loader.cc +202 -0
  625. data/src/core/lib/json/json_object_loader.h +598 -0
  626. data/src/core/lib/json/json_reader.cc +86 -62
  627. data/src/core/lib/json/json_util.cc +9 -36
  628. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +3 -44
  629. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +20 -29
  630. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  631. data/src/core/lib/load_balancing/lb_policy_registry.cc +141 -0
  632. data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
  633. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +6 -6
  634. data/src/core/lib/promise/activity.h +57 -10
  635. data/src/core/lib/promise/arena_promise.h +84 -81
  636. data/src/core/lib/promise/context.h +1 -2
  637. data/src/core/lib/promise/detail/basic_seq.h +43 -23
  638. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  639. data/src/core/lib/promise/map.h +0 -1
  640. data/src/core/lib/promise/seq.h +25 -4
  641. data/src/core/lib/promise/sleep.cc +50 -42
  642. data/src/core/lib/promise/sleep.h +32 -23
  643. data/src/core/lib/promise/try_seq.h +26 -6
  644. data/src/core/lib/resolver/resolver.cc +0 -47
  645. data/src/core/lib/resolver/resolver.h +15 -15
  646. data/src/core/lib/resolver/resolver_factory.h +2 -3
  647. data/src/core/lib/resolver/resolver_registry.cc +1 -1
  648. data/src/core/lib/resolver/resolver_registry.h +2 -3
  649. data/src/core/lib/resolver/server_address.cc +11 -15
  650. data/src/core/lib/resolver/server_address.h +4 -8
  651. data/src/core/lib/resource_quota/api.cc +10 -1
  652. data/src/core/lib/resource_quota/api.h +6 -0
  653. data/src/core/lib/resource_quota/arena.cc +19 -1
  654. data/src/core/lib/resource_quota/arena.h +24 -2
  655. data/src/core/lib/resource_quota/memory_quota.cc +143 -19
  656. data/src/core/lib/resource_quota/memory_quota.h +85 -17
  657. data/src/core/lib/resource_quota/periodic_update.cc +78 -0
  658. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  659. data/src/core/lib/security/authorization/evaluate_args.cc +10 -7
  660. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
  661. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  662. data/src/core/lib/security/authorization/matchers.cc +13 -10
  663. data/src/core/lib/security/authorization/rbac_policy.cc +0 -1
  664. data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +3 -3
  665. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
  666. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
  667. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -3
  668. data/src/core/lib/security/credentials/alts/alts_credentials.h +3 -4
  669. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +1 -0
  670. data/src/core/lib/security/credentials/composite/composite_credentials.cc +3 -7
  671. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -4
  672. data/src/core/lib/security/credentials/credentials.h +16 -12
  673. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +33 -27
  674. data/src/core/lib/security/credentials/external/external_account_credentials.cc +34 -24
  675. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
  676. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -6
  677. data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -12
  678. data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -4
  679. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +5 -8
  680. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +35 -32
  681. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -3
  682. data/src/core/lib/security/credentials/iam/iam_credentials.cc +0 -1
  683. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +3 -3
  684. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -4
  685. data/src/core/lib/security/credentials/jwt/json_token.cc +12 -3
  686. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -8
  687. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +14 -15
  688. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
  689. data/src/core/lib/security/credentials/local/local_credentials.cc +3 -4
  690. data/src/core/lib/security/credentials/local/local_credentials.h +3 -4
  691. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +18 -20
  692. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +0 -1
  693. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -21
  694. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +3 -4
  695. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +4 -3
  696. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +10 -2
  697. data/src/core/lib/security/credentials/tls/tls_credentials.cc +13 -25
  698. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -4
  699. data/src/core/lib/security/credentials/tls/tls_utils.cc +3 -1
  700. data/src/core/lib/security/credentials/xds/xds_credentials.cc +13 -30
  701. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  702. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -18
  703. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +26 -38
  704. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  705. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
  706. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +6 -5
  707. data/src/core/lib/security/security_connector/local/local_security_connector.cc +13 -11
  708. data/src/core/lib/security/security_connector/local/local_security_connector.h +2 -2
  709. data/src/core/lib/security/security_connector/security_connector.h +5 -3
  710. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +5 -4
  711. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +5 -5
  712. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +5 -5
  713. data/src/core/lib/security/transport/auth_filters.h +1 -1
  714. data/src/core/lib/security/transport/client_auth_filter.cc +15 -5
  715. data/src/core/lib/security/transport/secure_endpoint.cc +0 -4
  716. data/src/core/lib/security/transport/security_handshaker.cc +32 -44
  717. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  718. data/src/core/lib/service_config/service_config.h +11 -0
  719. data/src/core/lib/service_config/service_config_impl.cc +98 -97
  720. data/src/core/lib/service_config/service_config_impl.h +11 -13
  721. data/src/core/lib/service_config/service_config_parser.cc +26 -27
  722. data/src/core/lib/service_config/service_config_parser.h +10 -22
  723. data/src/core/lib/slice/percent_encoding.cc +4 -13
  724. data/src/core/lib/slice/slice.cc +10 -4
  725. data/src/core/lib/surface/call.cc +9 -13
  726. data/src/core/lib/surface/channel.cc +9 -8
  727. data/src/core/lib/surface/channel.h +1 -1
  728. data/src/core/lib/surface/completion_queue.cc +16 -30
  729. data/src/core/lib/surface/completion_queue.h +1 -4
  730. data/src/core/lib/surface/completion_queue_factory.cc +5 -0
  731. data/src/core/lib/surface/init.cc +17 -16
  732. data/src/core/lib/surface/init_internally.cc +24 -0
  733. data/src/core/lib/surface/init_internally.h +28 -0
  734. data/src/core/lib/surface/lame_client.cc +2 -3
  735. data/src/core/lib/surface/lame_client.h +1 -1
  736. data/src/core/lib/surface/server.cc +8 -19
  737. data/src/core/lib/surface/server.h +11 -13
  738. data/src/core/lib/surface/validate_metadata.cc +4 -14
  739. data/src/core/lib/surface/version.cc +2 -2
  740. data/src/core/lib/transport/bdp_estimator.cc +1 -3
  741. data/src/core/lib/transport/connectivity_state.cc +0 -1
  742. data/src/core/lib/transport/connectivity_state.h +1 -1
  743. data/src/core/lib/transport/error_utils.cc +0 -36
  744. data/src/core/lib/transport/handshaker.cc +7 -9
  745. data/src/core/lib/transport/handshaker.h +4 -5
  746. data/src/core/lib/transport/handshaker_factory.h +2 -3
  747. data/src/core/lib/transport/handshaker_registry.cc +2 -1
  748. data/src/core/lib/transport/handshaker_registry.h +2 -4
  749. data/src/core/lib/transport/http_connect_handshaker.cc +16 -16
  750. data/src/core/lib/transport/metadata_batch.cc +7 -3
  751. data/src/core/lib/transport/metadata_batch.h +61 -14
  752. data/src/core/lib/transport/parsed_metadata.h +4 -3
  753. data/src/core/lib/transport/status_conversion.cc +1 -3
  754. data/src/core/lib/transport/tcp_connect_handshaker.cc +20 -22
  755. data/src/core/lib/transport/transport.h +0 -8
  756. data/src/core/lib/transport/transport_impl.h +0 -1
  757. data/src/core/plugin_registry/grpc_plugin_registry.cc +23 -46
  758. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +13 -25
  759. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +40 -21
  760. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  761. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +14 -7
  762. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  763. data/src/core/tsi/fake_transport_security.cc +53 -30
  764. data/src/core/tsi/local_transport_security.cc +9 -5
  765. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +10 -1
  766. data/src/core/tsi/ssl_transport_security.cc +47 -23
  767. data/src/core/tsi/transport_security.cc +18 -6
  768. data/src/core/tsi/transport_security.h +2 -1
  769. data/src/core/tsi/transport_security_interface.h +17 -5
  770. data/src/ruby/ext/grpc/extconf.rb +2 -0
  771. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  772. data/src/ruby/lib/grpc/version.rb +1 -1
  773. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  774. data/src/ruby/spec/channel_spec.rb +5 -0
  775. data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
  776. data/src/ruby/spec/user_agent_spec.rb +1 -1
  777. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  778. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  779. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  780. data/third_party/upb/upb/arena.c +277 -0
  781. data/third_party/upb/upb/arena.h +225 -0
  782. data/third_party/upb/upb/array.c +114 -0
  783. data/third_party/upb/upb/array.h +83 -0
  784. data/third_party/upb/upb/collections.h +36 -0
  785. data/third_party/upb/upb/decode.c +161 -65
  786. data/third_party/upb/upb/decode.h +1 -0
  787. data/third_party/upb/upb/decode_fast.c +1 -1
  788. data/third_party/upb/upb/def.c +10 -2
  789. data/third_party/upb/upb/def.h +8 -1
  790. data/third_party/upb/upb/def.hpp +7 -4
  791. data/third_party/upb/upb/encode.c +29 -20
  792. data/third_party/upb/upb/encode.h +16 -6
  793. data/third_party/upb/upb/extension_registry.c +93 -0
  794. data/third_party/upb/upb/extension_registry.h +84 -0
  795. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  796. data/third_party/upb/upb/internal/table.h +385 -0
  797. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  798. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  799. data/third_party/upb/upb/json_decode.c +1512 -0
  800. data/third_party/upb/upb/json_decode.h +47 -0
  801. data/third_party/upb/upb/json_encode.c +7 -3
  802. data/third_party/upb/upb/json_encode.h +6 -3
  803. data/third_party/upb/upb/map.c +108 -0
  804. data/third_party/upb/upb/map.h +117 -0
  805. data/third_party/upb/upb/message_value.h +66 -0
  806. data/third_party/upb/upb/mini_table.c +1147 -0
  807. data/third_party/upb/upb/mini_table.h +189 -0
  808. data/third_party/upb/upb/mini_table.hpp +112 -0
  809. data/third_party/upb/upb/msg.c +2 -62
  810. data/third_party/upb/upb/msg.h +2 -45
  811. data/third_party/upb/upb/msg_internal.h +28 -22
  812. data/third_party/upb/upb/port_def.inc +2 -1
  813. data/third_party/upb/upb/port_undef.inc +1 -0
  814. data/third_party/upb/upb/reflection.c +2 -159
  815. data/third_party/upb/upb/reflection.h +2 -112
  816. data/third_party/upb/upb/status.c +86 -0
  817. data/third_party/upb/upb/status.h +66 -0
  818. data/third_party/upb/upb/table.c +2 -2
  819. data/third_party/upb/upb/table_internal.h +3 -352
  820. data/third_party/upb/upb/text_encode.c +3 -2
  821. data/third_party/upb/upb/upb.c +4 -290
  822. data/third_party/upb/upb/upb.h +7 -196
  823. metadata +117 -51
  824. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
  825. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -190
  826. data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -70
  827. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -90
  828. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -55
  829. data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
  830. data/src/core/ext/xds/certificate_provider_registry.h +0 -59
  831. data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +0 -123
  832. data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +0 -70
  833. data/src/core/lib/event_engine/promise.h +0 -69
  834. data/src/core/lib/gpr/env_windows.cc +0 -74
  835. data/src/core/lib/gpr/string_windows.h +0 -32
  836. data/src/core/lib/iomgr/error_internal.h +0 -66
  837. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  838. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  839. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  840. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  841. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  842. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  843. data/src/core/lib/profiling/basic_timers.cc +0 -295
  844. data/src/core/lib/profiling/stap_timers.cc +0 -50
  845. data/src/core/lib/profiling/timers.h +0 -94
  846. data/src/core/lib/promise/detail/switch.h +0 -1455
@@ -24,13 +24,13 @@
24
24
 
25
25
  #ifdef GRPC_WINSOCK_SOCKET
26
26
 
27
+ #include <grpc/event_engine/endpoint_config.h>
27
28
  #include <grpc/slice_buffer.h>
28
29
  #include <grpc/support/alloc.h>
29
30
  #include <grpc/support/log.h>
30
31
  #include <grpc/support/log_windows.h>
31
32
 
32
33
  #include "src/core/lib/address_utils/sockaddr_utils.h"
33
- #include "src/core/lib/channel/channel_args.h"
34
34
  #include "src/core/lib/iomgr/iocp_windows.h"
35
35
  #include "src/core/lib/iomgr/sockaddr.h"
36
36
  #include "src/core/lib/iomgr/sockaddr_windows.h"
@@ -38,8 +38,11 @@
38
38
  #include "src/core/lib/iomgr/tcp_client.h"
39
39
  #include "src/core/lib/iomgr/tcp_windows.h"
40
40
  #include "src/core/lib/iomgr/timer.h"
41
+ #include "src/core/lib/resource_quota/api.h"
41
42
  #include "src/core/lib/slice/slice_internal.h"
42
43
 
44
+ using ::grpc_event_engine::experimental::EndpointConfig;
45
+
43
46
  struct async_connect {
44
47
  grpc_closure* on_done;
45
48
  gpr_mu mu;
@@ -50,7 +53,6 @@ struct async_connect {
50
53
  int refs;
51
54
  grpc_closure on_connect;
52
55
  grpc_endpoint** endpoint;
53
- grpc_channel_args* channel_args;
54
56
  };
55
57
 
56
58
  static void async_connect_unlock_and_cleanup(async_connect* ac,
@@ -58,7 +60,6 @@ static void async_connect_unlock_and_cleanup(async_connect* ac,
58
60
  int done = (--ac->refs == 0);
59
61
  gpr_mu_unlock(&ac->mu);
60
62
  if (done) {
61
- grpc_channel_args_destroy(ac->channel_args);
62
63
  gpr_mu_destroy(&ac->mu);
63
64
  delete ac;
64
65
  }
@@ -105,7 +106,7 @@ static void on_connect(void* acp, grpc_error_handle error) {
105
106
  error = GRPC_WSA_ERROR(WSAGetLastError(), "ConnectEx");
106
107
  closesocket(socket->socket);
107
108
  } else {
108
- *ep = grpc_tcp_create(socket, ac->channel_args, ac->addr_name);
109
+ *ep = grpc_tcp_create(socket, ac->addr_name);
109
110
  socket = nullptr;
110
111
  }
111
112
  } else {
@@ -123,7 +124,7 @@ static void on_connect(void* acp, grpc_error_handle error) {
123
124
  notification request for the connection, and one timeout alert. */
124
125
  static int64_t tcp_connect(grpc_closure* on_done, grpc_endpoint** endpoint,
125
126
  grpc_pollset_set* interested_parties,
126
- const grpc_channel_args* channel_args,
127
+ const EndpointConfig& config,
127
128
  const grpc_resolved_address* addr,
128
129
  grpc_core::Timestamp deadline) {
129
130
  SOCKET sock = INVALID_SOCKET;
@@ -208,7 +209,6 @@ static int64_t tcp_connect(grpc_closure* on_done, grpc_endpoint** endpoint,
208
209
  ac->refs = 2;
209
210
  ac->addr_name = addr_uri.value();
210
211
  ac->endpoint = endpoint;
211
- ac->channel_args = grpc_channel_args_copy(channel_args);
212
212
  GRPC_CLOSURE_INIT(&ac->on_connect, on_connect, ac, grpc_schedule_on_exec_ctx);
213
213
 
214
214
  GRPC_CLOSURE_INIT(&ac->on_alarm, on_alarm, ac, grpc_schedule_on_exec_ctx);
@@ -20,6 +20,7 @@
20
20
 
21
21
  #include <grpc/impl/codegen/grpc_types.h>
22
22
 
23
+ #include "src/core/lib/gprpp/global_config_generic.h"
23
24
  #include "src/core/lib/iomgr/port.h"
24
25
 
25
26
  #ifdef GRPC_POSIX_SOCKET_TCP
@@ -47,9 +48,9 @@
47
48
  #include <grpc/support/time.h>
48
49
 
49
50
  #include "src/core/lib/address_utils/sockaddr_utils.h"
50
- #include "src/core/lib/channel/channel_args.h"
51
51
  #include "src/core/lib/debug/stats.h"
52
52
  #include "src/core/lib/debug/trace.h"
53
+ #include "src/core/lib/experiments/experiments.h"
53
54
  #include "src/core/lib/gpr/string.h"
54
55
  #include "src/core/lib/gpr/useful.h"
55
56
  #include "src/core/lib/gprpp/sync.h"
@@ -58,7 +59,6 @@
58
59
  #include "src/core/lib/iomgr/executor.h"
59
60
  #include "src/core/lib/iomgr/socket_utils_posix.h"
60
61
  #include "src/core/lib/iomgr/tcp_posix.h"
61
- #include "src/core/lib/profiling/timers.h"
62
62
  #include "src/core/lib/resource_quota/api.h"
63
63
  #include "src/core/lib/resource_quota/memory_quota.h"
64
64
  #include "src/core/lib/resource_quota/trace.h"
@@ -97,8 +97,6 @@ typedef size_t msg_iovlen_type;
97
97
 
98
98
  extern grpc_core::TraceFlag grpc_tcp_trace;
99
99
 
100
- GPR_GLOBAL_CONFIG_DECLARE_BOOL(grpc_experimental_enable_tcp_frame_size_tuning);
101
-
102
100
  namespace grpc_core {
103
101
 
104
102
  class TcpZerocopySendRecord {
@@ -234,7 +232,11 @@ class TcpZerocopySendCtx {
234
232
  // buffers that were sent with the corresponding call to sendmsg().
235
233
  void NoteSend(TcpZerocopySendRecord* record) {
236
234
  record->Ref();
237
- AssociateSeqWithSendRecord(last_send_, record);
235
+ {
236
+ MutexLock guard(&lock_);
237
+ is_in_write_ = true;
238
+ AssociateSeqWithSendRecordLocked(last_send_, record);
239
+ }
238
240
  ++last_send_;
239
241
  }
240
242
 
@@ -255,8 +257,8 @@ class TcpZerocopySendCtx {
255
257
 
256
258
  // Simply associate this send record (and the underlying sent data buffers)
257
259
  // with the implicit sequence number for this zerocopy sendmsg().
258
- void AssociateSeqWithSendRecord(uint32_t seq, TcpZerocopySendRecord* record) {
259
- MutexLock guard(&lock_);
260
+ void AssociateSeqWithSendRecordLocked(uint32_t seq,
261
+ TcpZerocopySendRecord* record) {
260
262
  ctx_lookup_.emplace(seq, record);
261
263
  }
262
264
 
@@ -314,7 +316,107 @@ class TcpZerocopySendCtx {
314
316
  // zerocopy is not useful for small transfers.
315
317
  size_t threshold_bytes() const { return threshold_bytes_; }
316
318
 
319
+ // Expected to be called by handler reading messages from the err queue.
320
+ // It is used to indicate that some OMem meory is now available. It returns
321
+ // true to tell the caller to mark the file descriptor as immediately
322
+ // writable.
323
+ //
324
+ // If a write is currently in progress on the socket (ie. we have issued a
325
+ // sendmsg() and are about to check its return value) then we set omem state
326
+ // to CHECK to make the sending thread know that some tcp_omem was
327
+ // concurrently freed even if sendmsg() returns ENOBUFS. In this case, since
328
+ // there is already an active send thread, we do not need to mark the
329
+ // socket writeable, so we return false.
330
+ //
331
+ // If there was no write in progress on the socket, and the socket was not
332
+ // marked as FULL, then we need not mark the socket writeable now that some
333
+ // tcp_omem memory is freed since it was not considered as blocked on
334
+ // tcp_omem to begin with. So in this case, return false.
335
+ //
336
+ // But, if a write was not in progress and the omem state was FULL, then we
337
+ // need to mark the socket writeable since it is no longer blocked by
338
+ // tcp_omem. In this case, return true.
339
+ //
340
+ // Please refer to the STATE TRANSITION DIAGRAM below for more details.
341
+ //
342
+ bool UpdateZeroCopyOMemStateAfterFree() {
343
+ MutexLock guard(&lock_);
344
+ if (is_in_write_) {
345
+ zcopy_enobuf_state_ = OMemState::CHECK;
346
+ return false;
347
+ }
348
+ GPR_DEBUG_ASSERT(zcopy_enobuf_state_ != OMemState::CHECK);
349
+ if (zcopy_enobuf_state_ == OMemState::FULL) {
350
+ // A previous sendmsg attempt was blocked by ENOBUFS. Return true to
351
+ // mark the fd as writable so the next write attempt could be made.
352
+ zcopy_enobuf_state_ = OMemState::OPEN;
353
+ return true;
354
+ } else if (zcopy_enobuf_state_ == OMemState::OPEN) {
355
+ // No need to mark the fd as writable because the previous write
356
+ // attempt did not encounter ENOBUFS.
357
+ return false;
358
+ } else {
359
+ // This state should never be reached because it implies that the previous
360
+ // state was CHECK and is_in_write is false. This means that after the
361
+ // previous sendmsg returned and set is_in_write to false, it did
362
+ // not update the z-copy change from CHECK to OPEN.
363
+ GPR_ASSERT(false && "OMem state error!");
364
+ }
365
+ }
366
+
367
+ // Expected to be called by the thread calling sendmsg after the syscall
368
+ // invocation. is complete. If an ENOBUF is seen, it checks if the error
369
+ // handler (Tx0cp completions) has already run and free'ed up some OMem. It
370
+ // returns true indicating that the write can be attempted again immediately.
371
+ // If ENOBUFS was seen but no Tx0cp completions have been received between the
372
+ // sendmsg() and us taking this lock, then tcp_omem is still full from our
373
+ // point of view. Therefore, we do not signal that the socket is writeable
374
+ // with respect to the availability of tcp_omem. Therefore the function
375
+ // returns false. This indicates that another write should not be attempted
376
+ // immediately and the calling thread should wait until the socket is writable
377
+ // again. If ENOBUFS was not seen, then again return false because the next
378
+ // write should be attempted only when the socket is writable again.
379
+ //
380
+ // Please refer to the STATE TRANSITION DIAGRAM below for more details.
381
+ //
382
+ bool UpdateZeroCopyOMemStateAfterSend(bool seen_enobuf) {
383
+ MutexLock guard(&lock_);
384
+ is_in_write_ = false;
385
+ if (seen_enobuf) {
386
+ if (zcopy_enobuf_state_ == OMemState::CHECK) {
387
+ zcopy_enobuf_state_ = OMemState::OPEN;
388
+ return true;
389
+ } else {
390
+ zcopy_enobuf_state_ = OMemState::FULL;
391
+ }
392
+ } else if (zcopy_enobuf_state_ != OMemState::OPEN) {
393
+ zcopy_enobuf_state_ = OMemState::OPEN;
394
+ }
395
+ return false;
396
+ }
397
+
317
398
  private:
399
+ // STATE TRANSITION DIAGRAM
400
+ //
401
+ // sendmsg succeeds Tx-zero copy succeeds and there is no active sendmsg
402
+ // ----<<--+ +------<<-------------------------------------+
403
+ // | | | |
404
+ // | | v sendmsg returns ENOBUFS |
405
+ // +-----> OPEN ------------->>-------------------------> FULL
406
+ // ^ |
407
+ // | |
408
+ // | sendmsg completes |
409
+ // +----<<---------- CHECK <-------<<-------------+
410
+ // Tx-zero copy succeeds and there is
411
+ // an active sendmsg
412
+ //
413
+ enum class OMemState : int8_t {
414
+ OPEN, // Everything is clear and omem is not full.
415
+ FULL, // The last sendmsg() has returned with an errno of ENOBUFS.
416
+ CHECK, // Error queue is read while is_in_write_ was true, so we should
417
+ // check this state after the sendmsg.
418
+ };
419
+
318
420
  TcpZerocopySendRecord* ReleaseSendRecordLocked(uint32_t seq) {
319
421
  auto iter = ctx_lookup_.find(seq);
320
422
  GPR_DEBUG_ASSERT(iter != ctx_lookup_.end());
@@ -351,6 +453,8 @@ class TcpZerocopySendCtx {
351
453
  size_t threshold_bytes_ = kDefaultSendBytesThreshold;
352
454
  std::unordered_map<uint32_t, TcpZerocopySendRecord*> ctx_lookup_;
353
455
  bool memory_limited_ = false;
456
+ bool is_in_write_ = false;
457
+ OMemState zcopy_enobuf_state_;
354
458
  };
355
459
 
356
460
  } // namespace grpc_core
@@ -360,22 +464,20 @@ using grpc_core::TcpZerocopySendRecord;
360
464
 
361
465
  namespace {
362
466
 
363
- bool ExperimentalTcpFrameSizeTuningEnabled() {
364
- static const bool kEnableTcpFrameSizeTuning =
365
- GPR_GLOBAL_CONFIG_GET(grpc_experimental_enable_tcp_frame_size_tuning);
366
- return kEnableTcpFrameSizeTuning;
367
- }
368
-
369
467
  struct grpc_tcp {
370
- grpc_tcp(int max_sends, size_t send_bytes_threshold)
371
- : tcp_zerocopy_send_ctx(max_sends, send_bytes_threshold) {}
468
+ explicit grpc_tcp(const grpc_core::PosixTcpOptions& tcp_options)
469
+ : min_read_chunk_size(tcp_options.tcp_min_read_chunk_size),
470
+ max_read_chunk_size(tcp_options.tcp_max_read_chunk_size),
471
+ tcp_zerocopy_send_ctx(
472
+ tcp_options.tcp_tx_zerocopy_max_simultaneous_sends,
473
+ tcp_options.tcp_tx_zerocopy_send_bytes_threshold) {}
372
474
  grpc_endpoint base;
373
475
  grpc_fd* em_fd;
374
476
  int fd;
375
477
  /* Used by the endpoint read function to distinguish the very first read call
376
478
  * from the rest */
377
479
  bool is_first_read;
378
- bool has_posted_reclaimer;
480
+ bool has_posted_reclaimer ABSL_GUARDED_BY(read_mu) = false;
379
481
  double target_length;
380
482
  double bytes_read_this_round;
381
483
  grpc_core::RefCount refcount;
@@ -383,6 +485,7 @@ struct grpc_tcp {
383
485
 
384
486
  int min_read_chunk_size;
385
487
  int max_read_chunk_size;
488
+ int set_rcvlowat = 0;
386
489
 
387
490
  /* garbage after the last read */
388
491
  grpc_slice_buffer last_read_buffer;
@@ -479,8 +582,7 @@ static void run_poller(void* bp, grpc_error_handle /*error_ignored*/) {
479
582
  }
480
583
  gpr_mu_lock(p->pollset_mu);
481
584
  grpc_core::Timestamp deadline =
482
- grpc_core::ExecCtx::Get()->Now() + grpc_core::Duration::Seconds(10);
483
- GRPC_STATS_INC_TCP_BACKUP_POLLER_POLLS();
585
+ grpc_core::Timestamp::Now() + grpc_core::Duration::Seconds(10);
484
586
  GRPC_LOG_IF_ERROR(
485
587
  "backup_poller:pollset_work",
486
588
  grpc_pollset_work(BACKUP_POLLER_POLLSET(p), nullptr, deadline));
@@ -541,7 +643,6 @@ static void cover_self(grpc_tcp* tcp) {
541
643
  g_backup_poller = p;
542
644
  grpc_pollset_init(BACKUP_POLLER_POLLSET(p), &p->pollset_mu);
543
645
  g_backup_poller_mu->Unlock();
544
- GRPC_STATS_INC_TCP_BACKUP_POLLERS_CREATED();
545
646
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
546
647
  gpr_log(GPR_INFO, "BACKUP_POLLER:%p create", p);
547
648
  }
@@ -687,8 +788,8 @@ static void perform_reclamation(grpc_tcp* tcp)
687
788
  if (tcp->incoming_buffer != nullptr) {
688
789
  grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
689
790
  }
690
- tcp->read_mu.Unlock();
691
791
  tcp->has_posted_reclaimer = false;
792
+ tcp->read_mu.Unlock();
692
793
  }
693
794
 
694
795
  static void maybe_post_reclaimer(grpc_tcp* tcp)
@@ -723,11 +824,54 @@ static void tcp_trace_read(grpc_tcp* tcp, grpc_error_handle error)
723
824
  }
724
825
  }
725
826
 
827
+ static void update_rcvlowat(grpc_tcp* tcp)
828
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(tcp->read_mu) {
829
+ if (!grpc_core::IsTcpRcvLowatEnabled()) return;
830
+
831
+ // TODO(ctiller): Check if supported by OS.
832
+ // TODO(ctiller): Allow some adjustments instead of hardcoding things.
833
+
834
+ static constexpr int kRcvLowatMax = 16 * 1024 * 1024;
835
+ static constexpr int kRcvLowatThreshold = 16 * 1024;
836
+
837
+ int remaining = std::min(static_cast<int>(tcp->incoming_buffer->length),
838
+ tcp->min_progress_size);
839
+ remaining = std::min(remaining, kRcvLowatMax);
840
+
841
+ // Setting SO_RCVLOWAT for small quantities does not save on CPU.
842
+ if (remaining < kRcvLowatThreshold) {
843
+ remaining = 0;
844
+ }
845
+
846
+ // If zerocopy is off, wake shortly before the full RPC is here. More can
847
+ // show up partway through recvmsg() since it takes a while to copy data.
848
+ // So an early wakeup aids latency.
849
+ if (!tcp->tcp_zerocopy_send_ctx.enabled() && remaining > 0) {
850
+ remaining -= kRcvLowatThreshold;
851
+ }
852
+
853
+ // We still do not know the RPC size. Do not set SO_RCVLOWAT.
854
+ if (tcp->set_rcvlowat <= 1 && remaining <= 1) return;
855
+
856
+ // Previous value is still valid. No change needed in SO_RCVLOWAT.
857
+ if (tcp->set_rcvlowat == remaining) {
858
+ return;
859
+ }
860
+ if (setsockopt(tcp->fd, SOL_SOCKET, SO_RCVLOWAT, &remaining,
861
+ sizeof(remaining)) != 0) {
862
+ gpr_log(GPR_ERROR, "%s",
863
+ absl::StrCat("Cannot set SO_RCVLOWAT on fd=", tcp->fd,
864
+ " err=", strerror(errno))
865
+ .c_str());
866
+ return;
867
+ }
868
+ tcp->set_rcvlowat = remaining;
869
+ }
870
+
726
871
  /* Returns true if data available to read or error other than EAGAIN. */
727
- #define MAX_READ_IOVEC 4
872
+ #define MAX_READ_IOVEC 64
728
873
  static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
729
874
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(tcp->read_mu) {
730
- GPR_TIMER_SCOPE("tcp_do_read", 0);
731
875
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
732
876
  gpr_log(GPR_INFO, "TCP:%p do_read", tcp);
733
877
  }
@@ -775,7 +919,6 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
775
919
  GRPC_STATS_INC_TCP_READ_OFFER_IOV_SIZE(tcp->incoming_buffer->count);
776
920
 
777
921
  do {
778
- GPR_TIMER_SCOPE("recvmsg", 0);
779
922
  GRPC_STATS_INC_SYSCALL_READ();
780
923
  read_bytes = recvmsg(tcp->fd, &msg, 0);
781
924
  } while (read_bytes < 0 && errno == EINTR);
@@ -904,31 +1047,66 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
904
1047
 
905
1048
  static void maybe_make_read_slices(grpc_tcp* tcp)
906
1049
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(tcp->read_mu) {
907
- if (tcp->incoming_buffer->length <
908
- static_cast<size_t>(tcp->min_progress_size) &&
909
- tcp->incoming_buffer->count < MAX_READ_IOVEC) {
910
- if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
911
- gpr_log(GPR_INFO,
912
- "TCP:%p alloc_slices; min_chunk=%d max_chunk=%d target=%lf "
913
- "buf_len=%" PRIdPTR,
914
- tcp, tcp->min_read_chunk_size, tcp->max_read_chunk_size,
915
- tcp->target_length, tcp->incoming_buffer->length);
1050
+ if (grpc_core::IsTcpReadChunksEnabled()) {
1051
+ static const int kBigAlloc = 64 * 1024;
1052
+ static const int kSmallAlloc = 8 * 1024;
1053
+ if (tcp->incoming_buffer->length <
1054
+ static_cast<size_t>(tcp->min_progress_size)) {
1055
+ size_t allocate_length = tcp->min_progress_size;
1056
+ const size_t target_length = static_cast<size_t>(tcp->target_length);
1057
+ // If memory pressure is low and we think there will be more than
1058
+ // min_progress_size bytes to read, allocate a bit more.
1059
+ const bool low_memory_pressure =
1060
+ tcp->memory_owner.GetPressureInfo().pressure_control_value < 0.8;
1061
+ if (low_memory_pressure && target_length > allocate_length) {
1062
+ allocate_length = target_length;
1063
+ }
1064
+ int extra_wanted =
1065
+ allocate_length - static_cast<int>(tcp->incoming_buffer->length);
1066
+ if (extra_wanted >=
1067
+ (low_memory_pressure ? kSmallAlloc * 3 / 2 : kBigAlloc)) {
1068
+ while (extra_wanted > 0) {
1069
+ extra_wanted -= kBigAlloc;
1070
+ grpc_slice_buffer_add_indexed(tcp->incoming_buffer,
1071
+ tcp->memory_owner.MakeSlice(kBigAlloc));
1072
+ GRPC_STATS_INC_TCP_READ_ALLOC_64K();
1073
+ }
1074
+ } else {
1075
+ while (extra_wanted > 0) {
1076
+ extra_wanted -= kSmallAlloc;
1077
+ grpc_slice_buffer_add_indexed(
1078
+ tcp->incoming_buffer, tcp->memory_owner.MakeSlice(kSmallAlloc));
1079
+ GRPC_STATS_INC_TCP_READ_ALLOC_8K();
1080
+ }
1081
+ }
1082
+ maybe_post_reclaimer(tcp);
1083
+ }
1084
+ } else {
1085
+ if (tcp->incoming_buffer->length <
1086
+ static_cast<size_t>(tcp->min_progress_size) &&
1087
+ tcp->incoming_buffer->count < MAX_READ_IOVEC) {
1088
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1089
+ gpr_log(GPR_INFO,
1090
+ "TCP:%p alloc_slices; min_chunk=%d max_chunk=%d target=%lf "
1091
+ "buf_len=%" PRIdPTR,
1092
+ tcp, tcp->min_read_chunk_size, tcp->max_read_chunk_size,
1093
+ tcp->target_length, tcp->incoming_buffer->length);
1094
+ }
1095
+ int target_length = std::max(static_cast<int>(tcp->target_length),
1096
+ tcp->min_progress_size);
1097
+ int extra_wanted =
1098
+ target_length - static_cast<int>(tcp->incoming_buffer->length);
1099
+ int min_read_chunk_size =
1100
+ std::max(tcp->min_read_chunk_size, tcp->min_progress_size);
1101
+ int max_read_chunk_size =
1102
+ std::max(tcp->max_read_chunk_size, tcp->min_progress_size);
1103
+ grpc_slice slice = tcp->memory_owner.MakeSlice(grpc_core::MemoryRequest(
1104
+ min_read_chunk_size,
1105
+ grpc_core::Clamp(extra_wanted, min_read_chunk_size,
1106
+ max_read_chunk_size)));
1107
+ grpc_slice_buffer_add_indexed(tcp->incoming_buffer, slice);
1108
+ maybe_post_reclaimer(tcp);
916
1109
  }
917
- int target_length =
918
- std::max(static_cast<int>(tcp->target_length), tcp->min_progress_size);
919
- int extra_wanted =
920
- target_length - static_cast<int>(tcp->incoming_buffer->length);
921
- int min_read_chunk_size =
922
- std::max(tcp->min_read_chunk_size, tcp->min_progress_size);
923
- int max_read_chunk_size =
924
- std::max(tcp->max_read_chunk_size, tcp->min_progress_size);
925
- grpc_slice_buffer_add_indexed(
926
- tcp->incoming_buffer,
927
- tcp->memory_owner.MakeSlice(grpc_core::MemoryRequest(
928
- min_read_chunk_size,
929
- grpc_core::Clamp(extra_wanted, min_read_chunk_size,
930
- max_read_chunk_size))));
931
- maybe_post_reclaimer(tcp);
932
1110
  }
933
1111
  }
934
1112
 
@@ -944,6 +1122,7 @@ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error) {
944
1122
  maybe_make_read_slices(tcp);
945
1123
  if (!tcp_do_read(tcp, &tcp_read_error)) {
946
1124
  /* We've consumed the edge, request a new one */
1125
+ update_rcvlowat(tcp);
947
1126
  tcp->read_mu.Unlock();
948
1127
  notify_on_read(tcp);
949
1128
  return;
@@ -973,19 +1152,23 @@ static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
973
1152
  tcp->frame_size_tuning_enabled ? min_progress_size : 1;
974
1153
  grpc_slice_buffer_reset_and_unref_internal(incoming_buffer);
975
1154
  grpc_slice_buffer_swap(incoming_buffer, &tcp->last_read_buffer);
976
- tcp->read_mu.Unlock();
977
1155
  TCP_REF(tcp, "read");
978
1156
  if (tcp->is_first_read) {
1157
+ update_rcvlowat(tcp);
1158
+ tcp->read_mu.Unlock();
979
1159
  /* Endpoint read called for the very first time. Register read callback with
980
1160
  * the polling engine */
981
1161
  tcp->is_first_read = false;
982
1162
  notify_on_read(tcp);
983
1163
  } else if (!urgent && tcp->inq == 0) {
1164
+ update_rcvlowat(tcp);
1165
+ tcp->read_mu.Unlock();
984
1166
  /* Upper layer asked to read more but we know there is no pending data
985
1167
  * to read from previous reads. So, wait for POLLIN.
986
1168
  */
987
1169
  notify_on_read(tcp);
988
1170
  } else {
1171
+ tcp->read_mu.Unlock();
989
1172
  /* Not the first time. We may or may not have more bytes available. In any
990
1173
  * case call tcp->read_done_closure (i.e tcp_handle_read()) which does the
991
1174
  * right thing (i.e calls tcp_do_read() which either reads the available
@@ -1000,7 +1183,6 @@ static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
1000
1183
  * of bytes sent. */
1001
1184
  ssize_t tcp_send(int fd, const struct msghdr* msg, int* saved_errno,
1002
1185
  int additional_flags = 0) {
1003
- GPR_TIMER_SCOPE("sendmsg", 1);
1004
1186
  ssize_t sent_length;
1005
1187
  do {
1006
1188
  /* TODO(klempner): Cork if this is a partial write */
@@ -1126,6 +1308,9 @@ static void process_zerocopy(grpc_tcp* tcp, struct cmsghdr* cmsg) {
1126
1308
  GPR_DEBUG_ASSERT(record);
1127
1309
  UnrefMaybePutZerocopySendRecord(tcp, record, seq, "CALLBACK RCVD");
1128
1310
  }
1311
+ if (tcp->tcp_zerocopy_send_ctx.UpdateZeroCopyOMemStateAfterFree()) {
1312
+ grpc_fd_set_writable(tcp->em_fd);
1313
+ }
1129
1314
  }
1130
1315
 
1131
1316
  // Whether the cmsg received from error queue is of the IPv4 or IPv6 levels.
@@ -1436,10 +1621,14 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
1436
1621
  GRPC_STATS_INC_TCP_WRITE_IOV_SIZE(iov_size);
1437
1622
  sent_length = tcp_send(tcp->fd, &msg, &saved_errno, MSG_ZEROCOPY);
1438
1623
  }
1624
+ if (tcp->tcp_zerocopy_send_ctx.UpdateZeroCopyOMemStateAfterSend(
1625
+ saved_errno == ENOBUFS)) {
1626
+ grpc_fd_set_writable(tcp->em_fd);
1627
+ }
1439
1628
  if (sent_length < 0) {
1440
1629
  // If this particular send failed, drop ref taken earlier in this method.
1441
1630
  tcp->tcp_zerocopy_send_ctx.UndoSend();
1442
- if (saved_errno == EAGAIN) {
1631
+ if (saved_errno == EAGAIN || saved_errno == ENOBUFS) {
1443
1632
  record->UnwindIfThrottled(unwind_slice_idx, unwind_byte_idx);
1444
1633
  return false;
1445
1634
  } else if (saved_errno == EPIPE) {
@@ -1547,7 +1736,7 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
1547
1736
  }
1548
1737
 
1549
1738
  if (sent_length < 0) {
1550
- if (saved_errno == EAGAIN) {
1739
+ if (saved_errno == EAGAIN || saved_errno == ENOBUFS) {
1551
1740
  tcp->outgoing_byte_idx = unwind_byte_idx;
1552
1741
  // unref all and forget about all slices that have been written to this
1553
1742
  // point
@@ -1609,7 +1798,6 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
1609
1798
  TCP_UNREF(tcp, "write");
1610
1799
  return;
1611
1800
  }
1612
-
1613
1801
  bool flush_result =
1614
1802
  tcp->current_zerocopy_send != nullptr
1615
1803
  ? tcp_flush_zerocopy(tcp, tcp->current_zerocopy_send, &error)
@@ -1636,7 +1824,6 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
1636
1824
 
1637
1825
  static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
1638
1826
  grpc_closure* cb, void* arg, int /*max_frame_size*/) {
1639
- GPR_TIMER_SCOPE("tcp_write", 0);
1640
1827
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1641
1828
  grpc_error_handle error = GRPC_ERROR_NONE;
1642
1829
  TcpZerocopySendRecord* zerocopy_send_record = nullptr;
@@ -1757,72 +1944,16 @@ static const grpc_endpoint_vtable vtable = {tcp_read,
1757
1944
  tcp_get_fd,
1758
1945
  tcp_can_track_err};
1759
1946
 
1760
- #define MAX_CHUNK_SIZE (32 * 1024 * 1024)
1761
-
1762
1947
  grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
1763
- const grpc_channel_args* channel_args,
1948
+ const grpc_core::PosixTcpOptions& options,
1764
1949
  absl::string_view peer_string) {
1765
- static constexpr bool kZerocpTxEnabledDefault = false;
1766
- int tcp_read_chunk_size = GRPC_TCP_DEFAULT_READ_SLICE_SIZE;
1767
- int tcp_max_read_chunk_size = 4 * 1024 * 1024;
1768
- int tcp_min_read_chunk_size = 256;
1769
- bool tcp_tx_zerocopy_enabled = kZerocpTxEnabledDefault;
1770
- int tcp_tx_zerocopy_send_bytes_thresh =
1771
- grpc_core::TcpZerocopySendCtx::kDefaultSendBytesThreshold;
1772
- int tcp_tx_zerocopy_max_simult_sends =
1773
- grpc_core::TcpZerocopySendCtx::kDefaultMaxSends;
1774
- if (channel_args != nullptr) {
1775
- for (size_t i = 0; i < channel_args->num_args; i++) {
1776
- if (0 ==
1777
- strcmp(channel_args->args[i].key, GRPC_ARG_TCP_READ_CHUNK_SIZE)) {
1778
- grpc_integer_options options = {tcp_read_chunk_size, 1, MAX_CHUNK_SIZE};
1779
- tcp_read_chunk_size =
1780
- grpc_channel_arg_get_integer(&channel_args->args[i], options);
1781
- } else if (0 == strcmp(channel_args->args[i].key,
1782
- GRPC_ARG_TCP_MIN_READ_CHUNK_SIZE)) {
1783
- grpc_integer_options options = {tcp_read_chunk_size, 1, MAX_CHUNK_SIZE};
1784
- tcp_min_read_chunk_size =
1785
- grpc_channel_arg_get_integer(&channel_args->args[i], options);
1786
- } else if (0 == strcmp(channel_args->args[i].key,
1787
- GRPC_ARG_TCP_MAX_READ_CHUNK_SIZE)) {
1788
- grpc_integer_options options = {tcp_read_chunk_size, 1, MAX_CHUNK_SIZE};
1789
- tcp_max_read_chunk_size =
1790
- grpc_channel_arg_get_integer(&channel_args->args[i], options);
1791
- } else if (0 == strcmp(channel_args->args[i].key,
1792
- GRPC_ARG_TCP_TX_ZEROCOPY_ENABLED)) {
1793
- tcp_tx_zerocopy_enabled = grpc_channel_arg_get_bool(
1794
- &channel_args->args[i], kZerocpTxEnabledDefault);
1795
- } else if (0 == strcmp(channel_args->args[i].key,
1796
- GRPC_ARG_TCP_TX_ZEROCOPY_SEND_BYTES_THRESHOLD)) {
1797
- grpc_integer_options options = {
1798
- grpc_core::TcpZerocopySendCtx::kDefaultSendBytesThreshold, 0,
1799
- INT_MAX};
1800
- tcp_tx_zerocopy_send_bytes_thresh =
1801
- grpc_channel_arg_get_integer(&channel_args->args[i], options);
1802
- } else if (0 == strcmp(channel_args->args[i].key,
1803
- GRPC_ARG_TCP_TX_ZEROCOPY_MAX_SIMULT_SENDS)) {
1804
- grpc_integer_options options = {
1805
- grpc_core::TcpZerocopySendCtx::kDefaultMaxSends, 0, INT_MAX};
1806
- tcp_tx_zerocopy_max_simult_sends =
1807
- grpc_channel_arg_get_integer(&channel_args->args[i], options);
1808
- }
1809
- }
1810
- }
1811
-
1812
- if (tcp_min_read_chunk_size > tcp_max_read_chunk_size) {
1813
- tcp_min_read_chunk_size = tcp_max_read_chunk_size;
1814
- }
1815
- tcp_read_chunk_size = grpc_core::Clamp(
1816
- tcp_read_chunk_size, tcp_min_read_chunk_size, tcp_max_read_chunk_size);
1817
-
1818
- grpc_tcp* tcp = new grpc_tcp(tcp_tx_zerocopy_max_simult_sends,
1819
- tcp_tx_zerocopy_send_bytes_thresh);
1950
+ grpc_tcp* tcp = new grpc_tcp(options);
1820
1951
  tcp->base.vtable = &vtable;
1821
1952
  tcp->peer_string = std::string(peer_string);
1822
1953
  tcp->fd = grpc_fd_wrapped_fd(em_fd);
1823
- tcp->memory_owner = grpc_core::ResourceQuotaFromChannelArgs(channel_args)
1824
- ->memory_quota()
1825
- ->CreateMemoryOwner(peer_string);
1954
+ GPR_ASSERT(options.resource_quota != nullptr);
1955
+ tcp->memory_owner =
1956
+ options.resource_quota->memory_quota()->CreateMemoryOwner(peer_string);
1826
1957
  tcp->self_reservation = tcp->memory_owner.MakeReservation(sizeof(grpc_tcp));
1827
1958
  grpc_resolved_address resolved_local_addr;
1828
1959
  memset(&resolved_local_addr, 0, sizeof(resolved_local_addr));
@@ -1841,20 +1972,18 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
1841
1972
  tcp->current_zerocopy_send = nullptr;
1842
1973
  tcp->release_fd_cb = nullptr;
1843
1974
  tcp->release_fd = nullptr;
1844
- tcp->target_length = static_cast<double>(tcp_read_chunk_size);
1845
- tcp->min_read_chunk_size = tcp_min_read_chunk_size;
1846
- tcp->max_read_chunk_size = tcp_max_read_chunk_size;
1975
+ tcp->target_length = static_cast<double>(options.tcp_read_chunk_size);
1847
1976
  tcp->bytes_read_this_round = 0;
1848
1977
  /* Will be set to false by the very first endpoint read function */
1849
1978
  tcp->is_first_read = true;
1850
- tcp->has_posted_reclaimer = false;
1851
1979
  tcp->bytes_counter = -1;
1852
1980
  tcp->socket_ts_enabled = false;
1853
1981
  tcp->ts_capable = true;
1854
1982
  tcp->outgoing_buffer_arg = nullptr;
1855
- tcp->frame_size_tuning_enabled = ExperimentalTcpFrameSizeTuningEnabled();
1983
+ tcp->frame_size_tuning_enabled = grpc_core::IsTcpFrameSizeTuningEnabled();
1856
1984
  tcp->min_progress_size = 1;
1857
- if (tcp_tx_zerocopy_enabled && !tcp->tcp_zerocopy_send_ctx.memory_limited()) {
1985
+ if (options.tcp_tx_zero_copy_enabled &&
1986
+ !tcp->tcp_zerocopy_send_ctx.memory_limited()) {
1858
1987
  #ifdef GRPC_LINUX_ERRQUEUE
1859
1988
  const int enable = 1;
1860
1989
  auto err =
@@ -36,12 +36,14 @@
36
36
  #include "src/core/lib/iomgr/endpoint.h"
37
37
  #include "src/core/lib/iomgr/ev_posix.h"
38
38
  #include "src/core/lib/iomgr/port.h"
39
+ #include "src/core/lib/iomgr/socket_utils_posix.h"
39
40
 
40
41
  extern grpc_core::TraceFlag grpc_tcp_trace;
41
42
 
42
43
  /// Create a tcp endpoint given a file desciptor and a read slice size.
43
44
  /// Takes ownership of \a fd. Takes ownership of the \a slice_allocator.
44
- grpc_endpoint* grpc_tcp_create(grpc_fd* fd, const grpc_channel_args* args,
45
+ grpc_endpoint* grpc_tcp_create(grpc_fd* fd,
46
+ const grpc_core::PosixTcpOptions& options,
45
47
  absl::string_view peer_string);
46
48
 
47
49
  /// Return the tcp endpoint's fd, or -1 if this is not available. Does not