grpc 1.46.3 → 1.53.1

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 (1803) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +419 -241
  3. data/include/grpc/byte_buffer.h +76 -1
  4. data/include/grpc/byte_buffer_reader.h +19 -1
  5. data/include/grpc/compression.h +2 -2
  6. data/include/grpc/event_engine/endpoint_config.h +11 -5
  7. data/include/grpc/event_engine/event_engine.h +129 -39
  8. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
  9. data/include/grpc/event_engine/internal/slice_cast.h +67 -0
  10. data/include/grpc/event_engine/memory_allocator.h +1 -16
  11. data/include/grpc/event_engine/port.h +1 -1
  12. data/include/grpc/event_engine/slice.h +306 -0
  13. data/include/grpc/event_engine/slice_buffer.h +159 -0
  14. data/include/grpc/fork.h +25 -1
  15. data/include/grpc/grpc.h +4 -14
  16. data/include/grpc/grpc_posix.h +1 -1
  17. data/include/grpc/grpc_security.h +11 -0
  18. data/include/grpc/impl/codegen/atm.h +3 -71
  19. data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -67
  20. data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -61
  21. data/include/grpc/impl/codegen/atm_windows.h +3 -108
  22. data/include/grpc/impl/codegen/byte_buffer.h +4 -78
  23. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
  24. data/include/grpc/impl/codegen/compression_types.h +5 -83
  25. data/include/grpc/impl/codegen/connectivity_state.h +5 -21
  26. data/include/grpc/impl/codegen/fork.h +4 -25
  27. data/include/grpc/impl/codegen/gpr_types.h +4 -35
  28. data/include/grpc/impl/codegen/grpc_types.h +5 -791
  29. data/include/grpc/impl/codegen/log.h +3 -86
  30. data/include/grpc/impl/codegen/port_platform.h +3 -699
  31. data/include/grpc/impl/codegen/propagation_bits.h +3 -28
  32. data/include/grpc/impl/codegen/slice.h +4 -107
  33. data/include/grpc/impl/codegen/status.h +4 -131
  34. data/include/grpc/impl/codegen/sync.h +3 -42
  35. data/include/grpc/impl/codegen/sync_abseil.h +3 -12
  36. data/include/grpc/impl/codegen/sync_custom.h +3 -14
  37. data/include/grpc/impl/codegen/sync_generic.h +3 -25
  38. data/include/grpc/impl/codegen/sync_posix.h +3 -28
  39. data/include/grpc/impl/codegen/sync_windows.h +3 -16
  40. data/include/grpc/impl/compression_types.h +109 -0
  41. data/include/grpc/impl/connectivity_state.h +47 -0
  42. data/include/grpc/impl/grpc_types.h +836 -0
  43. data/include/grpc/impl/propagation_bits.h +54 -0
  44. data/include/grpc/impl/slice_type.h +112 -0
  45. data/include/grpc/load_reporting.h +1 -1
  46. data/include/grpc/module.modulemap +5 -1
  47. data/include/grpc/slice.h +1 -1
  48. data/include/grpc/status.h +131 -1
  49. data/include/grpc/support/atm.h +70 -1
  50. data/include/grpc/support/atm_gcc_atomic.h +59 -1
  51. data/include/grpc/support/atm_gcc_sync.h +58 -1
  52. data/include/grpc/support/atm_windows.h +105 -1
  53. data/include/grpc/support/log.h +87 -1
  54. data/include/grpc/support/log_windows.h +1 -1
  55. data/include/grpc/support/port_platform.h +767 -1
  56. data/include/grpc/support/string_util.h +1 -1
  57. data/include/grpc/support/sync.h +35 -2
  58. data/include/grpc/support/sync_abseil.h +11 -1
  59. data/include/grpc/support/sync_custom.h +13 -1
  60. data/include/grpc/support/sync_generic.h +24 -1
  61. data/include/grpc/support/sync_posix.h +27 -1
  62. data/include/grpc/support/sync_windows.h +15 -1
  63. data/include/grpc/support/time.h +31 -6
  64. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +148 -0
  65. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
  66. data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
  67. data/src/core/ext/filters/census/grpc_context.cc +19 -17
  68. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +67 -61
  69. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +26 -6
  70. data/src/core/ext/filters/channel_idle/idle_filter_state.h +6 -4
  71. data/src/core/ext/filters/client_channel/backend_metric.cc +19 -12
  72. data/src/core/ext/filters/client_channel/backend_metric.h +21 -11
  73. data/src/core/ext/filters/client_channel/backup_poller.cc +34 -34
  74. data/src/core/ext/filters/client_channel/backup_poller.h +26 -28
  75. data/src/core/ext/filters/client_channel/channel_connectivity.cc +89 -44
  76. data/src/core/ext/filters/client_channel/client_channel.cc +401 -451
  77. data/src/core/ext/filters/client_channel/client_channel.h +68 -26
  78. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -23
  79. data/src/core/ext/filters/client_channel/client_channel_channelz.h +33 -23
  80. data/src/core/ext/filters/client_channel/client_channel_factory.cc +19 -43
  81. data/src/core/ext/filters/client_channel/client_channel_factory.h +11 -11
  82. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +22 -47
  83. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  84. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +33 -27
  85. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  86. data/src/core/ext/filters/client_channel/config_selector.h +29 -23
  87. data/src/core/ext/filters/client_channel/connector.h +19 -10
  88. data/src/core/ext/filters/client_channel/dynamic_filters.cc +40 -54
  89. data/src/core/ext/filters/client_channel/dynamic_filters.h +20 -11
  90. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  91. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +24 -21
  92. data/src/core/ext/filters/client_channel/health/health_check_client.cc +16 -4
  93. data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -3
  94. data/src/core/ext/filters/client_channel/http_proxy.cc +100 -112
  95. data/src/core/ext/filters/client_channel/http_proxy.h +38 -31
  96. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +39 -0
  97. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +8 -5
  98. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +4 -3
  99. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  100. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +37 -16
  101. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +18 -13
  102. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +71 -131
  103. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +41 -24
  104. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +410 -375
  105. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +26 -27
  106. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +15 -3
  107. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +9 -7
  108. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
  109. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +27 -22
  110. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +28 -19
  111. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +26 -25
  112. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +338 -0
  113. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  114. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
  115. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1129 -0
  116. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +94 -0
  117. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +174 -180
  118. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +366 -407
  119. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +491 -405
  120. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +19 -9
  121. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +619 -634
  122. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +261 -234
  123. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +165 -143
  124. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +128 -0
  125. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
  126. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +972 -0
  127. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +223 -220
  128. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +214 -153
  129. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  130. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +19 -15
  131. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
  132. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +178 -256
  133. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +199 -210
  134. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +382 -368
  135. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +819 -0
  136. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +67 -0
  137. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +369 -0
  138. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  139. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +22 -21
  140. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +34 -19
  141. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +531 -163
  142. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +50 -44
  143. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +31 -30
  144. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +89 -84
  145. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +300 -209
  146. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +82 -61
  147. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
  148. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +20 -19
  149. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  150. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +22 -22
  151. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +54 -22
  152. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +21 -34
  153. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +19 -5
  154. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +135 -63
  155. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +136 -68
  156. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +29 -14
  157. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +21 -27
  158. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +368 -305
  159. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +6 -4
  160. data/src/core/ext/filters/client_channel/retry_filter.cc +166 -163
  161. data/src/core/ext/filters/client_channel/retry_filter.h +4 -3
  162. data/src/core/ext/filters/client_channel/retry_service_config.cc +197 -229
  163. data/src/core/ext/filters/client_channel/retry_service_config.h +29 -26
  164. data/src/core/ext/filters/client_channel/retry_throttle.cc +28 -37
  165. data/src/core/ext/filters/client_channel/retry_throttle.h +36 -29
  166. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +34 -17
  167. data/src/core/ext/filters/client_channel/subchannel.cc +332 -384
  168. data/src/core/ext/filters/client_channel/subchannel.h +112 -82
  169. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  170. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +17 -77
  171. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +41 -47
  172. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +34 -108
  173. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +20 -12
  174. data/src/core/ext/filters/deadline/deadline_filter.cc +94 -76
  175. data/src/core/ext/filters/deadline/deadline_filter.h +14 -12
  176. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +44 -22
  177. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +20 -11
  178. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  179. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +34 -13
  180. data/src/core/ext/filters/http/client/http_client_filter.cc +76 -54
  181. data/src/core/ext/filters/http/client/http_client_filter.h +36 -23
  182. data/src/core/ext/filters/http/client_authority_filter.cc +33 -38
  183. data/src/core/ext/filters/http/client_authority_filter.h +27 -24
  184. data/src/core/ext/filters/http/http_filters_plugin.cc +46 -55
  185. data/src/core/ext/filters/http/message_compress/compression_filter.cc +307 -0
  186. data/src/core/ext/filters/http/message_compress/compression_filter.h +139 -0
  187. data/src/core/ext/filters/http/server/http_server_filter.cc +111 -271
  188. data/src/core/ext/filters/http/server/http_server_filter.h +58 -24
  189. data/src/core/ext/filters/message_size/message_size_filter.cc +117 -137
  190. data/src/core/ext/filters/message_size/message_size_filter.h +34 -17
  191. data/src/core/ext/filters/rbac/rbac_filter.cc +29 -16
  192. data/src/core/ext/filters/rbac/rbac_filter.h +11 -3
  193. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +736 -523
  194. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +18 -7
  195. data/src/core/ext/filters/server_config_selector/server_config_selector.h +20 -8
  196. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +28 -12
  197. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +4 -3
  198. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +219 -0
  199. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
  200. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
  201. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
  202. data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
  203. data/src/core/ext/transport/chttp2/alpn/alpn.h +24 -24
  204. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +185 -241
  205. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +38 -30
  206. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +204 -211
  207. data/src/core/ext/transport/chttp2/server/chttp2_server.h +26 -26
  208. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +24 -24
  209. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +35 -34
  210. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +43 -38
  211. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +35 -31
  212. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +801 -1067
  213. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +28 -23
  214. data/src/core/ext/transport/chttp2/transport/context_list.cc +23 -19
  215. data/src/core/ext/transport/chttp2/transport/context_list.h +32 -29
  216. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +251 -0
  217. data/src/core/ext/transport/chttp2/transport/decode_huff.h +971 -0
  218. data/src/core/ext/transport/chttp2/transport/flow_control.cc +350 -300
  219. data/src/core/ext/transport/chttp2/transport/flow_control.h +248 -325
  220. data/src/core/ext/transport/chttp2/transport/frame.h +22 -26
  221. data/src/core/ext/transport/chttp2/transport/frame_data.cc +85 -234
  222. data/src/core/ext/transport/chttp2/transport/frame_data.h +38 -61
  223. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +41 -36
  224. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +24 -22
  225. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +31 -25
  226. data/src/core/ext/transport/chttp2/transport/frame_ping.h +25 -22
  227. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +35 -26
  228. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +24 -21
  229. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +44 -77
  230. data/src/core/ext/transport/chttp2/transport/frame_settings.h +27 -23
  231. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +34 -33
  232. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +24 -21
  233. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +10 -4
  234. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +221 -372
  235. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +338 -158
  236. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +6 -1
  237. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +16 -5
  238. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +516 -751
  239. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +38 -27
  240. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +86 -76
  241. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +79 -49
  242. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
  243. data/src/core/ext/transport/chttp2/transport/http2_settings.h +39 -38
  244. data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
  245. data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
  246. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
  247. data/src/core/ext/transport/chttp2/transport/huffsyms.h +21 -21
  248. data/src/core/ext/transport/chttp2/transport/internal.h +248 -296
  249. data/src/core/ext/transport/chttp2/transport/parsing.cc +363 -132
  250. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +30 -30
  251. data/src/core/ext/transport/chttp2/transport/stream_map.cc +24 -24
  252. data/src/core/ext/transport/chttp2/transport/stream_map.h +34 -33
  253. data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
  254. data/src/core/ext/transport/chttp2/transport/varint.h +39 -34
  255. data/src/core/ext/transport/chttp2/transport/writing.cc +121 -94
  256. data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -18
  257. data/src/core/ext/transport/inproc/inproc_transport.cc +227 -274
  258. data/src/core/ext/transport/inproc/inproc_transport.h +23 -21
  259. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  260. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  261. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +6 -5
  262. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +33 -8
  263. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  264. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  265. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +388 -0
  266. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1953 -0
  267. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  268. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  269. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  270. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  271. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  272. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  273. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  274. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  275. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  276. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  277. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  278. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  279. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  280. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
  281. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  282. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  283. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +25 -19
  284. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +168 -34
  285. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  286. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  287. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +35 -43
  288. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +195 -116
  289. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  290. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  291. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  292. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  293. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  294. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  295. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +35 -12
  296. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +179 -14
  297. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  298. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  299. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  300. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  301. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  302. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  303. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  304. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  305. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  306. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  307. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  308. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  309. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  310. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  311. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +23 -20
  312. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +137 -69
  313. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  314. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  315. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +23 -21
  316. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +132 -44
  317. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  318. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  319. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  320. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  321. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +17 -2
  322. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +67 -2
  323. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  324. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  325. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  326. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  327. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  328. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  329. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +15 -9
  330. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +73 -18
  331. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  332. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  333. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  334. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  335. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +39 -13
  336. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +194 -15
  337. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  338. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  339. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +5 -3
  340. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +28 -2
  341. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  342. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  343. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  344. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  345. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  346. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  347. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  348. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  349. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +26 -11
  350. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +124 -14
  351. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +19 -15
  352. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +78 -69
  353. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +168 -82
  354. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +887 -166
  355. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  356. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  357. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  358. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  359. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -2
  360. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +15 -2
  361. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  362. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  363. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  364. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  365. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  366. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  367. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  368. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  369. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +47 -0
  370. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +107 -0
  371. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  372. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  373. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  374. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  375. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  376. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  377. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  378. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  379. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -6
  380. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +27 -14
  381. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  382. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  383. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  384. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  385. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  386. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  387. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  388. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  389. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +6 -3
  390. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +29 -2
  391. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
  392. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
  393. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +38 -27
  394. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +207 -52
  395. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
  396. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
  397. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +54 -0
  398. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +188 -0
  399. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +111 -0
  400. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +444 -0
  401. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +56 -0
  402. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +192 -0
  403. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  404. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  405. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  406. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  407. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  408. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  409. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +13 -11
  410. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +73 -23
  411. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  412. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  413. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  414. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  415. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +133 -16
  416. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +656 -12
  417. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  418. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  419. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  420. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  421. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  422. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  423. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  424. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  425. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +47 -0
  426. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +113 -0
  427. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  428. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  429. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  430. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  431. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  432. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  433. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  434. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  435. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  436. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  437. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  438. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  439. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +43 -0
  440. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +114 -0
  441. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  442. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  443. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  444. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  445. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  446. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  447. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  448. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  449. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  450. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  451. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  452. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  453. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  454. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  455. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  456. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  457. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  458. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  459. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  460. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +3 -1
  461. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  462. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  463. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  464. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  465. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  466. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  467. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  468. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  469. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  470. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  471. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  472. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  473. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  474. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  475. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  476. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  477. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  478. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  479. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  480. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  481. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  482. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  483. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  484. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  485. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  486. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  487. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  488. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  489. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  490. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  491. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  492. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  493. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  494. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  495. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  496. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  497. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  498. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  499. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  500. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  501. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  502. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  503. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  504. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  505. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  506. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  507. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  508. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  509. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  510. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  511. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  512. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  513. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  514. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  515. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  516. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  517. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  518. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  519. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  520. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  521. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  522. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  523. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
  524. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
  525. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  526. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  527. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  528. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  529. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  530. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  531. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  532. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  533. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  534. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  535. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  536. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  537. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +3 -2
  538. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -2
  539. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +46 -0
  540. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +113 -0
  541. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +46 -0
  542. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
  543. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
  544. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
  545. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
  546. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
  547. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
  548. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
  549. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  550. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  551. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
  552. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
  553. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  554. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  555. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  556. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  557. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +67 -0
  558. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +214 -0
  559. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +64 -0
  560. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +208 -0
  561. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -2
  562. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  563. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +54 -53
  564. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  565. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  566. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +277 -0
  567. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +125 -0
  568. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  569. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  570. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +199 -187
  571. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +232 -222
  572. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +0 -5
  573. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +95 -75
  574. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +5 -0
  575. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +187 -183
  576. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +81 -75
  577. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +190 -186
  578. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +7 -3
  579. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +5 -0
  580. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  581. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +71 -66
  582. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +164 -137
  583. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  584. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +16 -12
  585. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  586. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +140 -129
  587. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  588. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -74
  589. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +2 -2
  590. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +740 -667
  591. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +20 -0
  592. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  593. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  594. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +16 -14
  595. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +48 -0
  596. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  597. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  598. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +20 -18
  599. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  600. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +53 -42
  601. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
  602. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
  603. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +485 -467
  604. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
  605. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
  606. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  607. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +149 -145
  608. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +156 -84
  609. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  610. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  611. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
  612. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +35 -0
  613. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  614. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
  615. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +40 -0
  616. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  617. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  618. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +10 -9
  619. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  620. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
  621. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +35 -0
  622. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
  623. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +35 -0
  624. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
  625. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +40 -0
  626. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
  627. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +35 -0
  628. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
  629. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +40 -0
  630. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +9 -9
  631. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
  632. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +60 -0
  633. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
  634. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +40 -0
  635. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
  636. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +45 -0
  637. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +4 -7
  638. data/src/core/ext/xds/certificate_provider_store.cc +69 -5
  639. data/src/core/ext/xds/certificate_provider_store.h +22 -5
  640. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +17 -10
  641. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +12 -4
  642. data/src/core/ext/xds/upb_utils.h +3 -25
  643. data/src/core/ext/xds/xds_api.cc +90 -196
  644. data/src/core/ext/xds/xds_api.h +41 -39
  645. data/src/core/ext/xds/xds_bootstrap.cc +5 -537
  646. data/src/core/ext/xds/xds_bootstrap.h +41 -96
  647. data/src/core/ext/xds/xds_bootstrap_grpc.cc +362 -0
  648. data/src/core/ext/xds/xds_bootstrap_grpc.h +184 -0
  649. data/src/core/ext/xds/xds_certificate_provider.cc +35 -26
  650. data/src/core/ext/xds/xds_certificate_provider.h +29 -5
  651. data/src/core/ext/xds/xds_channel_args.h +3 -3
  652. data/src/core/ext/xds/xds_channel_stack_modifier.cc +17 -7
  653. data/src/core/ext/xds/xds_channel_stack_modifier.h +16 -4
  654. data/src/core/ext/xds/xds_client.cc +849 -1316
  655. data/src/core/ext/xds/xds_client.h +57 -61
  656. data/src/core/ext/xds/xds_client_grpc.cc +235 -0
  657. data/src/core/ext/xds/xds_client_grpc.h +79 -0
  658. data/src/core/ext/xds/xds_client_stats.cc +24 -25
  659. data/src/core/ext/xds/xds_client_stats.h +26 -24
  660. data/src/core/ext/xds/xds_cluster.cc +505 -247
  661. data/src/core/ext/xds/xds_cluster.h +69 -40
  662. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +67 -77
  663. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +47 -29
  664. data/src/core/ext/xds/xds_common_types.cc +238 -123
  665. data/src/core/ext/xds/xds_common_types.h +29 -16
  666. data/src/core/ext/xds/xds_endpoint.cc +265 -162
  667. data/src/core/ext/xds/xds_endpoint.h +19 -15
  668. data/src/core/ext/xds/xds_health_status.cc +80 -0
  669. data/src/core/ext/xds/xds_health_status.h +109 -0
  670. data/src/core/ext/xds/xds_http_fault_filter.cc +67 -58
  671. data/src/core/ext/xds/xds_http_fault_filter.h +19 -25
  672. data/src/core/ext/xds/xds_http_filters.cc +70 -71
  673. data/src/core/ext/xds/xds_http_filters.h +73 -25
  674. data/src/core/ext/xds/xds_http_rbac_filter.cc +168 -225
  675. data/src/core/ext/xds/xds_http_rbac_filter.h +22 -18
  676. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
  677. data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
  678. data/src/core/ext/xds/xds_lb_policy_registry.cc +334 -0
  679. data/src/core/ext/xds/xds_lb_policy_registry.h +71 -0
  680. data/src/core/ext/xds/xds_listener.cc +573 -481
  681. data/src/core/ext/xds/xds_listener.h +57 -51
  682. data/src/core/ext/xds/xds_resource_type.h +28 -22
  683. data/src/core/ext/xds/xds_resource_type_impl.h +18 -17
  684. data/src/core/ext/xds/xds_route_config.cc +592 -570
  685. data/src/core/ext/xds/xds_route_config.h +74 -40
  686. data/src/core/ext/xds/xds_routing.cc +21 -7
  687. data/src/core/ext/xds/xds_routing.h +17 -12
  688. data/src/core/ext/xds/xds_server_config_fetcher.cc +227 -178
  689. data/src/core/ext/xds/xds_transport.h +86 -0
  690. data/src/core/ext/xds/xds_transport_grpc.cc +356 -0
  691. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  692. data/src/core/lib/address_utils/parse_address.cc +52 -52
  693. data/src/core/lib/address_utils/parse_address.h +46 -42
  694. data/src/core/lib/address_utils/sockaddr_utils.cc +90 -54
  695. data/src/core/lib/address_utils/sockaddr_utils.h +45 -40
  696. data/src/core/lib/avl/avl.h +57 -33
  697. data/src/core/lib/backoff/backoff.cc +19 -21
  698. data/src/core/lib/backoff/backoff.h +21 -21
  699. data/src/core/lib/backoff/random_early_detection.cc +31 -0
  700. data/src/core/lib/backoff/random_early_detection.h +59 -0
  701. data/src/core/lib/channel/call_finalization.h +6 -4
  702. data/src/core/lib/channel/call_tracer.h +23 -8
  703. data/src/core/lib/channel/channel_args.cc +149 -61
  704. data/src/core/lib/channel/channel_args.h +308 -104
  705. data/src/core/lib/channel/channel_args_preconditioning.cc +4 -3
  706. data/src/core/lib/channel/channel_args_preconditioning.h +6 -5
  707. data/src/core/lib/channel/channel_fwd.h +26 -0
  708. data/src/core/lib/channel/channel_stack.cc +92 -52
  709. data/src/core/lib/channel/channel_stack.h +184 -135
  710. data/src/core/lib/channel/channel_stack_builder.cc +26 -39
  711. data/src/core/lib/channel/channel_stack_builder.h +33 -40
  712. data/src/core/lib/channel/channel_stack_builder_impl.cc +84 -60
  713. data/src/core/lib/channel/channel_stack_builder_impl.h +9 -9
  714. data/src/core/lib/channel/channel_trace.cc +29 -36
  715. data/src/core/lib/channel/channel_trace.h +27 -24
  716. data/src/core/lib/channel/channelz.cc +50 -65
  717. data/src/core/lib/channel/channelz.h +50 -33
  718. data/src/core/lib/channel/channelz_registry.cc +28 -36
  719. data/src/core/lib/channel/channelz_registry.h +31 -30
  720. data/src/core/lib/channel/connected_channel.cc +1267 -78
  721. data/src/core/lib/channel/connected_channel.h +21 -23
  722. data/src/core/lib/channel/context.h +25 -21
  723. data/src/core/lib/channel/promise_based_filter.cc +1896 -377
  724. data/src/core/lib/channel/promise_based_filter.h +592 -92
  725. data/src/core/lib/channel/status_util.cc +64 -17
  726. data/src/core/lib/channel/status_util.h +38 -24
  727. data/src/core/lib/compression/compression.cc +24 -19
  728. data/src/core/lib/compression/compression_internal.cc +88 -63
  729. data/src/core/lib/compression/compression_internal.h +28 -27
  730. data/src/core/lib/compression/message_compress.cc +28 -26
  731. data/src/core/lib/compression/message_compress.h +28 -29
  732. data/src/core/lib/config/core_configuration.cc +8 -1
  733. data/src/core/lib/config/core_configuration.h +86 -39
  734. data/src/core/lib/debug/event_log.cc +88 -0
  735. data/src/core/lib/debug/event_log.h +81 -0
  736. data/src/core/lib/debug/histogram_view.cc +69 -0
  737. data/src/core/lib/debug/histogram_view.h +37 -0
  738. data/src/core/lib/debug/stats.cc +48 -152
  739. data/src/core/lib/debug/stats.h +50 -57
  740. data/src/core/lib/debug/stats_data.cc +302 -645
  741. data/src/core/lib/debug/stats_data.h +293 -545
  742. data/src/core/lib/debug/trace.cc +18 -20
  743. data/src/core/lib/debug/trace.h +27 -48
  744. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +16 -17
  745. data/src/core/lib/event_engine/channel_args_endpoint_config.h +16 -9
  746. data/src/core/lib/event_engine/common_closures.h +71 -0
  747. data/src/core/lib/event_engine/default_event_engine.cc +99 -0
  748. data/src/core/lib/event_engine/default_event_engine.h +73 -0
  749. data/src/core/lib/event_engine/default_event_engine_factory.cc +24 -3
  750. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine_factory.h} +6 -9
  751. data/src/core/lib/event_engine/event_engine.cc +3 -30
  752. data/src/core/lib/event_engine/executor/executor.h +38 -0
  753. data/src/core/lib/event_engine/forkable.cc +106 -0
  754. data/src/core/lib/event_engine/forkable.h +61 -0
  755. data/src/core/lib/event_engine/handle_containers.h +74 -0
  756. data/src/core/lib/event_engine/memory_allocator.cc +11 -3
  757. data/src/core/lib/event_engine/poller.h +62 -0
  758. data/src/core/lib/event_engine/posix.h +158 -0
  759. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +642 -0
  760. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +139 -0
  761. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +899 -0
  762. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  763. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  764. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  765. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
  766. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  767. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  768. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +265 -0
  769. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  770. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1305 -0
  771. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +717 -0
  772. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +640 -0
  773. data/src/core/lib/event_engine/posix_engine/posix_engine.h +259 -0
  774. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  775. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +289 -0
  776. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +279 -0
  777. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +379 -0
  778. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
  779. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +853 -0
  780. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
  781. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  782. data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
  783. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  784. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  785. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +173 -0
  786. data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
  787. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
  788. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
  789. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
  790. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  791. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
  792. data/src/core/lib/{iomgr/event_engine/promise.h → event_engine/posix_engine/wakeup_fd_pipe.h} +19 -25
  793. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  794. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  795. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  796. data/src/core/lib/event_engine/resolved_address.cc +23 -2
  797. data/src/core/lib/{iomgr/event_engine → event_engine}/resolved_address_internal.h +5 -8
  798. data/src/core/lib/event_engine/shim.cc +56 -0
  799. data/src/core/lib/event_engine/shim.h +33 -0
  800. data/src/core/lib/event_engine/slice.cc +103 -0
  801. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  802. data/src/core/lib/event_engine/tcp_socket_utils.cc +389 -0
  803. data/src/core/lib/event_engine/tcp_socket_utils.h +90 -0
  804. data/src/core/lib/event_engine/thread_local.cc +29 -0
  805. data/src/core/lib/event_engine/thread_local.h +32 -0
  806. data/src/core/lib/event_engine/thread_pool.cc +253 -0
  807. data/src/core/lib/event_engine/thread_pool.h +141 -0
  808. data/src/core/lib/event_engine/time_util.cc +30 -0
  809. data/src/core/lib/event_engine/time_util.h +32 -0
  810. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.cc} +9 -17
  811. data/src/core/lib/event_engine/trace.h +43 -0
  812. data/src/core/lib/event_engine/utils.cc +44 -0
  813. data/src/core/lib/event_engine/utils.h +44 -0
  814. data/src/core/lib/event_engine/windows/iocp.cc +140 -0
  815. data/src/core/lib/event_engine/windows/iocp.h +69 -0
  816. data/src/core/lib/event_engine/windows/win_socket.cc +219 -0
  817. data/src/core/lib/event_engine/windows/win_socket.h +129 -0
  818. data/src/core/lib/event_engine/windows/windows_endpoint.cc +331 -0
  819. data/src/core/lib/event_engine/windows/windows_endpoint.h +103 -0
  820. data/src/core/lib/event_engine/windows/windows_engine.cc +388 -0
  821. data/src/core/lib/event_engine/windows/windows_engine.h +163 -0
  822. data/src/core/lib/experiments/config.cc +161 -0
  823. data/src/core/lib/experiments/config.h +53 -0
  824. data/src/core/lib/experiments/experiments.cc +81 -0
  825. data/src/core/lib/experiments/experiments.h +117 -0
  826. data/src/core/lib/gpr/alloc.cc +19 -25
  827. data/src/core/lib/gpr/alloc.h +20 -20
  828. data/src/core/lib/gpr/atm.cc +17 -17
  829. data/src/core/lib/gpr/cpu_iphone.cc +24 -24
  830. data/src/core/lib/gpr/cpu_linux.cc +28 -23
  831. data/src/core/lib/gpr/cpu_posix.cc +23 -22
  832. data/src/core/lib/gpr/cpu_windows.cc +20 -18
  833. data/src/core/lib/gpr/log.cc +30 -17
  834. data/src/core/lib/gpr/log_android.cc +22 -20
  835. data/src/core/lib/gpr/log_linux.cc +24 -24
  836. data/src/core/lib/gpr/log_posix.cc +20 -19
  837. data/src/core/lib/gpr/log_windows.cc +25 -25
  838. data/src/core/lib/gpr/spinlock.h +20 -20
  839. data/src/core/lib/gpr/string.cc +25 -24
  840. data/src/core/lib/gpr/string.h +61 -61
  841. data/src/core/lib/gpr/string_posix.cc +24 -24
  842. data/src/core/lib/gpr/string_util_windows.cc +25 -52
  843. data/src/core/lib/gpr/string_windows.cc +24 -24
  844. data/src/core/lib/gpr/sync.cc +25 -25
  845. data/src/core/lib/gpr/sync_abseil.cc +36 -40
  846. data/src/core/lib/gpr/sync_posix.cc +22 -34
  847. data/src/core/lib/gpr/sync_windows.cc +29 -27
  848. data/src/core/lib/gpr/time.cc +34 -30
  849. data/src/core/lib/gpr/time_posix.cc +41 -45
  850. data/src/core/lib/gpr/time_precise.cc +22 -22
  851. data/src/core/lib/gpr/time_precise.h +21 -22
  852. data/src/core/lib/gpr/time_windows.cc +35 -29
  853. data/src/core/lib/gpr/tmpfile.h +24 -24
  854. data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
  855. data/src/core/lib/gpr/tmpfile_posix.cc +22 -20
  856. data/src/core/lib/gpr/tmpfile_windows.cc +28 -29
  857. data/src/core/lib/gpr/useful.h +83 -30
  858. data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
  859. data/src/core/lib/gprpp/atomic_utils.h +20 -20
  860. data/src/core/lib/gprpp/bitset.h +35 -17
  861. data/src/core/lib/gprpp/chunked_vector.h +7 -3
  862. data/src/core/lib/gprpp/construct_destruct.h +4 -3
  863. data/src/core/lib/gprpp/cpp_impl_of.h +3 -3
  864. data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/crash.cc} +12 -12
  865. data/src/core/lib/gprpp/crash.h +34 -0
  866. data/src/core/lib/gprpp/debug_location.h +60 -31
  867. data/src/core/lib/gprpp/dual_ref_counted.h +4 -7
  868. data/src/core/lib/gprpp/env.h +53 -0
  869. data/src/core/lib/gprpp/env_linux.cc +80 -0
  870. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc → lib/gprpp/env_posix.cc} +25 -9
  871. data/src/core/lib/gprpp/env_windows.cc +56 -0
  872. data/src/core/lib/gprpp/examine_stack.cc +17 -17
  873. data/src/core/lib/gprpp/examine_stack.h +21 -22
  874. data/src/core/lib/gprpp/fork.cc +58 -53
  875. data/src/core/lib/gprpp/fork.h +29 -35
  876. data/src/core/lib/gprpp/global_config.h +22 -24
  877. data/src/core/lib/gprpp/global_config_custom.h +20 -20
  878. data/src/core/lib/gprpp/global_config_env.cc +28 -25
  879. data/src/core/lib/gprpp/global_config_env.h +29 -27
  880. data/src/core/lib/gprpp/global_config_generic.h +21 -25
  881. data/src/core/lib/gprpp/host_port.cc +30 -26
  882. data/src/core/lib/gprpp/host_port.h +32 -31
  883. data/src/core/lib/gprpp/load_file.cc +75 -0
  884. data/src/core/lib/gprpp/load_file.h +33 -0
  885. data/src/core/lib/gprpp/manual_constructor.h +21 -89
  886. data/src/core/lib/gprpp/match.h +5 -3
  887. data/src/core/lib/gprpp/memory.h +22 -26
  888. data/src/core/lib/gprpp/mpscq.cc +17 -17
  889. data/src/core/lib/gprpp/mpscq.h +21 -21
  890. data/src/core/lib/gprpp/no_destruct.h +95 -0
  891. data/src/core/lib/gprpp/notification.h +67 -0
  892. data/src/core/lib/gprpp/orphanable.h +22 -25
  893. data/src/core/lib/gprpp/overload.h +3 -3
  894. data/src/core/lib/gprpp/packed_table.h +40 -0
  895. data/src/core/lib/gprpp/per_cpu.h +46 -0
  896. data/src/core/lib/gprpp/ref_counted.h +22 -24
  897. data/src/core/lib/gprpp/ref_counted_ptr.h +42 -55
  898. data/src/core/lib/gprpp/single_set_ptr.h +3 -3
  899. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  900. data/src/core/lib/gprpp/stat.h +3 -5
  901. data/src/core/lib/gprpp/stat_posix.cc +10 -4
  902. data/src/core/lib/gprpp/stat_windows.cc +4 -2
  903. data/src/core/lib/gprpp/status_helper.cc +55 -35
  904. data/src/core/lib/gprpp/status_helper.h +13 -5
  905. data/src/core/lib/gprpp/strerror.cc +43 -0
  906. data/src/core/lib/gprpp/strerror.h +29 -0
  907. data/src/core/lib/gprpp/sync.h +26 -24
  908. data/src/core/lib/gprpp/table.h +22 -4
  909. data/src/core/lib/gprpp/tchar.cc +49 -0
  910. data/src/core/lib/gprpp/tchar.h +33 -0
  911. data/src/core/lib/gprpp/thd.h +25 -28
  912. data/src/core/lib/gprpp/thd_posix.cc +33 -32
  913. data/src/core/lib/gprpp/thd_windows.cc +28 -26
  914. data/src/core/lib/gprpp/time.cc +52 -9
  915. data/src/core/lib/gprpp/time.h +78 -4
  916. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  917. data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
  918. data/src/core/lib/gprpp/time_util.cc +4 -0
  919. data/src/core/lib/gprpp/time_util.h +3 -3
  920. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  921. data/src/core/lib/gprpp/validation_errors.cc +61 -0
  922. data/src/core/lib/gprpp/validation_errors.h +127 -0
  923. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  924. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -28
  925. data/src/core/lib/handshaker/proxy_mapper.h +53 -0
  926. data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
  927. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  928. data/src/core/lib/http/format_request.cc +53 -22
  929. data/src/core/lib/http/format_request.h +23 -21
  930. data/src/core/lib/http/httpcli.cc +139 -141
  931. data/src/core/lib/http/httpcli.h +86 -38
  932. data/src/core/lib/http/httpcli_security_connector.cc +50 -42
  933. data/src/core/lib/http/httpcli_ssl_credentials.h +6 -4
  934. data/src/core/lib/http/parser.cc +78 -90
  935. data/src/core/lib/http/parser.h +38 -35
  936. data/src/core/lib/iomgr/block_annotate.h +23 -23
  937. data/src/core/lib/iomgr/buffer_list.cc +156 -136
  938. data/src/core/lib/iomgr/buffer_list.h +123 -101
  939. data/src/core/lib/iomgr/call_combiner.cc +32 -64
  940. data/src/core/lib/iomgr/call_combiner.h +24 -25
  941. data/src/core/lib/iomgr/cfstream_handle.cc +33 -36
  942. data/src/core/lib/iomgr/cfstream_handle.h +25 -25
  943. data/src/core/lib/iomgr/{event_engine/pollset.h → closure.cc} +9 -7
  944. data/src/core/lib/iomgr/closure.h +95 -58
  945. data/src/core/lib/iomgr/combiner.cc +20 -39
  946. data/src/core/lib/iomgr/combiner.h +20 -20
  947. data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
  948. data/src/core/lib/iomgr/dynamic_annotations.h +22 -22
  949. data/src/core/lib/iomgr/endpoint.cc +21 -21
  950. data/src/core/lib/iomgr/endpoint.h +53 -51
  951. data/src/core/lib/iomgr/endpoint_cfstream.cc +51 -47
  952. data/src/core/lib/iomgr/endpoint_cfstream.h +32 -32
  953. data/src/core/lib/iomgr/endpoint_pair.h +22 -22
  954. data/src/core/lib/iomgr/endpoint_pair_posix.cc +36 -29
  955. data/src/core/lib/iomgr/endpoint_pair_windows.cc +31 -22
  956. data/src/core/lib/iomgr/error.cc +51 -834
  957. data/src/core/lib/iomgr/error.h +45 -317
  958. data/src/core/lib/iomgr/error_cfstream.cc +18 -23
  959. data/src/core/lib/iomgr/error_cfstream.h +21 -21
  960. data/src/core/lib/iomgr/ev_apple.cc +21 -21
  961. data/src/core/lib/iomgr/ev_apple.h +21 -21
  962. data/src/core/lib/iomgr/ev_epoll1_linux.cc +263 -248
  963. data/src/core/lib/iomgr/ev_epoll1_linux.h +21 -21
  964. data/src/core/lib/iomgr/ev_poll_posix.cc +296 -271
  965. data/src/core/lib/iomgr/ev_poll_posix.h +22 -22
  966. data/src/core/lib/iomgr/ev_posix.cc +88 -121
  967. data/src/core/lib/iomgr/ev_posix.h +93 -87
  968. data/src/core/lib/iomgr/ev_windows.cc +18 -18
  969. data/src/core/lib/iomgr/{event_engine → event_engine_shims}/closure.cc +15 -30
  970. data/src/core/lib/iomgr/{event_engine → event_engine_shims}/closure.h +10 -13
  971. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +430 -0
  972. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
  973. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
  974. data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
  975. data/src/core/lib/iomgr/exec_ctx.cc +34 -56
  976. data/src/core/lib/iomgr/exec_ctx.h +152 -177
  977. data/src/core/lib/iomgr/executor.cc +21 -31
  978. data/src/core/lib/iomgr/executor.h +27 -30
  979. data/src/core/lib/iomgr/fork_posix.cc +30 -27
  980. data/src/core/lib/iomgr/fork_windows.cc +21 -21
  981. data/src/core/lib/iomgr/gethostname.h +20 -20
  982. data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
  983. data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
  984. data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
  985. data/src/core/lib/iomgr/grpc_if_nametoindex.h +22 -22
  986. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
  987. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
  988. data/src/core/lib/iomgr/internal_errqueue.cc +41 -48
  989. data/src/core/lib/iomgr/internal_errqueue.h +84 -89
  990. data/src/core/lib/iomgr/iocp_windows.cc +23 -23
  991. data/src/core/lib/iomgr/iocp_windows.h +21 -21
  992. data/src/core/lib/iomgr/iomgr.cc +25 -20
  993. data/src/core/lib/iomgr/iomgr.h +35 -35
  994. data/src/core/lib/iomgr/iomgr_fwd.h +26 -0
  995. data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
  996. data/src/core/lib/iomgr/iomgr_internal.h +28 -28
  997. data/src/core/lib/iomgr/iomgr_posix.cc +21 -20
  998. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +21 -19
  999. data/src/core/lib/iomgr/iomgr_windows.cc +24 -22
  1000. data/src/core/lib/iomgr/load_file.cc +24 -27
  1001. data/src/core/lib/iomgr/load_file.h +22 -22
  1002. data/src/core/lib/iomgr/lockfree_event.cc +114 -131
  1003. data/src/core/lib/iomgr/lockfree_event.h +23 -23
  1004. data/src/core/lib/iomgr/nameser.h +86 -86
  1005. data/src/core/lib/iomgr/polling_entity.cc +25 -21
  1006. data/src/core/lib/iomgr/polling_entity.h +29 -29
  1007. data/src/core/lib/iomgr/pollset.cc +17 -17
  1008. data/src/core/lib/iomgr/pollset.h +55 -55
  1009. data/src/core/lib/iomgr/pollset_set.cc +17 -17
  1010. data/src/core/lib/iomgr/pollset_set.h +26 -28
  1011. data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
  1012. data/src/core/lib/iomgr/pollset_set_windows.h +20 -20
  1013. data/src/core/lib/iomgr/pollset_windows.cc +32 -31
  1014. data/src/core/lib/iomgr/pollset_windows.h +24 -24
  1015. data/src/core/lib/iomgr/port.h +59 -37
  1016. data/src/core/lib/iomgr/python_util.h +24 -24
  1017. data/src/core/lib/iomgr/resolve_address.cc +34 -20
  1018. data/src/core/lib/iomgr/resolve_address.h +73 -43
  1019. data/src/core/lib/iomgr/resolve_address_impl.h +7 -7
  1020. data/src/core/lib/iomgr/resolve_address_posix.cc +81 -62
  1021. data/src/core/lib/iomgr/resolve_address_posix.h +26 -10
  1022. data/src/core/lib/iomgr/resolve_address_windows.cc +64 -38
  1023. data/src/core/lib/iomgr/resolve_address_windows.h +26 -10
  1024. data/src/core/lib/iomgr/resolved_address.h +3 -3
  1025. data/src/core/lib/iomgr/sockaddr.h +25 -26
  1026. data/src/core/lib/iomgr/sockaddr_posix.h +23 -21
  1027. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +20 -18
  1028. data/src/core/lib/iomgr/sockaddr_windows.h +23 -21
  1029. data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
  1030. data/src/core/lib/iomgr/socket_factory_posix.h +32 -32
  1031. data/src/core/lib/iomgr/socket_mutator.cc +19 -18
  1032. data/src/core/lib/iomgr/socket_mutator.h +39 -39
  1033. data/src/core/lib/iomgr/socket_utils.h +27 -27
  1034. data/src/core/lib/iomgr/socket_utils_common_posix.cc +82 -101
  1035. data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
  1036. data/src/core/lib/iomgr/socket_utils_posix.cc +103 -19
  1037. data/src/core/lib/iomgr/socket_utils_posix.h +176 -84
  1038. data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
  1039. data/src/core/lib/iomgr/socket_windows.cc +37 -36
  1040. data/src/core/lib/iomgr/socket_windows.h +59 -61
  1041. data/src/core/lib/iomgr/systemd_utils.cc +116 -0
  1042. data/src/core/lib/iomgr/systemd_utils.h +33 -0
  1043. data/src/core/lib/iomgr/tcp_client.cc +28 -24
  1044. data/src/core/lib/iomgr/tcp_client.h +49 -38
  1045. data/src/core/lib/iomgr/tcp_client_cfstream.cc +46 -35
  1046. data/src/core/lib/iomgr/tcp_client_posix.cc +243 -105
  1047. data/src/core/lib/iomgr/tcp_client_posix.h +55 -52
  1048. data/src/core/lib/iomgr/tcp_client_windows.cc +73 -53
  1049. data/src/core/lib/iomgr/tcp_posix.cc +505 -362
  1050. data/src/core/lib/iomgr/tcp_posix.h +32 -30
  1051. data/src/core/lib/iomgr/tcp_server.cc +33 -24
  1052. data/src/core/lib/iomgr/tcp_server.h +78 -69
  1053. data/src/core/lib/iomgr/tcp_server_posix.cc +381 -133
  1054. data/src/core/lib/iomgr/tcp_server_utils_posix.h +68 -55
  1055. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +120 -82
  1056. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +46 -43
  1057. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
  1058. data/src/core/lib/iomgr/tcp_server_windows.cc +116 -118
  1059. data/src/core/lib/iomgr/tcp_windows.cc +116 -98
  1060. data/src/core/lib/iomgr/tcp_windows.h +34 -35
  1061. data/src/core/lib/iomgr/timer.cc +17 -17
  1062. data/src/core/lib/iomgr/timer.h +68 -68
  1063. data/src/core/lib/iomgr/timer_generic.cc +125 -134
  1064. data/src/core/lib/iomgr/timer_generic.h +21 -21
  1065. data/src/core/lib/iomgr/timer_heap.cc +25 -25
  1066. data/src/core/lib/iomgr/timer_heap.h +22 -22
  1067. data/src/core/lib/iomgr/timer_manager.cc +31 -31
  1068. data/src/core/lib/iomgr/timer_manager.h +27 -27
  1069. data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
  1070. data/src/core/lib/iomgr/unix_sockets_posix.h +21 -21
  1071. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
  1072. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -23
  1073. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
  1074. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
  1075. data/src/core/lib/iomgr/wakeup_fd_pipe.h +20 -20
  1076. data/src/core/lib/iomgr/wakeup_fd_posix.cc +33 -30
  1077. data/src/core/lib/iomgr/wakeup_fd_posix.h +52 -54
  1078. data/src/core/lib/json/json.h +23 -27
  1079. data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/json/json_args.h} +13 -10
  1080. data/src/core/lib/json/json_channel_args.h +42 -0
  1081. data/src/core/lib/json/json_object_loader.cc +217 -0
  1082. data/src/core/lib/json/json_object_loader.h +634 -0
  1083. data/src/core/lib/json/json_reader.cc +123 -90
  1084. data/src/core/lib/json/json_util.cc +14 -34
  1085. data/src/core/lib/json/json_util.h +17 -8
  1086. data/src/core/lib/json/json_writer.cc +62 -57
  1087. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +30 -60
  1088. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +47 -62
  1089. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  1090. data/src/core/lib/load_balancing/lb_policy_registry.cc +142 -0
  1091. data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
  1092. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +57 -52
  1093. data/src/core/lib/matchers/matchers.cc +12 -7
  1094. data/src/core/lib/matchers/matchers.h +5 -3
  1095. data/src/core/lib/promise/activity.cc +23 -8
  1096. data/src/core/lib/promise/activity.h +116 -58
  1097. data/src/core/lib/promise/arena_promise.h +115 -72
  1098. data/src/core/lib/promise/context.h +18 -11
  1099. data/src/core/lib/promise/detail/basic_join.h +197 -0
  1100. data/src/core/lib/promise/detail/basic_seq.h +28 -33
  1101. data/src/core/lib/promise/detail/promise_factory.h +61 -14
  1102. data/src/core/lib/promise/detail/promise_like.h +3 -3
  1103. data/src/core/lib/promise/detail/status.h +31 -3
  1104. data/src/core/lib/promise/detail/switch.h +21 -21
  1105. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +23 -15
  1106. data/src/core/lib/promise/if.h +195 -0
  1107. data/src/core/lib/promise/interceptor_list.h +308 -0
  1108. data/src/core/lib/promise/intra_activity_waiter.h +9 -3
  1109. data/src/core/lib/promise/latch.h +109 -22
  1110. data/src/core/lib/promise/loop.h +13 -9
  1111. data/src/core/lib/promise/map.h +4 -6
  1112. data/src/core/lib/promise/pipe.h +608 -0
  1113. data/src/core/lib/promise/poll.h +129 -11
  1114. data/src/core/lib/promise/promise.h +5 -5
  1115. data/src/core/lib/promise/race.h +6 -10
  1116. data/src/core/lib/promise/seq.h +32 -14
  1117. data/src/core/lib/promise/sleep.cc +58 -42
  1118. data/src/core/lib/promise/sleep.h +44 -26
  1119. data/src/core/lib/promise/trace.cc +20 -0
  1120. data/src/core/lib/promise/trace.h +24 -0
  1121. data/src/core/lib/promise/try_join.h +82 -0
  1122. data/src/core/lib/promise/try_seq.h +41 -23
  1123. data/src/core/lib/resolver/resolver.cc +17 -59
  1124. data/src/core/lib/resolver/resolver.h +21 -18
  1125. data/src/core/lib/resolver/resolver_factory.h +11 -10
  1126. data/src/core/lib/resolver/resolver_registry.cc +17 -9
  1127. data/src/core/lib/resolver/resolver_registry.h +15 -5
  1128. data/src/core/lib/resolver/server_address.cc +46 -34
  1129. data/src/core/lib/resolver/server_address.h +36 -35
  1130. data/src/core/lib/resource_quota/api.cc +23 -2
  1131. data/src/core/lib/resource_quota/api.h +13 -4
  1132. data/src/core/lib/resource_quota/arena.cc +85 -27
  1133. data/src/core/lib/resource_quota/arena.h +197 -25
  1134. data/src/core/lib/resource_quota/memory_quota.cc +322 -101
  1135. data/src/core/lib/resource_quota/memory_quota.h +191 -56
  1136. data/src/core/lib/resource_quota/periodic_update.cc +78 -0
  1137. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  1138. data/src/core/lib/resource_quota/resource_quota.h +12 -4
  1139. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  1140. data/src/core/lib/resource_quota/thread_quota.h +7 -3
  1141. data/src/core/lib/resource_quota/trace.h +3 -3
  1142. data/src/core/lib/security/authorization/authorization_engine.h +3 -3
  1143. data/src/core/lib/security/authorization/authorization_policy_provider.h +10 -3
  1144. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +3 -0
  1145. data/src/core/lib/security/authorization/evaluate_args.cc +17 -8
  1146. data/src/core/lib/security/authorization/evaluate_args.h +9 -6
  1147. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +5 -1
  1148. data/src/core/lib/security/authorization/grpc_authorization_engine.h +10 -3
  1149. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +19 -3
  1150. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +16 -5
  1151. data/src/core/lib/security/authorization/matchers.cc +44 -30
  1152. data/src/core/lib/security/authorization/matchers.h +10 -3
  1153. data/src/core/lib/security/authorization/rbac_policy.cc +6 -2
  1154. data/src/core/lib/security/authorization/rbac_policy.h +10 -3
  1155. data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +9 -4
  1156. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
  1157. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
  1158. data/src/core/lib/security/context/security_context.cc +27 -25
  1159. data/src/core/lib/security/context/security_context.h +56 -34
  1160. data/src/core/lib/security/credentials/alts/alts_credentials.cc +31 -24
  1161. data/src/core/lib/security/credentials/alts/alts_credentials.h +63 -59
  1162. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
  1163. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +43 -43
  1164. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
  1165. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
  1166. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
  1167. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +20 -22
  1168. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
  1169. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +38 -39
  1170. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +19 -22
  1171. data/src/core/lib/security/credentials/call_creds_util.cc +10 -0
  1172. data/src/core/lib/security/credentials/call_creds_util.h +4 -3
  1173. data/src/core/lib/security/credentials/channel_creds_registry.h +10 -4
  1174. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +13 -3
  1175. data/src/core/lib/security/credentials/composite/composite_credentials.cc +34 -34
  1176. data/src/core/lib/security/credentials/composite/composite_credentials.h +45 -33
  1177. data/src/core/lib/security/credentials/credentials.cc +23 -26
  1178. data/src/core/lib/security/credentials/credentials.h +79 -65
  1179. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +202 -74
  1180. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +21 -3
  1181. data/src/core/lib/security/credentials/external/aws_request_signer.cc +14 -3
  1182. data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
  1183. data/src/core/lib/security/credentials/external/external_account_credentials.cc +86 -68
  1184. data/src/core/lib/security/credentials/external/external_account_credentials.h +14 -3
  1185. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +29 -26
  1186. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +9 -3
  1187. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +44 -31
  1188. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +13 -3
  1189. data/src/core/lib/security/credentials/fake/fake_credentials.cc +43 -39
  1190. data/src/core/lib/security/credentials/fake/fake_credentials.h +51 -44
  1191. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +23 -25
  1192. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +146 -114
  1193. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +33 -27
  1194. data/src/core/lib/security/credentials/iam/iam_credentials.cc +31 -21
  1195. data/src/core/lib/security/credentials/iam/iam_credentials.h +33 -23
  1196. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +15 -5
  1197. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +14 -10
  1198. data/src/core/lib/security/credentials/jwt/json_token.cc +40 -29
  1199. data/src/core/lib/security/credentials/jwt/json_token.h +36 -36
  1200. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +32 -29
  1201. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +37 -23
  1202. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +113 -89
  1203. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +49 -47
  1204. data/src/core/lib/security/credentials/local/local_credentials.cc +32 -26
  1205. data/src/core/lib/security/credentials/local/local_credentials.h +34 -28
  1206. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +95 -87
  1207. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +46 -25
  1208. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +35 -31
  1209. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +48 -24
  1210. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +44 -42
  1211. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +39 -27
  1212. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +22 -30
  1213. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +16 -17
  1214. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +65 -48
  1215. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +27 -16
  1216. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +36 -4
  1217. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +37 -14
  1218. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +22 -23
  1219. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +3 -3
  1220. data/src/core/lib/security/credentials/tls/tls_credentials.cc +46 -44
  1221. data/src/core/lib/security/credentials/tls/tls_credentials.h +30 -27
  1222. data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -1
  1223. data/src/core/lib/security/credentials/tls/tls_utils.h +4 -4
  1224. data/src/core/lib/security/credentials/xds/xds_credentials.cc +33 -35
  1225. data/src/core/lib/security/credentials/xds/xds_credentials.h +24 -10
  1226. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +60 -54
  1227. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +49 -47
  1228. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +75 -79
  1229. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +25 -26
  1230. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +15 -6
  1231. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +26 -15
  1232. data/src/core/lib/security/security_connector/load_system_roots.h +20 -20
  1233. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +22 -20
  1234. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +43 -38
  1235. data/src/core/lib/security/security_connector/load_system_roots_supported.h +45 -0
  1236. data/src/core/lib/security/security_connector/local/local_security_connector.cc +64 -47
  1237. data/src/core/lib/security/security_connector/local/local_security_connector.h +49 -46
  1238. data/src/core/lib/security/security_connector/security_connector.cc +37 -35
  1239. data/src/core/lib/security/security_connector/security_connector.h +58 -45
  1240. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +55 -46
  1241. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +44 -43
  1242. data/src/core/lib/security/security_connector/ssl_utils.cc +47 -39
  1243. data/src/core/lib/security/security_connector/ssl_utils.h +45 -42
  1244. data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
  1245. data/src/core/lib/security/security_connector/ssl_utils_config.h +21 -22
  1246. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +58 -56
  1247. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +48 -28
  1248. data/src/core/lib/security/transport/auth_filters.h +53 -24
  1249. data/src/core/lib/security/transport/client_auth_filter.cc +57 -40
  1250. data/src/core/lib/security/transport/secure_endpoint.cc +130 -75
  1251. data/src/core/lib/security/transport/secure_endpoint.h +28 -27
  1252. data/src/core/lib/security/transport/security_handshaker.cc +144 -114
  1253. data/src/core/lib/security/transport/security_handshaker.h +28 -23
  1254. data/src/core/lib/security/transport/server_auth_filter.cc +157 -266
  1255. data/src/core/lib/security/transport/tsi_error.cc +23 -20
  1256. data/src/core/lib/security/transport/tsi_error.h +20 -20
  1257. data/src/core/lib/security/util/json_util.cc +24 -24
  1258. data/src/core/lib/security/util/json_util.h +21 -23
  1259. data/src/core/lib/service_config/service_config.h +19 -12
  1260. data/src/core/lib/service_config/service_config_call_data.h +15 -5
  1261. data/src/core/lib/service_config/service_config_impl.cc +111 -150
  1262. data/src/core/lib/service_config/service_config_impl.h +27 -27
  1263. data/src/core/lib/service_config/service_config_parser.cc +16 -28
  1264. data/src/core/lib/service_config/service_config_parser.h +18 -19
  1265. data/src/core/lib/slice/b64.cc +26 -26
  1266. data/src/core/lib/slice/b64.h +34 -32
  1267. data/src/core/lib/slice/percent_encoding.cc +24 -30
  1268. data/src/core/lib/slice/percent_encoding.h +28 -34
  1269. data/src/core/lib/slice/slice.cc +59 -46
  1270. data/src/core/lib/slice/slice.h +64 -20
  1271. data/src/core/lib/slice/slice_buffer.cc +136 -76
  1272. data/src/core/lib/slice/slice_buffer.h +168 -0
  1273. data/src/core/lib/slice/slice_internal.h +38 -45
  1274. data/src/core/lib/slice/slice_refcount.cc +3 -18
  1275. data/src/core/lib/slice/slice_refcount.h +53 -19
  1276. data/src/core/lib/slice/slice_string_helpers.cc +17 -33
  1277. data/src/core/lib/slice/slice_string_helpers.h +23 -30
  1278. data/src/core/lib/surface/api_trace.cc +17 -17
  1279. data/src/core/lib/surface/api_trace.h +25 -25
  1280. data/src/core/lib/surface/builtins.cc +7 -2
  1281. data/src/core/lib/surface/builtins.h +3 -3
  1282. data/src/core/lib/surface/byte_buffer.cc +26 -21
  1283. data/src/core/lib/surface/byte_buffer_reader.cc +24 -24
  1284. data/src/core/lib/surface/call.cc +2232 -483
  1285. data/src/core/lib/surface/call.h +135 -42
  1286. data/src/core/lib/surface/call_details.cc +22 -23
  1287. data/src/core/lib/surface/call_log_batch.cc +25 -18
  1288. data/src/core/lib/surface/call_test_only.h +34 -31
  1289. data/src/core/lib/surface/call_trace.cc +123 -0
  1290. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/surface/call_trace.h} +12 -10
  1291. data/src/core/lib/surface/channel.cc +217 -284
  1292. data/src/core/lib/surface/channel.h +137 -90
  1293. data/src/core/lib/surface/channel_init.cc +17 -17
  1294. data/src/core/lib/surface/channel_init.h +22 -20
  1295. data/src/core/lib/surface/channel_ping.cc +26 -20
  1296. data/src/core/lib/surface/channel_stack_type.cc +21 -19
  1297. data/src/core/lib/surface/channel_stack_type.h +22 -22
  1298. data/src/core/lib/surface/completion_queue.cc +200 -222
  1299. data/src/core/lib/surface/completion_queue.h +42 -40
  1300. data/src/core/lib/surface/completion_queue_factory.cc +34 -28
  1301. data/src/core/lib/surface/completion_queue_factory.h +21 -23
  1302. data/src/core/lib/surface/event_string.cc +19 -24
  1303. data/src/core/lib/surface/event_string.h +21 -21
  1304. data/src/core/lib/surface/init.cc +57 -114
  1305. data/src/core/lib/surface/init.h +20 -28
  1306. data/src/core/lib/surface/init_internally.cc +25 -0
  1307. data/src/core/lib/surface/init_internally.h +37 -0
  1308. data/src/core/lib/surface/lame_client.cc +87 -130
  1309. data/src/core/lib/surface/lame_client.h +62 -24
  1310. data/src/core/lib/surface/metadata_array.cc +18 -17
  1311. data/src/core/lib/surface/server.cc +406 -174
  1312. data/src/core/lib/surface/server.h +56 -24
  1313. data/src/core/lib/surface/validate_metadata.cc +64 -77
  1314. data/src/core/lib/surface/validate_metadata.h +33 -21
  1315. data/src/core/lib/surface/version.cc +21 -21
  1316. data/src/core/lib/transport/bdp_estimator.cc +19 -19
  1317. data/src/core/lib/transport/bdp_estimator.h +22 -24
  1318. data/src/core/lib/transport/connectivity_state.cc +24 -23
  1319. data/src/core/lib/transport/connectivity_state.h +24 -25
  1320. data/src/core/lib/transport/error_utils.cc +57 -79
  1321. data/src/core/lib/transport/error_utils.h +29 -25
  1322. data/src/core/lib/{channel → transport}/handshaker.cc +75 -58
  1323. data/src/core/lib/{channel → transport}/handshaker.h +59 -48
  1324. data/src/core/lib/transport/handshaker_factory.h +74 -0
  1325. data/src/core/lib/transport/handshaker_registry.cc +61 -0
  1326. data/src/core/lib/transport/handshaker_registry.h +69 -0
  1327. data/src/core/lib/transport/http2_errors.h +22 -22
  1328. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +78 -65
  1329. data/src/core/lib/transport/http_connect_handshaker.h +42 -0
  1330. data/src/core/lib/transport/metadata_batch.cc +305 -0
  1331. data/src/core/lib/transport/metadata_batch.h +405 -304
  1332. data/src/core/lib/transport/parsed_metadata.cc +2 -4
  1333. data/src/core/lib/transport/parsed_metadata.h +33 -14
  1334. data/src/core/lib/transport/pid_controller.cc +20 -20
  1335. data/src/core/lib/transport/pid_controller.h +27 -27
  1336. data/src/core/lib/transport/status_conversion.cc +23 -23
  1337. data/src/core/lib/transport/status_conversion.h +24 -24
  1338. data/src/core/lib/transport/tcp_connect_handshaker.cc +245 -0
  1339. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  1340. data/src/core/lib/transport/timeout_encoding.cc +24 -28
  1341. data/src/core/lib/transport/timeout_encoding.h +25 -21
  1342. data/src/core/lib/transport/transport.cc +97 -57
  1343. data/src/core/lib/transport/transport.h +243 -213
  1344. data/src/core/lib/transport/transport_fwd.h +20 -0
  1345. data/src/core/lib/transport/transport_impl.h +55 -45
  1346. data/src/core/lib/transport/transport_op_string.cc +40 -39
  1347. data/src/core/lib/uri/uri_parser.cc +12 -4
  1348. data/src/core/lib/uri/uri_parser.h +3 -5
  1349. data/src/core/plugin_registry/grpc_plugin_registry.cc +60 -69
  1350. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +20 -39
  1351. data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
  1352. data/src/core/tsi/alts/crypt/gsec.cc +26 -26
  1353. data/src/core/tsi/alts/crypt/gsec.h +336 -336
  1354. data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
  1355. data/src/core/tsi/alts/frame_protector/alts_counter.h +68 -68
  1356. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
  1357. data/src/core/tsi/alts/frame_protector/alts_crypter.h +209 -209
  1358. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
  1359. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +40 -40
  1360. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
  1361. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +82 -83
  1362. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
  1363. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
  1364. data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
  1365. data/src/core/tsi/alts/frame_protector/frame_handler.h +169 -169
  1366. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +117 -97
  1367. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +104 -104
  1368. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
  1369. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
  1370. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +51 -43
  1371. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +60 -60
  1372. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +24 -24
  1373. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
  1374. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +38 -38
  1375. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
  1376. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +105 -104
  1377. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
  1378. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +40 -41
  1379. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
  1380. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +35 -36
  1381. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +67 -68
  1382. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
  1383. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +55 -56
  1384. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
  1385. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +141 -142
  1386. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +67 -58
  1387. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +43 -44
  1388. data/src/core/tsi/fake_transport_security.cc +146 -110
  1389. data/src/core/tsi/fake_transport_security.h +36 -30
  1390. data/src/core/tsi/local_transport_security.cc +43 -38
  1391. data/src/core/tsi/local_transport_security.h +33 -33
  1392. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -4
  1393. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
  1394. data/src/core/tsi/ssl/session_cache/ssl_session.h +23 -21
  1395. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +21 -19
  1396. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
  1397. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +31 -22
  1398. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +27 -20
  1399. data/src/core/tsi/ssl_transport_security.cc +299 -370
  1400. data/src/core/tsi/ssl_transport_security.h +206 -203
  1401. data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
  1402. data/src/core/tsi/ssl_transport_security_utils.h +147 -0
  1403. data/src/core/tsi/ssl_types.h +27 -27
  1404. data/src/core/tsi/transport_security.cc +44 -32
  1405. data/src/core/tsi/transport_security.h +49 -48
  1406. data/src/core/tsi/transport_security_grpc.cc +23 -22
  1407. data/src/core/tsi/transport_security_grpc.h +44 -41
  1408. data/src/core/tsi/transport_security_interface.h +344 -332
  1409. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.clang +2 -0
  1410. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.gcc +7 -0
  1411. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
  1412. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
  1413. data/src/ruby/ext/grpc/ext-export.gcc +1 -1
  1414. data/src/ruby/ext/grpc/extconf.rb +98 -20
  1415. data/src/ruby/ext/grpc/rb_call.c +1 -0
  1416. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  1417. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  1418. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  1419. data/src/ruby/ext/grpc/rb_grpc.c +1 -0
  1420. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
  1421. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +60 -60
  1422. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  1423. data/src/ruby/lib/grpc/errors.rb +1 -1
  1424. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  1425. data/src/ruby/lib/grpc/version.rb +1 -1
  1426. data/src/ruby/pb/generate_proto_ruby.sh +0 -6
  1427. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  1428. data/src/ruby/spec/channel_spec.rb +5 -43
  1429. data/src/ruby/spec/client_server_spec.rb +20 -8
  1430. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  1431. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  1432. data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
  1433. data/src/ruby/spec/user_agent_spec.rb +1 -1
  1434. data/third_party/abseil-cpp/absl/algorithm/container.h +57 -58
  1435. data/third_party/abseil-cpp/absl/base/attributes.h +88 -41
  1436. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  1437. data/third_party/abseil-cpp/absl/base/config.h +221 -39
  1438. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  1439. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +52 -2
  1440. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
  1441. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -4
  1442. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  1443. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  1444. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
  1445. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  1446. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
  1447. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
  1448. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  1449. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +39 -28
  1450. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +36 -36
  1451. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +6 -3
  1452. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +10 -6
  1453. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  1454. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
  1455. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  1456. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  1457. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -11
  1458. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
  1459. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  1460. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
  1461. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  1462. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -40
  1463. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
  1464. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  1465. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  1466. data/third_party/abseil-cpp/absl/base/macros.h +4 -21
  1467. data/third_party/abseil-cpp/absl/base/optimization.h +76 -16
  1468. data/third_party/abseil-cpp/absl/base/options.h +1 -7
  1469. data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
  1470. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  1471. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  1472. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  1473. data/third_party/abseil-cpp/absl/container/fixed_array.h +9 -5
  1474. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  1475. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  1476. data/third_party/abseil-cpp/absl/container/inlined_vector.h +84 -25
  1477. data/third_party/abseil-cpp/absl/container/internal/common.h +9 -8
  1478. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
  1479. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +23 -29
  1480. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
  1481. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +116 -23
  1482. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +40 -54
  1483. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +165 -66
  1484. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +159 -4
  1485. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1121 -470
  1486. data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
  1487. data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
  1488. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
  1489. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
  1490. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
  1491. data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
  1492. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
  1493. data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
  1494. data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
  1495. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
  1496. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
  1497. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
  1498. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
  1499. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
  1500. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
  1501. data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
  1502. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
  1503. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
  1504. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
  1505. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  1506. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
  1507. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
  1508. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -13
  1509. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  1510. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +19 -12
  1511. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  1512. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  1513. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
  1514. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  1515. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +59 -102
  1516. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
  1517. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +41 -11
  1518. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +18 -4
  1519. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  1520. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
  1521. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +164 -101
  1522. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
  1523. data/third_party/abseil-cpp/absl/functional/any_invocable.h +316 -0
  1524. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  1525. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  1526. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +878 -0
  1527. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  1528. data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
  1529. data/third_party/abseil-cpp/absl/hash/internal/hash.h +235 -26
  1530. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
  1531. data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
  1532. data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
  1533. data/third_party/abseil-cpp/absl/numeric/bits.h +1 -1
  1534. data/third_party/abseil-cpp/absl/numeric/int128.cc +14 -10
  1535. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  1536. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +33 -10
  1537. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  1538. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  1539. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  1540. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +4 -2
  1541. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  1542. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  1543. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +3 -24
  1544. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
  1545. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  1546. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  1547. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  1548. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  1549. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
  1550. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  1551. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  1552. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  1553. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  1554. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  1555. data/third_party/abseil-cpp/absl/random/random.h +6 -6
  1556. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  1557. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  1558. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  1559. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  1560. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  1561. data/third_party/abseil-cpp/absl/status/status.cc +193 -14
  1562. data/third_party/abseil-cpp/absl/status/status.h +24 -14
  1563. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  1564. data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
  1565. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  1566. data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
  1567. data/third_party/abseil-cpp/absl/strings/cord.cc +257 -924
  1568. data/third_party/abseil-cpp/absl/strings/cord.h +268 -156
  1569. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  1570. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  1571. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  1572. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +575 -0
  1573. data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
  1574. data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
  1575. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
  1576. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
  1577. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  1578. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  1579. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  1580. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +441 -150
  1581. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +157 -53
  1582. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +70 -73
  1583. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +8 -6
  1584. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  1585. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  1586. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  1587. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  1588. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +56 -0
  1589. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +103 -0
  1590. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  1591. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  1592. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
  1593. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
  1594. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +19 -43
  1595. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
  1596. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +5 -4
  1597. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  1598. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
  1599. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
  1600. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +18 -15
  1601. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
  1602. data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
  1603. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
  1604. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
  1605. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
  1606. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
  1607. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +127 -30
  1608. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
  1609. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +42 -10
  1610. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +56 -289
  1611. data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
  1612. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  1613. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +9 -4
  1614. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
  1615. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  1616. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
  1617. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -103
  1618. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  1619. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
  1620. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  1621. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
  1622. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
  1623. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  1624. data/third_party/abseil-cpp/absl/strings/numbers.cc +42 -39
  1625. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  1626. data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
  1627. data/third_party/abseil-cpp/absl/strings/str_cat.h +70 -16
  1628. data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
  1629. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  1630. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  1631. data/third_party/abseil-cpp/absl/strings/string_view.cc +8 -19
  1632. data/third_party/abseil-cpp/absl/strings/string_view.h +6 -12
  1633. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  1634. data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
  1635. data/third_party/abseil-cpp/absl/strings/substitute.h +55 -21
  1636. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  1637. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  1638. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
  1639. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
  1640. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
  1641. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  1642. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  1643. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  1644. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  1645. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +172 -88
  1646. data/third_party/abseil-cpp/absl/synchronization/mutex.h +102 -55
  1647. data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
  1648. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -3
  1649. data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
  1650. data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
  1651. data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
  1652. data/third_party/abseil-cpp/absl/time/duration.cc +12 -11
  1653. data/third_party/abseil-cpp/absl/time/format.cc +2 -1
  1654. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  1655. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
  1656. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
  1657. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
  1658. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
  1659. data/third_party/abseil-cpp/absl/time/time.cc +2 -2
  1660. data/third_party/abseil-cpp/absl/time/time.h +268 -169
  1661. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  1662. data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
  1663. data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
  1664. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  1665. data/third_party/abseil-cpp/absl/types/span.h +31 -8
  1666. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +1 -1
  1667. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +1 -2
  1668. data/third_party/re2/re2/bitstate.cc +3 -3
  1669. data/third_party/re2/re2/dfa.cc +13 -13
  1670. data/third_party/re2/re2/nfa.cc +4 -4
  1671. data/third_party/re2/re2/onepass.cc +2 -2
  1672. data/third_party/re2/re2/prefilter_tree.cc +27 -59
  1673. data/third_party/re2/re2/prefilter_tree.h +3 -2
  1674. data/third_party/re2/re2/prog.cc +11 -2
  1675. data/third_party/re2/re2/prog.h +17 -5
  1676. data/third_party/re2/re2/re2.cc +6 -11
  1677. data/third_party/re2/re2/re2.h +1 -1
  1678. data/third_party/re2/re2/regexp.cc +1 -2
  1679. data/third_party/re2/re2/stringpiece.h +10 -7
  1680. data/third_party/re2/re2/unicode_casefold.cc +25 -11
  1681. data/third_party/re2/re2/unicode_groups.cc +319 -151
  1682. data/third_party/re2/re2/walker-inl.h +3 -2
  1683. data/third_party/re2/util/mutex.h +4 -4
  1684. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  1685. data/third_party/upb/upb/arena.c +277 -0
  1686. data/third_party/upb/upb/arena.h +225 -0
  1687. data/third_party/upb/upb/array.c +114 -0
  1688. data/third_party/upb/upb/array.h +83 -0
  1689. data/third_party/upb/upb/collections.h +36 -0
  1690. data/third_party/upb/upb/decode.c +161 -65
  1691. data/third_party/upb/upb/decode.h +1 -0
  1692. data/third_party/upb/upb/decode_fast.c +1 -1
  1693. data/third_party/upb/upb/def.c +10 -2
  1694. data/third_party/upb/upb/def.h +8 -1
  1695. data/third_party/upb/upb/def.hpp +7 -4
  1696. data/third_party/upb/upb/encode.c +29 -20
  1697. data/third_party/upb/upb/encode.h +16 -6
  1698. data/third_party/upb/upb/extension_registry.c +93 -0
  1699. data/third_party/upb/upb/extension_registry.h +84 -0
  1700. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  1701. data/third_party/upb/upb/internal/table.h +385 -0
  1702. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  1703. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  1704. data/third_party/upb/upb/json_decode.c +1512 -0
  1705. data/third_party/upb/upb/json_decode.h +47 -0
  1706. data/third_party/upb/upb/json_encode.c +7 -3
  1707. data/third_party/upb/upb/json_encode.h +6 -3
  1708. data/third_party/upb/upb/map.c +108 -0
  1709. data/third_party/upb/upb/map.h +117 -0
  1710. data/third_party/upb/upb/message_value.h +66 -0
  1711. data/third_party/upb/upb/mini_table.c +1147 -0
  1712. data/third_party/upb/upb/mini_table.h +189 -0
  1713. data/third_party/upb/upb/mini_table.hpp +112 -0
  1714. data/third_party/upb/upb/msg.c +2 -62
  1715. data/third_party/upb/upb/msg.h +2 -45
  1716. data/third_party/upb/upb/msg_internal.h +28 -22
  1717. data/third_party/upb/upb/port_def.inc +2 -1
  1718. data/third_party/upb/upb/port_undef.inc +1 -0
  1719. data/third_party/upb/upb/reflection.c +2 -159
  1720. data/third_party/upb/upb/reflection.h +2 -112
  1721. data/third_party/upb/upb/status.c +86 -0
  1722. data/third_party/upb/upb/status.h +66 -0
  1723. data/third_party/upb/upb/table.c +2 -2
  1724. data/third_party/upb/upb/table_internal.h +3 -352
  1725. data/third_party/upb/upb/text_encode.c +3 -2
  1726. data/third_party/upb/upb/upb.c +4 -290
  1727. data/third_party/upb/upb/upb.h +7 -196
  1728. data/third_party/zlib/compress.c +3 -3
  1729. data/third_party/zlib/crc32.c +21 -12
  1730. data/third_party/zlib/deflate.c +112 -106
  1731. data/third_party/zlib/deflate.h +2 -2
  1732. data/third_party/zlib/gzlib.c +1 -1
  1733. data/third_party/zlib/gzread.c +3 -5
  1734. data/third_party/zlib/gzwrite.c +1 -1
  1735. data/third_party/zlib/infback.c +10 -7
  1736. data/third_party/zlib/inflate.c +5 -2
  1737. data/third_party/zlib/inftrees.c +2 -2
  1738. data/third_party/zlib/inftrees.h +1 -1
  1739. data/third_party/zlib/trees.c +61 -62
  1740. data/third_party/zlib/uncompr.c +2 -2
  1741. data/third_party/zlib/zconf.h +16 -3
  1742. data/third_party/zlib/zlib.h +10 -10
  1743. data/third_party/zlib/zutil.c +9 -7
  1744. data/third_party/zlib/zutil.h +1 -0
  1745. metadata +372 -102
  1746. data/include/grpc/impl/codegen/gpr_slice.h +0 -71
  1747. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -42
  1748. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -48
  1749. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -185
  1750. data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -65
  1751. data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
  1752. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -89
  1753. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -50
  1754. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -186
  1755. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -179
  1756. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -456
  1757. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -53
  1758. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -386
  1759. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -61
  1760. data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
  1761. data/src/core/ext/xds/certificate_provider_registry.h +0 -57
  1762. data/src/core/lib/channel/handshaker_factory.h +0 -50
  1763. data/src/core/lib/channel/handshaker_registry.cc +0 -50
  1764. data/src/core/lib/channel/handshaker_registry.h +0 -71
  1765. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  1766. data/src/core/lib/event_engine/sockaddr.h +0 -44
  1767. data/src/core/lib/gpr/env.h +0 -40
  1768. data/src/core/lib/gpr/env_linux.cc +0 -75
  1769. data/src/core/lib/gpr/env_posix.cc +0 -46
  1770. data/src/core/lib/gpr/env_windows.cc +0 -74
  1771. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  1772. data/src/core/lib/gpr/murmur_hash.h +0 -29
  1773. data/src/core/lib/gpr/string_windows.h +0 -32
  1774. data/src/core/lib/gpr/tls.h +0 -158
  1775. data/src/core/lib/gprpp/capture.h +0 -76
  1776. data/src/core/lib/iomgr/error_internal.h +0 -66
  1777. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  1778. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  1779. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  1780. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  1781. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  1782. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  1783. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  1784. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  1785. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
  1786. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  1787. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  1788. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  1789. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  1790. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  1791. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  1792. data/src/core/lib/profiling/basic_timers.cc +0 -295
  1793. data/src/core/lib/profiling/stap_timers.cc +0 -50
  1794. data/src/core/lib/profiling/timers.h +0 -94
  1795. data/src/core/lib/promise/call_push_pull.h +0 -144
  1796. data/src/core/lib/security/security_connector/load_system_roots_linux.h +0 -46
  1797. data/src/core/lib/slice/slice_api.cc +0 -39
  1798. data/src/core/lib/slice/slice_refcount_base.h +0 -61
  1799. data/src/core/lib/slice/slice_split.cc +0 -100
  1800. data/src/core/lib/slice/slice_split.h +0 -40
  1801. data/src/core/lib/transport/byte_stream.cc +0 -164
  1802. data/src/core/lib/transport/byte_stream.h +0 -166
  1803. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -1,25 +1,27 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
1
+ //
2
+ //
3
+ // Copyright 2015 gRPC authors.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+ // You may obtain a copy of the License at
8
+ //
9
+ // http://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing, software
12
+ // distributed under the License is distributed on an "AS IS" BASIS,
13
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ // See the License for the specific language governing permissions and
15
+ // limitations under the License.
16
+ //
17
+ //
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
- #include <grpc/impl/codegen/grpc_types.h>
21
+ #include <grpc/impl/grpc_types.h>
22
22
 
23
+ #include "src/core/lib/gprpp/global_config_generic.h"
24
+ #include "src/core/lib/iomgr/exec_ctx.h"
23
25
  #include "src/core/lib/iomgr/port.h"
24
26
 
25
27
  #ifdef GRPC_POSIX_SOCKET_TCP
@@ -47,18 +49,22 @@
47
49
  #include <grpc/support/time.h>
48
50
 
49
51
  #include "src/core/lib/address_utils/sockaddr_utils.h"
50
- #include "src/core/lib/channel/channel_args.h"
52
+ #include "src/core/lib/debug/event_log.h"
51
53
  #include "src/core/lib/debug/stats.h"
54
+ #include "src/core/lib/debug/stats_data.h"
52
55
  #include "src/core/lib/debug/trace.h"
56
+ #include "src/core/lib/experiments/experiments.h"
53
57
  #include "src/core/lib/gpr/string.h"
54
58
  #include "src/core/lib/gpr/useful.h"
59
+ #include "src/core/lib/gprpp/crash.h"
60
+ #include "src/core/lib/gprpp/strerror.h"
55
61
  #include "src/core/lib/gprpp/sync.h"
56
62
  #include "src/core/lib/iomgr/buffer_list.h"
57
63
  #include "src/core/lib/iomgr/ev_posix.h"
64
+ #include "src/core/lib/iomgr/event_engine_shims/endpoint.h"
58
65
  #include "src/core/lib/iomgr/executor.h"
59
66
  #include "src/core/lib/iomgr/socket_utils_posix.h"
60
67
  #include "src/core/lib/iomgr/tcp_posix.h"
61
- #include "src/core/lib/profiling/timers.h"
62
68
  #include "src/core/lib/resource_quota/api.h"
63
69
  #include "src/core/lib/resource_quota/memory_quota.h"
64
70
  #include "src/core/lib/resource_quota/trace.h"
@@ -105,7 +111,7 @@ class TcpZerocopySendRecord {
105
111
 
106
112
  ~TcpZerocopySendRecord() {
107
113
  AssertEmpty();
108
- grpc_slice_buffer_destroy_internal(&buf_);
114
+ grpc_slice_buffer_destroy(&buf_);
109
115
  }
110
116
 
111
117
  // Given the slices that we wish to send, and the current offset into the
@@ -173,7 +179,7 @@ class TcpZerocopySendRecord {
173
179
  // reference to the underlying data since we no longer need it.
174
180
  void AllSendsComplete() {
175
181
  GPR_DEBUG_ASSERT(ref_.load(std::memory_order_relaxed) == 0);
176
- grpc_slice_buffer_reset_and_unref_internal(&buf_);
182
+ grpc_slice_buffer_reset_and_unref(&buf_);
177
183
  }
178
184
 
179
185
  grpc_slice_buffer buf_;
@@ -232,7 +238,11 @@ class TcpZerocopySendCtx {
232
238
  // buffers that were sent with the corresponding call to sendmsg().
233
239
  void NoteSend(TcpZerocopySendRecord* record) {
234
240
  record->Ref();
235
- AssociateSeqWithSendRecord(last_send_, record);
241
+ {
242
+ MutexLock guard(&lock_);
243
+ is_in_write_ = true;
244
+ AssociateSeqWithSendRecordLocked(last_send_, record);
245
+ }
236
246
  ++last_send_;
237
247
  }
238
248
 
@@ -253,8 +263,8 @@ class TcpZerocopySendCtx {
253
263
 
254
264
  // Simply associate this send record (and the underlying sent data buffers)
255
265
  // with the implicit sequence number for this zerocopy sendmsg().
256
- void AssociateSeqWithSendRecord(uint32_t seq, TcpZerocopySendRecord* record) {
257
- MutexLock guard(&lock_);
266
+ void AssociateSeqWithSendRecordLocked(uint32_t seq,
267
+ TcpZerocopySendRecord* record) {
258
268
  ctx_lookup_.emplace(seq, record);
259
269
  }
260
270
 
@@ -312,7 +322,107 @@ class TcpZerocopySendCtx {
312
322
  // zerocopy is not useful for small transfers.
313
323
  size_t threshold_bytes() const { return threshold_bytes_; }
314
324
 
325
+ // Expected to be called by handler reading messages from the err queue.
326
+ // It is used to indicate that some OMem meory is now available. It returns
327
+ // true to tell the caller to mark the file descriptor as immediately
328
+ // writable.
329
+ //
330
+ // If a write is currently in progress on the socket (ie. we have issued a
331
+ // sendmsg() and are about to check its return value) then we set omem state
332
+ // to CHECK to make the sending thread know that some tcp_omem was
333
+ // concurrently freed even if sendmsg() returns ENOBUFS. In this case, since
334
+ // there is already an active send thread, we do not need to mark the
335
+ // socket writeable, so we return false.
336
+ //
337
+ // If there was no write in progress on the socket, and the socket was not
338
+ // marked as FULL, then we need not mark the socket writeable now that some
339
+ // tcp_omem memory is freed since it was not considered as blocked on
340
+ // tcp_omem to begin with. So in this case, return false.
341
+ //
342
+ // But, if a write was not in progress and the omem state was FULL, then we
343
+ // need to mark the socket writeable since it is no longer blocked by
344
+ // tcp_omem. In this case, return true.
345
+ //
346
+ // Please refer to the STATE TRANSITION DIAGRAM below for more details.
347
+ //
348
+ bool UpdateZeroCopyOMemStateAfterFree() {
349
+ MutexLock guard(&lock_);
350
+ if (is_in_write_) {
351
+ zcopy_enobuf_state_ = OMemState::CHECK;
352
+ return false;
353
+ }
354
+ GPR_DEBUG_ASSERT(zcopy_enobuf_state_ != OMemState::CHECK);
355
+ if (zcopy_enobuf_state_ == OMemState::FULL) {
356
+ // A previous sendmsg attempt was blocked by ENOBUFS. Return true to
357
+ // mark the fd as writable so the next write attempt could be made.
358
+ zcopy_enobuf_state_ = OMemState::OPEN;
359
+ return true;
360
+ } else if (zcopy_enobuf_state_ == OMemState::OPEN) {
361
+ // No need to mark the fd as writable because the previous write
362
+ // attempt did not encounter ENOBUFS.
363
+ return false;
364
+ } else {
365
+ // This state should never be reached because it implies that the previous
366
+ // state was CHECK and is_in_write is false. This means that after the
367
+ // previous sendmsg returned and set is_in_write to false, it did
368
+ // not update the z-copy change from CHECK to OPEN.
369
+ Crash("OMem state error!");
370
+ }
371
+ }
372
+
373
+ // Expected to be called by the thread calling sendmsg after the syscall
374
+ // invocation. is complete. If an ENOBUF is seen, it checks if the error
375
+ // handler (Tx0cp completions) has already run and free'ed up some OMem. It
376
+ // returns true indicating that the write can be attempted again immediately.
377
+ // If ENOBUFS was seen but no Tx0cp completions have been received between the
378
+ // sendmsg() and us taking this lock, then tcp_omem is still full from our
379
+ // point of view. Therefore, we do not signal that the socket is writeable
380
+ // with respect to the availability of tcp_omem. Therefore the function
381
+ // returns false. This indicates that another write should not be attempted
382
+ // immediately and the calling thread should wait until the socket is writable
383
+ // again. If ENOBUFS was not seen, then again return false because the next
384
+ // write should be attempted only when the socket is writable again.
385
+ //
386
+ // Please refer to the STATE TRANSITION DIAGRAM below for more details.
387
+ //
388
+ bool UpdateZeroCopyOMemStateAfterSend(bool seen_enobuf) {
389
+ MutexLock guard(&lock_);
390
+ is_in_write_ = false;
391
+ if (seen_enobuf) {
392
+ if (zcopy_enobuf_state_ == OMemState::CHECK) {
393
+ zcopy_enobuf_state_ = OMemState::OPEN;
394
+ return true;
395
+ } else {
396
+ zcopy_enobuf_state_ = OMemState::FULL;
397
+ }
398
+ } else if (zcopy_enobuf_state_ != OMemState::OPEN) {
399
+ zcopy_enobuf_state_ = OMemState::OPEN;
400
+ }
401
+ return false;
402
+ }
403
+
315
404
  private:
405
+ // STATE TRANSITION DIAGRAM
406
+ //
407
+ // sendmsg succeeds Tx-zero copy succeeds and there is no active sendmsg
408
+ // ----<<--+ +------<<-------------------------------------+
409
+ // | | | |
410
+ // | | v sendmsg returns ENOBUFS |
411
+ // +-----> OPEN ------------->>-------------------------> FULL
412
+ // ^ |
413
+ // | |
414
+ // | sendmsg completes |
415
+ // +----<<---------- CHECK <-------<<-------------+
416
+ // Tx-zero copy succeeds and there is
417
+ // an active sendmsg
418
+ //
419
+ enum class OMemState : int8_t {
420
+ OPEN, // Everything is clear and omem is not full.
421
+ FULL, // The last sendmsg() has returned with an errno of ENOBUFS.
422
+ CHECK, // Error queue is read while is_in_write_ was true, so we should
423
+ // check this state after the sendmsg.
424
+ };
425
+
316
426
  TcpZerocopySendRecord* ReleaseSendRecordLocked(uint32_t seq) {
317
427
  auto iter = ctx_lookup_.find(seq);
318
428
  GPR_DEBUG_ASSERT(iter != ctx_lookup_.end());
@@ -349,6 +459,8 @@ class TcpZerocopySendCtx {
349
459
  size_t threshold_bytes_ = kDefaultSendBytesThreshold;
350
460
  std::unordered_map<uint32_t, TcpZerocopySendRecord*> ctx_lookup_;
351
461
  bool memory_limited_ = false;
462
+ bool is_in_write_ = false;
463
+ OMemState zcopy_enobuf_state_;
352
464
  };
353
465
 
354
466
  } // namespace grpc_core
@@ -357,16 +469,21 @@ using grpc_core::TcpZerocopySendCtx;
357
469
  using grpc_core::TcpZerocopySendRecord;
358
470
 
359
471
  namespace {
472
+
360
473
  struct grpc_tcp {
361
- grpc_tcp(int max_sends, size_t send_bytes_threshold)
362
- : tcp_zerocopy_send_ctx(max_sends, send_bytes_threshold) {}
474
+ explicit grpc_tcp(const grpc_core::PosixTcpOptions& tcp_options)
475
+ : min_read_chunk_size(tcp_options.tcp_min_read_chunk_size),
476
+ max_read_chunk_size(tcp_options.tcp_max_read_chunk_size),
477
+ tcp_zerocopy_send_ctx(
478
+ tcp_options.tcp_tx_zerocopy_max_simultaneous_sends,
479
+ tcp_options.tcp_tx_zerocopy_send_bytes_threshold) {}
363
480
  grpc_endpoint base;
364
481
  grpc_fd* em_fd;
365
482
  int fd;
366
- /* Used by the endpoint read function to distinguish the very first read call
367
- * from the rest */
483
+ // Used by the endpoint read function to distinguish the very first read call
484
+ // from the rest
368
485
  bool is_first_read;
369
- bool has_posted_reclaimer;
486
+ bool has_posted_reclaimer ABSL_GUARDED_BY(read_mu) = false;
370
487
  double target_length;
371
488
  double bytes_read_this_round;
372
489
  grpc_core::RefCount refcount;
@@ -374,17 +491,18 @@ struct grpc_tcp {
374
491
 
375
492
  int min_read_chunk_size;
376
493
  int max_read_chunk_size;
494
+ int set_rcvlowat = 0;
377
495
 
378
- /* garbage after the last read */
496
+ // garbage after the last read
379
497
  grpc_slice_buffer last_read_buffer;
380
498
 
381
- absl::Mutex read_mu;
499
+ grpc_core::Mutex read_mu;
382
500
  grpc_slice_buffer* incoming_buffer ABSL_GUARDED_BY(read_mu) = nullptr;
383
- int inq; /* bytes pending on the socket from the last read. */
384
- bool inq_capable; /* cache whether kernel supports inq */
501
+ int inq; // bytes pending on the socket from the last read.
502
+ bool inq_capable; // cache whether kernel supports inq
385
503
 
386
504
  grpc_slice_buffer* outgoing_buffer;
387
- /* byte within outgoing_buffer->slices[0] to write next */
505
+ // byte within outgoing_buffer->slices[0] to write next
388
506
  size_t outgoing_byte_idx;
389
507
 
390
508
  grpc_closure* read_cb;
@@ -402,33 +520,33 @@ struct grpc_tcp {
402
520
  grpc_core::MemoryOwner memory_owner;
403
521
  grpc_core::MemoryAllocator::Reservation self_reservation;
404
522
 
405
- grpc_core::TracedBuffer* tb_head; /* List of traced buffers */
406
- gpr_mu tb_mu; /* Lock for access to list of traced buffers */
407
-
408
- /* grpc_endpoint_write takes an argument which if non-null means that the
409
- * transport layer wants the TCP layer to collect timestamps for this write.
410
- * This arg is forwarded to the timestamps callback function when the ACK
411
- * timestamp is received from the kernel. This arg is a (void *) which allows
412
- * users of this API to pass in a pointer to any kind of structure. This
413
- * structure could actually be a tag or any book-keeping object that the user
414
- * can use to distinguish between different traced writes. The only
415
- * requirement from the TCP endpoint layer is that this arg should be non-null
416
- * if the user wants timestamps for the write. */
523
+ grpc_core::TracedBufferList tb_list; // List of traced buffers
524
+
525
+ // grpc_endpoint_write takes an argument which if non-null means that the
526
+ // transport layer wants the TCP layer to collect timestamps for this write.
527
+ // This arg is forwarded to the timestamps callback function when the ACK
528
+ // timestamp is received from the kernel. This arg is a (void *) which allows
529
+ // users of this API to pass in a pointer to any kind of structure. This
530
+ // structure could actually be a tag or any book-keeping object that the user
531
+ // can use to distinguish between different traced writes. The only
532
+ // requirement from the TCP endpoint layer is that this arg should be non-null
533
+ // if the user wants timestamps for the write.
417
534
  void* outgoing_buffer_arg;
418
- /* A counter which starts at 0. It is initialized the first time the socket
419
- * options for collecting timestamps are set, and is incremented with each
420
- * byte sent. */
535
+ // A counter which starts at 0. It is initialized the first time the socket
536
+ // options for collecting timestamps are set, and is incremented with each
537
+ // byte sent.
421
538
  int bytes_counter;
422
- bool socket_ts_enabled; /* True if timestamping options are set on the socket
423
- */
424
- bool ts_capable; /* Cache whether we can set timestamping options */
425
- gpr_atm stop_error_notification; /* Set to 1 if we do not want to be notified
426
- on errors anymore */
539
+ bool socket_ts_enabled; // True if timestamping options are set on the socket
540
+ //
541
+ bool ts_capable; // Cache whether we can set timestamping options
542
+ gpr_atm stop_error_notification; // Set to 1 if we do not want to be notified
543
+ // on errors anymore
427
544
  TcpZerocopySendCtx tcp_zerocopy_send_ctx;
428
545
  TcpZerocopySendRecord* current_zerocopy_send = nullptr;
429
546
 
430
- bool curr_read_completed;
431
- int curr_min_read_chunk_size;
547
+ int min_progress_size; // A hint from upper layers specifying the minimum
548
+ // number of bytes that need to be read to make
549
+ // meaningful progress
432
550
  };
433
551
 
434
552
  struct backup_poller {
@@ -468,14 +586,13 @@ static void run_poller(void* bp, grpc_error_handle /*error_ignored*/) {
468
586
  }
469
587
  gpr_mu_lock(p->pollset_mu);
470
588
  grpc_core::Timestamp deadline =
471
- grpc_core::ExecCtx::Get()->Now() + grpc_core::Duration::Seconds(10);
472
- GRPC_STATS_INC_TCP_BACKUP_POLLER_POLLS();
589
+ grpc_core::Timestamp::Now() + grpc_core::Duration::Seconds(10);
473
590
  GRPC_LOG_IF_ERROR(
474
591
  "backup_poller:pollset_work",
475
592
  grpc_pollset_work(BACKUP_POLLER_POLLSET(p), nullptr, deadline));
476
593
  gpr_mu_unlock(p->pollset_mu);
477
594
  g_backup_poller_mu->Lock();
478
- /* last "uncovered" notification is the ref that keeps us polling */
595
+ // last "uncovered" notification is the ref that keeps us polling
479
596
  if (g_uncovered_notifications_pending == 1) {
480
597
  GPR_ASSERT(g_backup_poller == p);
481
598
  g_backup_poller = nullptr;
@@ -492,7 +609,7 @@ static void run_poller(void* bp, grpc_error_handle /*error_ignored*/) {
492
609
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
493
610
  gpr_log(GPR_INFO, "BACKUP_POLLER:%p reschedule", p);
494
611
  }
495
- grpc_core::Executor::Run(&p->run_poller, GRPC_ERROR_NONE,
612
+ grpc_core::Executor::Run(&p->run_poller, absl::OkStatus(),
496
613
  grpc_core::ExecutorType::DEFAULT,
497
614
  grpc_core::ExecutorJobType::LONG);
498
615
  }
@@ -530,13 +647,12 @@ static void cover_self(grpc_tcp* tcp) {
530
647
  g_backup_poller = p;
531
648
  grpc_pollset_init(BACKUP_POLLER_POLLSET(p), &p->pollset_mu);
532
649
  g_backup_poller_mu->Unlock();
533
- GRPC_STATS_INC_TCP_BACKUP_POLLERS_CREATED();
534
650
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
535
651
  gpr_log(GPR_INFO, "BACKUP_POLLER:%p create", p);
536
652
  }
537
653
  grpc_core::Executor::Run(
538
654
  GRPC_CLOSURE_INIT(&p->run_poller, run_poller, p, nullptr),
539
- GRPC_ERROR_NONE, grpc_core::ExecutorType::DEFAULT,
655
+ absl::OkStatus(), grpc_core::ExecutorType::DEFAULT,
540
656
  grpc_core::ExecutorJobType::LONG);
541
657
  } else {
542
658
  old_count = g_uncovered_notifications_pending++;
@@ -571,7 +687,7 @@ static void tcp_drop_uncovered_then_handle_write(void* arg,
571
687
  grpc_error_handle error) {
572
688
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
573
689
  gpr_log(GPR_INFO, "TCP:%p got_write: %s", arg,
574
- grpc_error_std_string(error).c_str());
690
+ grpc_core::StatusToString(error).c_str());
575
691
  }
576
692
  drop_uncovered(static_cast<grpc_tcp*>(arg));
577
693
  tcp_handle_write(arg, error);
@@ -582,9 +698,9 @@ static void add_to_estimate(grpc_tcp* tcp, size_t bytes) {
582
698
  }
583
699
 
584
700
  static void finish_estimate(grpc_tcp* tcp) {
585
- /* If we read >80% of the target buffer in one read loop, increase the size
586
- of the target buffer to either the amount read, or twice its previous
587
- value */
701
+ // If we read >80% of the target buffer in one read loop, increase the size
702
+ // of the target buffer to either the amount read, or twice its previous
703
+ // value
588
704
  if (tcp->bytes_read_this_round > tcp->target_length * 0.8) {
589
705
  tcp->target_length =
590
706
  std::max(2 * tcp->target_length, tcp->bytes_read_this_round);
@@ -599,11 +715,12 @@ static grpc_error_handle tcp_annotate_error(grpc_error_handle src_error,
599
715
  grpc_tcp* tcp) {
600
716
  return grpc_error_set_str(
601
717
  grpc_error_set_int(
602
- grpc_error_set_int(src_error, GRPC_ERROR_INT_FD, tcp->fd),
603
- /* All tcp errors are marked with UNAVAILABLE so that application may
604
- * choose to retry. */
605
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE),
606
- GRPC_ERROR_STR_TARGET_ADDRESS, tcp->peer_string);
718
+ grpc_error_set_int(src_error, grpc_core::StatusIntProperty::kFd,
719
+ tcp->fd),
720
+ // All tcp errors are marked with UNAVAILABLE so that application may
721
+ // choose to retry.
722
+ grpc_core::StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE),
723
+ grpc_core::StatusStrProperty::kTargetAddress, tcp->peer_string);
607
724
  }
608
725
 
609
726
  static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error);
@@ -618,15 +735,10 @@ static void tcp_shutdown(grpc_endpoint* ep, grpc_error_handle why) {
618
735
  static void tcp_free(grpc_tcp* tcp) {
619
736
  grpc_fd_orphan(tcp->em_fd, tcp->release_fd_cb, tcp->release_fd,
620
737
  "tcp_unref_orphan");
621
- grpc_slice_buffer_destroy_internal(&tcp->last_read_buffer);
622
- /* The lock is not really necessary here, since all refs have been released */
623
- gpr_mu_lock(&tcp->tb_mu);
624
- grpc_core::TracedBuffer::Shutdown(
625
- &tcp->tb_head, tcp->outgoing_buffer_arg,
626
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("endpoint destroyed"));
627
- gpr_mu_unlock(&tcp->tb_mu);
738
+ grpc_slice_buffer_destroy(&tcp->last_read_buffer);
739
+ tcp->tb_list.Shutdown(tcp->outgoing_buffer_arg,
740
+ GRPC_ERROR_CREATE("endpoint destroyed"));
628
741
  tcp->outgoing_buffer_arg = nullptr;
629
- gpr_mu_destroy(&tcp->tb_mu);
630
742
  delete tcp;
631
743
  }
632
744
 
@@ -658,7 +770,7 @@ static void tcp_ref(grpc_tcp* tcp) { tcp->refcount.Ref(); }
658
770
 
659
771
  static void tcp_destroy(grpc_endpoint* ep) {
660
772
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
661
- grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
773
+ grpc_slice_buffer_reset_and_unref(&tcp->last_read_buffer);
662
774
  if (grpc_event_engine_can_track_errors()) {
663
775
  ZerocopyDisableAndWaitForRemaining(tcp);
664
776
  gpr_atm_no_barrier_store(&tcp->stop_error_notification, true);
@@ -674,10 +786,10 @@ static void perform_reclamation(grpc_tcp* tcp)
674
786
  }
675
787
  tcp->read_mu.Lock();
676
788
  if (tcp->incoming_buffer != nullptr) {
677
- grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
789
+ grpc_slice_buffer_reset_and_unref(tcp->incoming_buffer);
678
790
  }
679
- tcp->read_mu.Unlock();
680
791
  tcp->has_posted_reclaimer = false;
792
+ tcp->read_mu.Unlock();
681
793
  }
682
794
 
683
795
  static void maybe_post_reclaimer(grpc_tcp* tcp)
@@ -700,23 +812,67 @@ static void tcp_trace_read(grpc_tcp* tcp, grpc_error_handle error)
700
812
  gpr_log(GPR_INFO, "TCP:%p call_cb %p %p:%p", tcp, cb, cb->cb, cb->cb_arg);
701
813
  size_t i;
702
814
  gpr_log(GPR_INFO, "READ %p (peer=%s) error=%s", tcp,
703
- tcp->peer_string.c_str(), grpc_error_std_string(error).c_str());
815
+ tcp->peer_string.c_str(), grpc_core::StatusToString(error).c_str());
704
816
  if (gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
705
817
  for (i = 0; i < tcp->incoming_buffer->count; i++) {
706
818
  char* dump = grpc_dump_slice(tcp->incoming_buffer->slices[i],
707
819
  GPR_DUMP_HEX | GPR_DUMP_ASCII);
708
- gpr_log(GPR_DEBUG, "DATA: %s", dump);
820
+ gpr_log(GPR_DEBUG, "READ DATA: %s", dump);
709
821
  gpr_free(dump);
710
822
  }
711
823
  }
712
824
  }
713
825
  }
714
826
 
715
- /* Returns true if data available to read or error other than EAGAIN. */
716
- #define MAX_READ_IOVEC 4
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
+
840
+ remaining = std::min(remaining, kRcvLowatMax);
841
+
842
+ // Setting SO_RCVLOWAT for small quantities does not save on CPU.
843
+ if (remaining < 2 * kRcvLowatThreshold) {
844
+ remaining = 0;
845
+ }
846
+
847
+ // Decrement remaining by kRcvLowatThreshold. This would have the effect of
848
+ // waking up a little early. It would help with latency because some bytes
849
+ // may arrive while we execute the recvmsg syscall after waking up.
850
+ if (remaining > 0) {
851
+ remaining -= kRcvLowatThreshold;
852
+ }
853
+
854
+ // We still do not know the RPC size. Do not set SO_RCVLOWAT.
855
+ if (tcp->set_rcvlowat <= 1 && remaining <= 1) return;
856
+
857
+ // Previous value is still valid. No change needed in SO_RCVLOWAT.
858
+ if (tcp->set_rcvlowat == remaining) {
859
+ return;
860
+ }
861
+ if (setsockopt(tcp->fd, SOL_SOCKET, SO_RCVLOWAT, &remaining,
862
+ sizeof(remaining)) != 0) {
863
+ gpr_log(GPR_ERROR, "%s",
864
+ absl::StrCat("Cannot set SO_RCVLOWAT on fd=", tcp->fd,
865
+ " err=", grpc_core::StrError(errno).c_str())
866
+ .c_str());
867
+ return;
868
+ }
869
+ tcp->set_rcvlowat = remaining;
870
+ }
871
+
872
+ // Returns true if data available to read or error other than EAGAIN.
873
+ #define MAX_READ_IOVEC 64
717
874
  static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
718
875
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(tcp->read_mu) {
719
- GPR_TIMER_SCOPE("tcp_do_read", 0);
720
876
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
721
877
  gpr_log(GPR_INFO, "TCP:%p do_read", tcp);
722
878
  }
@@ -731,7 +887,7 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
731
887
  CMSG_SPACE(sizeof(grpc_core::scm_timestamping)) + CMSG_SPACE(sizeof(int));
732
888
  #else
733
889
  constexpr size_t cmsg_alloc_space = 24 /* CMSG_SPACE(sizeof(int)) */;
734
- #endif /* GRPC_LINUX_ERRQUEUE */
890
+ #endif // GRPC_LINUX_ERRQUEUE
735
891
  char cmsgbuf[cmsg_alloc_space];
736
892
  for (size_t i = 0; i < iov_len; i++) {
737
893
  iov[i].iov_base = GRPC_SLICE_START_PTR(tcp->incoming_buffer->slices[i]);
@@ -739,11 +895,12 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
739
895
  }
740
896
 
741
897
  GPR_ASSERT(tcp->incoming_buffer->length != 0);
898
+ GPR_DEBUG_ASSERT(tcp->min_progress_size > 0);
742
899
 
743
900
  do {
744
- /* Assume there is something on the queue. If we receive TCP_INQ from
745
- * kernel, we will update this value, otherwise, we have to assume there is
746
- * always something to read until we get EAGAIN. */
901
+ // Assume there is something on the queue. If we receive TCP_INQ from
902
+ // kernel, we will update this value, otherwise, we have to assume there is
903
+ // always something to read until we get EAGAIN.
747
904
  tcp->inq = 1;
748
905
 
749
906
  msg.msg_name = nullptr;
@@ -759,51 +916,49 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
759
916
  }
760
917
  msg.msg_flags = 0;
761
918
 
762
- GRPC_STATS_INC_TCP_READ_OFFER(tcp->incoming_buffer->length);
763
- GRPC_STATS_INC_TCP_READ_OFFER_IOV_SIZE(tcp->incoming_buffer->count);
919
+ grpc_core::global_stats().IncrementTcpReadOffer(
920
+ tcp->incoming_buffer->length);
921
+ grpc_core::global_stats().IncrementTcpReadOfferIovSize(
922
+ tcp->incoming_buffer->count);
764
923
 
765
924
  do {
766
- GPR_TIMER_SCOPE("recvmsg", 0);
767
- GRPC_STATS_INC_SYSCALL_READ();
925
+ grpc_core::global_stats().IncrementSyscallRead();
768
926
  read_bytes = recvmsg(tcp->fd, &msg, 0);
769
927
  } while (read_bytes < 0 && errno == EINTR);
770
928
 
771
- /* We have read something in previous reads. We need to deliver those
772
- * bytes to the upper layer. */
773
- if (read_bytes <= 0 && total_read_bytes > 0) {
929
+ if (read_bytes < 0 && errno == EAGAIN) {
930
+ // NB: After calling call_read_cb a parallel call of the read handler may
931
+ // be running.
932
+ if (total_read_bytes > 0) {
933
+ break;
934
+ }
935
+ finish_estimate(tcp);
936
+ tcp->inq = 0;
937
+ return false;
938
+ }
939
+
940
+ // We have read something in previous reads. We need to deliver those
941
+ // bytes to the upper layer.
942
+ if (read_bytes <= 0 && total_read_bytes >= 1) {
774
943
  tcp->inq = 1;
775
944
  break;
776
945
  }
777
946
 
778
- if (read_bytes < 0) {
779
- /* NB: After calling call_read_cb a parallel call of the read handler may
780
- * be running. */
781
- if (errno == EAGAIN) {
782
- tcp->curr_read_completed = true;
783
- finish_estimate(tcp);
784
- tcp->inq = 0;
785
- return false;
947
+ if (read_bytes <= 0) {
948
+ // 0 read size ==> end of stream
949
+ grpc_slice_buffer_reset_and_unref(tcp->incoming_buffer);
950
+ if (read_bytes == 0) {
951
+ *error = tcp_annotate_error(absl::InternalError("Socket closed"), tcp);
786
952
  } else {
787
- tcp->curr_read_completed = false;
788
- grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
789
- *error = tcp_annotate_error(GRPC_OS_ERROR(errno, "recvmsg"), tcp);
790
- return true;
953
+ *error =
954
+ tcp_annotate_error(absl::InternalError(absl::StrCat(
955
+ "recvmsg:", grpc_core::StrError(errno))),
956
+ tcp);
791
957
  }
792
- }
793
- if (read_bytes == 0) {
794
- /* 0 read size ==> end of stream
795
- *
796
- * We may have read something, i.e., total_read_bytes > 0, but
797
- * since the connection is closed we will drop the data here, because we
798
- * can't call the callback multiple times. */
799
- tcp->curr_read_completed = true;
800
- grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
801
- *error = tcp_annotate_error(
802
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Socket closed"), tcp);
803
958
  return true;
804
959
  }
805
960
 
806
- GRPC_STATS_INC_TCP_READ_SIZE(read_bytes);
961
+ grpc_core::global_stats().IncrementTcpReadSize(read_bytes);
807
962
  add_to_estimate(tcp, static_cast<size_t>(read_bytes));
808
963
  GPR_DEBUG_ASSERT((size_t)read_bytes <=
809
964
  tcp->incoming_buffer->length - total_read_bytes);
@@ -820,15 +975,15 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
820
975
  }
821
976
  }
822
977
  }
823
- #endif /* GRPC_HAVE_TCP_INQ */
978
+ #endif // GRPC_HAVE_TCP_INQ
824
979
 
825
980
  total_read_bytes += read_bytes;
826
981
  if (tcp->inq == 0 || total_read_bytes == tcp->incoming_buffer->length) {
827
982
  break;
828
983
  }
829
984
 
830
- /* We had a partial read, and still have space to read more data.
831
- * So, adjust IOVs and try to read more. */
985
+ // We had a partial read, and still have space to read more data.
986
+ // So, adjust IOVs and try to read more.
832
987
  size_t remaining = read_bytes;
833
988
  size_t j = 0;
834
989
  for (size_t i = 0; i < iov_len; i++) {
@@ -853,48 +1008,75 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
853
1008
  finish_estimate(tcp);
854
1009
  }
855
1010
 
856
- // There may be more data to be read because recvmsg did not return EAGAIN.
857
- tcp->curr_read_completed = false;
858
1011
  GPR_DEBUG_ASSERT(total_read_bytes > 0);
1012
+ *error = absl::OkStatus();
1013
+ if (grpc_core::IsTcpFrameSizeTuningEnabled()) {
1014
+ // Update min progress size based on the total number of bytes read in
1015
+ // this round.
1016
+ tcp->min_progress_size -= total_read_bytes;
1017
+ if (tcp->min_progress_size > 0) {
1018
+ // There is still some bytes left to be read before we can signal
1019
+ // the read as complete. Append the bytes read so far into
1020
+ // last_read_buffer which serves as a staging buffer. Return false
1021
+ // to indicate tcp_handle_read needs to be scheduled again.
1022
+ grpc_slice_buffer_move_first(tcp->incoming_buffer, total_read_bytes,
1023
+ &tcp->last_read_buffer);
1024
+ return false;
1025
+ } else {
1026
+ // The required number of bytes have been read. Append the bytes
1027
+ // read in this round into last_read_buffer. Then swap last_read_buffer
1028
+ // and incoming_buffer. Now incoming buffer contains all the bytes
1029
+ // read since the start of the last tcp_read operation. last_read_buffer
1030
+ // would contain any spare space left in the incoming buffer. This
1031
+ // space will be used in the next tcp_read operation.
1032
+ tcp->min_progress_size = 1;
1033
+ grpc_slice_buffer_move_first(tcp->incoming_buffer, total_read_bytes,
1034
+ &tcp->last_read_buffer);
1035
+ grpc_slice_buffer_swap(&tcp->last_read_buffer, tcp->incoming_buffer);
1036
+ return true;
1037
+ }
1038
+ }
859
1039
  if (total_read_bytes < tcp->incoming_buffer->length) {
860
1040
  grpc_slice_buffer_trim_end(tcp->incoming_buffer,
861
1041
  tcp->incoming_buffer->length - total_read_bytes,
862
1042
  &tcp->last_read_buffer);
863
1043
  }
864
- *error = GRPC_ERROR_NONE;
865
1044
  return true;
866
1045
  }
867
1046
 
868
1047
  static void maybe_make_read_slices(grpc_tcp* tcp)
869
1048
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(tcp->read_mu) {
870
- if (tcp->incoming_buffer->length == 0 &&
871
- tcp->incoming_buffer->count < MAX_READ_IOVEC) {
872
- if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
873
- gpr_log(GPR_INFO,
874
- "TCP:%p alloc_slices; min_chunk=%d max_chunk=%d target=%lf "
875
- "buf_len=%" PRIdPTR,
876
- tcp, tcp->min_read_chunk_size, tcp->max_read_chunk_size,
877
- tcp->target_length, tcp->incoming_buffer->length);
1049
+ static const int kBigAlloc = 64 * 1024;
1050
+ static const int kSmallAlloc = 8 * 1024;
1051
+ if (tcp->incoming_buffer->length <
1052
+ static_cast<size_t>(tcp->min_progress_size)) {
1053
+ size_t allocate_length = tcp->min_progress_size;
1054
+ const size_t target_length = static_cast<size_t>(tcp->target_length);
1055
+ // If memory pressure is low and we think there will be more than
1056
+ // min_progress_size bytes to read, allocate a bit more.
1057
+ const bool low_memory_pressure =
1058
+ tcp->memory_owner.GetPressureInfo().pressure_control_value < 0.8;
1059
+ if (low_memory_pressure && target_length > allocate_length) {
1060
+ allocate_length = target_length;
878
1061
  }
879
- int target_length = static_cast<int>(tcp->target_length);
880
1062
  int extra_wanted =
881
- target_length - static_cast<int>(tcp->incoming_buffer->length);
882
- if (tcp->curr_read_completed) {
883
- // Set it to false again to start the next block of reads
884
- tcp->curr_read_completed = false;
885
- // Reset curr_min_read_chunk_size for the next block of reads
886
- tcp->curr_min_read_chunk_size = tcp->min_read_chunk_size;
1063
+ allocate_length - static_cast<int>(tcp->incoming_buffer->length);
1064
+ if (extra_wanted >=
1065
+ (low_memory_pressure ? kSmallAlloc * 3 / 2 : kBigAlloc)) {
1066
+ while (extra_wanted > 0) {
1067
+ extra_wanted -= kBigAlloc;
1068
+ grpc_slice_buffer_add_indexed(tcp->incoming_buffer,
1069
+ tcp->memory_owner.MakeSlice(kBigAlloc));
1070
+ grpc_core::global_stats().IncrementTcpReadAlloc64k();
1071
+ }
887
1072
  } else {
888
- // Last read is not completed yet. Double the last min read chunk size.
889
- tcp->curr_min_read_chunk_size =
890
- std::min(2 * tcp->curr_min_read_chunk_size, tcp->max_read_chunk_size);
1073
+ while (extra_wanted > 0) {
1074
+ extra_wanted -= kSmallAlloc;
1075
+ grpc_slice_buffer_add_indexed(tcp->incoming_buffer,
1076
+ tcp->memory_owner.MakeSlice(kSmallAlloc));
1077
+ grpc_core::global_stats().IncrementTcpReadAlloc8k();
1078
+ }
891
1079
  }
892
- grpc_slice_buffer_add_indexed(
893
- tcp->incoming_buffer,
894
- tcp->memory_owner.MakeSlice(grpc_core::MemoryRequest(
895
- tcp->curr_min_read_chunk_size,
896
- grpc_core::Clamp(extra_wanted, tcp->curr_min_read_chunk_size,
897
- tcp->max_read_chunk_size))));
898
1080
  maybe_post_reclaimer(tcp);
899
1081
  }
900
1082
  }
@@ -903,24 +1085,33 @@ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error) {
903
1085
  grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
904
1086
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
905
1087
  gpr_log(GPR_INFO, "TCP:%p got_read: %s", tcp,
906
- grpc_error_std_string(error).c_str());
1088
+ grpc_core::StatusToString(error).c_str());
907
1089
  }
908
1090
  tcp->read_mu.Lock();
909
1091
  grpc_error_handle tcp_read_error;
910
- if (GPR_LIKELY(error == GRPC_ERROR_NONE)) {
1092
+ if (GPR_LIKELY(error.ok())) {
911
1093
  maybe_make_read_slices(tcp);
912
1094
  if (!tcp_do_read(tcp, &tcp_read_error)) {
913
- /* We've consumed the edge, request a new one */
1095
+ // Maybe update rcv lowat value based on the number of bytes read in this
1096
+ // round.
1097
+ update_rcvlowat(tcp);
914
1098
  tcp->read_mu.Unlock();
1099
+ // We've consumed the edge, request a new one
915
1100
  notify_on_read(tcp);
916
1101
  return;
917
1102
  }
918
1103
  tcp_trace_read(tcp, tcp_read_error);
919
1104
  } else {
920
- tcp_read_error = GRPC_ERROR_REF(error);
921
- grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
922
- grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
923
- }
1105
+ tcp_read_error = error;
1106
+ grpc_slice_buffer_reset_and_unref(tcp->incoming_buffer);
1107
+ grpc_slice_buffer_reset_and_unref(&tcp->last_read_buffer);
1108
+ }
1109
+ // Update rcv lowat needs to be called at the end of the current read
1110
+ // operation to ensure the right SO_RCVLOWAT value is set for the next read.
1111
+ // Otherwise the next endpoint read operation may get stuck indefinitely
1112
+ // because the previously set rcv lowat value will persist and the socket may
1113
+ // erroneously considered to not be ready for read.
1114
+ update_rcvlowat(tcp);
924
1115
  grpc_closure* cb = tcp->read_cb;
925
1116
  tcp->read_cb = nullptr;
926
1117
  tcp->incoming_buffer = nullptr;
@@ -930,62 +1121,67 @@ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error) {
930
1121
  }
931
1122
 
932
1123
  static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
933
- grpc_closure* cb, bool urgent) {
1124
+ grpc_closure* cb, bool urgent, int min_progress_size) {
934
1125
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
935
1126
  GPR_ASSERT(tcp->read_cb == nullptr);
936
1127
  tcp->read_cb = cb;
937
1128
  tcp->read_mu.Lock();
938
1129
  tcp->incoming_buffer = incoming_buffer;
939
- grpc_slice_buffer_reset_and_unref_internal(incoming_buffer);
1130
+ tcp->min_progress_size = grpc_core::IsTcpFrameSizeTuningEnabled()
1131
+ ? std::max(min_progress_size, 1)
1132
+ : 1;
1133
+ grpc_slice_buffer_reset_and_unref(incoming_buffer);
940
1134
  grpc_slice_buffer_swap(incoming_buffer, &tcp->last_read_buffer);
941
- tcp->read_mu.Unlock();
942
1135
  TCP_REF(tcp, "read");
943
1136
  if (tcp->is_first_read) {
944
- /* Endpoint read called for the very first time. Register read callback with
945
- * the polling engine */
1137
+ tcp->read_mu.Unlock();
1138
+ // Endpoint read called for the very first time. Register read callback with
1139
+ // the polling engine
946
1140
  tcp->is_first_read = false;
947
1141
  notify_on_read(tcp);
948
1142
  } else if (!urgent && tcp->inq == 0) {
949
- /* Upper layer asked to read more but we know there is no pending data
950
- * to read from previous reads. So, wait for POLLIN.
951
- */
1143
+ tcp->read_mu.Unlock();
1144
+ // Upper layer asked to read more but we know there is no pending data
1145
+ // to read from previous reads. So, wait for POLLIN.
1146
+ //
952
1147
  notify_on_read(tcp);
953
1148
  } else {
954
- /* Not the first time. We may or may not have more bytes available. In any
955
- * case call tcp->read_done_closure (i.e tcp_handle_read()) which does the
956
- * right thing (i.e calls tcp_do_read() which either reads the available
957
- * bytes or calls notify_on_read() to be notified when new bytes become
958
- * available */
1149
+ tcp->read_mu.Unlock();
1150
+ // Not the first time. We may or may not have more bytes available. In any
1151
+ // case call tcp->read_done_closure (i.e tcp_handle_read()) which does the
1152
+ // right thing (i.e calls tcp_do_read() which either reads the available
1153
+ // bytes or calls notify_on_read() to be notified when new bytes become
1154
+ // available
959
1155
  grpc_core::Closure::Run(DEBUG_LOCATION, &tcp->read_done_closure,
960
- GRPC_ERROR_NONE);
1156
+ absl::OkStatus());
961
1157
  }
962
1158
  }
963
1159
 
964
- /* A wrapper around sendmsg. It sends \a msg over \a fd and returns the number
965
- * of bytes sent. */
966
- ssize_t tcp_send(int fd, const struct msghdr* msg, int additional_flags = 0) {
967
- GPR_TIMER_SCOPE("sendmsg", 1);
1160
+ // A wrapper around sendmsg. It sends \a msg over \a fd and returns the number
1161
+ // of bytes sent.
1162
+ ssize_t tcp_send(int fd, const struct msghdr* msg, int* saved_errno,
1163
+ int additional_flags = 0) {
968
1164
  ssize_t sent_length;
969
1165
  do {
970
- /* TODO(klempner): Cork if this is a partial write */
971
- GRPC_STATS_INC_SYSCALL_WRITE();
1166
+ // TODO(klempner): Cork if this is a partial write
1167
+ grpc_core::global_stats().IncrementSyscallWrite();
972
1168
  sent_length = sendmsg(fd, msg, SENDMSG_FLAGS | additional_flags);
973
- } while (sent_length < 0 && errno == EINTR);
1169
+ } while (sent_length < 0 && (*saved_errno = errno) == EINTR);
974
1170
  return sent_length;
975
1171
  }
976
1172
 
977
- /** This is to be called if outgoing_buffer_arg is not null. On linux platforms,
978
- * this will call sendmsg with socket options set to collect timestamps inside
979
- * the kernel. On return, sent_length is set to the return value of the sendmsg
980
- * call. Returns false if setting the socket options failed. This is not
981
- * implemented for non-linux platforms currently, and crashes out.
982
- */
1173
+ /// This is to be called if outgoing_buffer_arg is not null. On linux platforms,
1174
+ /// this will call sendmsg with socket options set to collect timestamps inside
1175
+ /// the kernel. On return, sent_length is set to the return value of the sendmsg
1176
+ /// call. Returns false if setting the socket options failed. This is not
1177
+ /// implemented for non-linux platforms currently, and crashes out.
1178
+ ///
983
1179
  static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
984
1180
  size_t sending_length,
985
- ssize_t* sent_length,
1181
+ ssize_t* sent_length, int* saved_errno,
986
1182
  int additional_flags = 0);
987
1183
 
988
- /** The callback function to be invoked when we get an error on the socket. */
1184
+ /// The callback function to be invoked when we get an error on the socket.
989
1185
  static void tcp_handle_error(void* arg /* grpc_tcp */, grpc_error_handle error);
990
1186
 
991
1187
  static TcpZerocopySendRecord* tcp_get_send_zerocopy_record(
@@ -1026,7 +1222,7 @@ static void ZerocopyDisableAndWaitForRemaining(grpc_tcp* tcp) {
1026
1222
 
1027
1223
  static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
1028
1224
  size_t sending_length,
1029
- ssize_t* sent_length,
1225
+ ssize_t* sent_length, int* saved_errno,
1030
1226
  int additional_flags) {
1031
1227
  if (!tcp->socket_ts_enabled) {
1032
1228
  uint32_t opt = grpc_core::kTimestampingSocketOptions;
@@ -1040,7 +1236,7 @@ static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
1040
1236
  tcp->bytes_counter = -1;
1041
1237
  tcp->socket_ts_enabled = true;
1042
1238
  }
1043
- /* Set control message to indicate that you want timestamps. */
1239
+ // Set control message to indicate that you want timestamps.
1044
1240
  union {
1045
1241
  char cmsg_buf[CMSG_SPACE(sizeof(uint32_t))];
1046
1242
  struct cmsghdr align;
@@ -1054,16 +1250,13 @@ static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
1054
1250
  msg->msg_control = u.cmsg_buf;
1055
1251
  msg->msg_controllen = CMSG_SPACE(sizeof(uint32_t));
1056
1252
 
1057
- /* If there was an error on sendmsg the logic in tcp_flush will handle it. */
1058
- ssize_t length = tcp_send(tcp->fd, msg, additional_flags);
1253
+ // If there was an error on sendmsg the logic in tcp_flush will handle it.
1254
+ ssize_t length = tcp_send(tcp->fd, msg, saved_errno, additional_flags);
1059
1255
  *sent_length = length;
1060
- /* Only save timestamps if all the bytes were taken by sendmsg. */
1256
+ // Only save timestamps if all the bytes were taken by sendmsg.
1061
1257
  if (sending_length == static_cast<size_t>(length)) {
1062
- gpr_mu_lock(&tcp->tb_mu);
1063
- grpc_core::TracedBuffer::AddNewEntry(
1064
- &tcp->tb_head, static_cast<uint32_t>(tcp->bytes_counter + length),
1065
- tcp->fd, tcp->outgoing_buffer_arg);
1066
- gpr_mu_unlock(&tcp->tb_mu);
1258
+ tcp->tb_list.AddNewEntry(static_cast<uint32_t>(tcp->bytes_counter + length),
1259
+ tcp->fd, tcp->outgoing_buffer_arg);
1067
1260
  tcp->outgoing_buffer_arg = nullptr;
1068
1261
  }
1069
1262
  return true;
@@ -1090,6 +1283,9 @@ static void process_zerocopy(grpc_tcp* tcp, struct cmsghdr* cmsg) {
1090
1283
  GPR_DEBUG_ASSERT(record);
1091
1284
  UnrefMaybePutZerocopySendRecord(tcp, record, seq, "CALLBACK RCVD");
1092
1285
  }
1286
+ if (tcp->tcp_zerocopy_send_ctx.UpdateZeroCopyOMemStateAfterFree()) {
1287
+ grpc_fd_set_writable(tcp->em_fd);
1288
+ }
1093
1289
  }
1094
1290
 
1095
1291
  // Whether the cmsg received from error queue is of the IPv4 or IPv6 levels.
@@ -1106,13 +1302,13 @@ static bool CmsgIsZeroCopy(const cmsghdr& cmsg) {
1106
1302
  return serr->ee_errno == 0 && serr->ee_origin == SO_EE_ORIGIN_ZEROCOPY;
1107
1303
  }
1108
1304
 
1109
- /** Reads \a cmsg to derive timestamps from the control messages. If a valid
1110
- * timestamp is found, the traced buffer list is updated with this timestamp.
1111
- * The caller of this function should be looping on the control messages found
1112
- * in \a msg. \a cmsg should point to the control message that the caller wants
1113
- * processed.
1114
- * On return, a pointer to a control message is returned. On the next iteration,
1115
- * CMSG_NXTHDR(msg, ret_val) should be passed as \a cmsg. */
1305
+ /// Reads \a cmsg to derive timestamps from the control messages. If a valid
1306
+ /// timestamp is found, the traced buffer list is updated with this timestamp.
1307
+ /// The caller of this function should be looping on the control messages found
1308
+ /// in \a msg. \a cmsg should point to the control message that the caller wants
1309
+ /// processed.
1310
+ /// On return, a pointer to a control message is returned. On the next
1311
+ /// iteration, CMSG_NXTHDR(msg, ret_val) should be passed as \a cmsg.
1116
1312
  struct cmsghdr* process_timestamp(grpc_tcp* tcp, msghdr* msg,
1117
1313
  struct cmsghdr* cmsg) {
1118
1314
  auto next_cmsg = CMSG_NXTHDR(msg, cmsg);
@@ -1124,7 +1320,7 @@ struct cmsghdr* process_timestamp(grpc_tcp* tcp, msghdr* msg,
1124
1320
  return cmsg;
1125
1321
  }
1126
1322
 
1127
- /* Check if next_cmsg is an OPT_STATS msg */
1323
+ // Check if next_cmsg is an OPT_STATS msg
1128
1324
  if (next_cmsg->cmsg_level == SOL_SOCKET &&
1129
1325
  next_cmsg->cmsg_type == SCM_TIMESTAMPING_OPT_STATS) {
1130
1326
  opt_stats = next_cmsg;
@@ -1154,19 +1350,13 @@ struct cmsghdr* process_timestamp(grpc_tcp* tcp, msghdr* msg,
1154
1350
  gpr_log(GPR_ERROR, "Unexpected control message");
1155
1351
  return cmsg;
1156
1352
  }
1157
- /* The error handling can potentially be done on another thread so we need
1158
- * to protect the traced buffer list. A lock free list might be better. Using
1159
- * a simple mutex for now. */
1160
- gpr_mu_lock(&tcp->tb_mu);
1161
- grpc_core::TracedBuffer::ProcessTimestamp(&tcp->tb_head, serr, opt_stats,
1162
- tss);
1163
- gpr_mu_unlock(&tcp->tb_mu);
1353
+ tcp->tb_list.ProcessTimestamp(serr, opt_stats, tss);
1164
1354
  return next_cmsg;
1165
1355
  }
1166
1356
 
1167
- /** For linux platforms, reads the socket's error queue and processes error
1168
- * messages from the queue.
1169
- */
1357
+ /// For linux platforms, reads the socket's error queue and processes error
1358
+ /// messages from the queue.
1359
+ ///
1170
1360
  static bool process_errors(grpc_tcp* tcp) {
1171
1361
  bool processed_err = false;
1172
1362
  struct iovec iov;
@@ -1178,13 +1368,13 @@ static bool process_errors(grpc_tcp* tcp) {
1178
1368
  msg.msg_iov = &iov;
1179
1369
  msg.msg_iovlen = 0;
1180
1370
  msg.msg_flags = 0;
1181
- /* Allocate enough space so we don't need to keep increasing this as size
1182
- * of OPT_STATS increase */
1371
+ // Allocate enough space so we don't need to keep increasing this as size
1372
+ // of OPT_STATS increase
1183
1373
  constexpr size_t cmsg_alloc_space =
1184
1374
  CMSG_SPACE(sizeof(grpc_core::scm_timestamping)) +
1185
1375
  CMSG_SPACE(sizeof(sock_extended_err) + sizeof(sockaddr_in)) +
1186
1376
  CMSG_SPACE(32 * NLA_ALIGN(NLA_HDRLEN + sizeof(uint64_t)));
1187
- /* Allocate aligned space for cmsgs received along with timestamps */
1377
+ // Allocate aligned space for cmsgs received along with timestamps
1188
1378
  union {
1189
1379
  char rbuf[cmsg_alloc_space];
1190
1380
  struct cmsghdr align;
@@ -1199,7 +1389,7 @@ static bool process_errors(grpc_tcp* tcp) {
1199
1389
  } while (r < 0 && saved_errno == EINTR);
1200
1390
 
1201
1391
  if (r == -1 && saved_errno == EAGAIN) {
1202
- return processed_err; /* No more errors to process */
1392
+ return processed_err; // No more errors to process
1203
1393
  }
1204
1394
  if (r == -1) {
1205
1395
  return processed_err;
@@ -1209,7 +1399,7 @@ static bool process_errors(grpc_tcp* tcp) {
1209
1399
  }
1210
1400
 
1211
1401
  if (msg.msg_controllen == 0) {
1212
- /* There was no control message found. It was probably spurious. */
1402
+ // There was no control message found. It was probably spurious.
1213
1403
  return processed_err;
1214
1404
  }
1215
1405
  bool seen = false;
@@ -1225,8 +1415,8 @@ static bool process_errors(grpc_tcp* tcp) {
1225
1415
  seen = true;
1226
1416
  processed_err = true;
1227
1417
  } else {
1228
- /* Got a control message that is not a timestamp or zerocopy. Don't know
1229
- * how to handle this. */
1418
+ // Got a control message that is not a timestamp or zerocopy. Don't know
1419
+ // how to handle this.
1230
1420
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1231
1421
  gpr_log(GPR_INFO,
1232
1422
  "unknown control message cmsg_level:%d cmsg_type:%d",
@@ -1246,22 +1436,22 @@ static void tcp_handle_error(void* arg /* grpc_tcp */,
1246
1436
  grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
1247
1437
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1248
1438
  gpr_log(GPR_INFO, "TCP:%p got_error: %s", tcp,
1249
- grpc_error_std_string(error).c_str());
1439
+ grpc_core::StatusToString(error).c_str());
1250
1440
  }
1251
1441
 
1252
- if (error != GRPC_ERROR_NONE ||
1442
+ if (!error.ok() ||
1253
1443
  static_cast<bool>(gpr_atm_acq_load(&tcp->stop_error_notification))) {
1254
- /* We aren't going to register to hear on error anymore, so it is safe to
1255
- * unref. */
1444
+ // We aren't going to register to hear on error anymore, so it is safe to
1445
+ // unref.
1256
1446
  TCP_UNREF(tcp, "error-tracking");
1257
1447
  return;
1258
1448
  }
1259
1449
 
1260
- /* We are still interested in collecting timestamps, so let's try reading
1261
- * them. */
1450
+ // We are still interested in collecting timestamps, so let's try reading
1451
+ // them.
1262
1452
  bool processed = process_errors(tcp);
1263
- /* This might not a timestamps error. Set the read and write closures to be
1264
- * ready. */
1453
+ // This might not a timestamps error. Set the read and write closures to be
1454
+ // ready.
1265
1455
  if (!processed) {
1266
1456
  grpc_fd_set_readable(tcp->em_fd);
1267
1457
  grpc_fd_set_writable(tcp->em_fd);
@@ -1269,7 +1459,7 @@ static void tcp_handle_error(void* arg /* grpc_tcp */,
1269
1459
  grpc_fd_notify_on_error(tcp->em_fd, &tcp->error_closure);
1270
1460
  }
1271
1461
 
1272
- #else /* GRPC_LINUX_ERRQUEUE */
1462
+ #else // GRPC_LINUX_ERRQUEUE
1273
1463
  static TcpZerocopySendRecord* tcp_get_send_zerocopy_record(
1274
1464
  grpc_tcp* /*tcp*/, grpc_slice_buffer* /*buf*/) {
1275
1465
  return nullptr;
@@ -1280,6 +1470,7 @@ static void ZerocopyDisableAndWaitForRemaining(grpc_tcp* /*tcp*/) {}
1280
1470
  static bool tcp_write_with_timestamps(grpc_tcp* /*tcp*/, struct msghdr* /*msg*/,
1281
1471
  size_t /*sending_length*/,
1282
1472
  ssize_t* /*sent_length*/,
1473
+ int* /* saved_errno */,
1283
1474
  int /*additional_flags*/) {
1284
1475
  gpr_log(GPR_ERROR, "Write with timestamps not supported for this platform");
1285
1476
  GPR_ASSERT(0);
@@ -1291,17 +1482,14 @@ static void tcp_handle_error(void* /*arg*/ /* grpc_tcp */,
1291
1482
  gpr_log(GPR_ERROR, "Error handling is not supported for this platform");
1292
1483
  GPR_ASSERT(0);
1293
1484
  }
1294
- #endif /* GRPC_LINUX_ERRQUEUE */
1485
+ #endif // GRPC_LINUX_ERRQUEUE
1295
1486
 
1296
- /* If outgoing_buffer_arg is filled, shuts down the list early, so that any
1297
- * release operations needed can be performed on the arg */
1487
+ // If outgoing_buffer_arg is filled, shuts down the list early, so that any
1488
+ // release operations needed can be performed on the arg
1298
1489
  void tcp_shutdown_buffer_list(grpc_tcp* tcp) {
1299
1490
  if (tcp->outgoing_buffer_arg) {
1300
- gpr_mu_lock(&tcp->tb_mu);
1301
- grpc_core::TracedBuffer::Shutdown(
1302
- &tcp->tb_head, tcp->outgoing_buffer_arg,
1303
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("TracedBuffer list shutdown"));
1304
- gpr_mu_unlock(&tcp->tb_mu);
1491
+ tcp->tb_list.Shutdown(tcp->outgoing_buffer_arg,
1492
+ GRPC_ERROR_CREATE("TracedBuffer list shutdown"));
1305
1493
  tcp->outgoing_buffer_arg = nullptr;
1306
1494
  }
1307
1495
  }
@@ -1360,6 +1548,7 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
1360
1548
  size_t unwind_slice_idx;
1361
1549
  size_t unwind_byte_idx;
1362
1550
  bool tried_sending_message;
1551
+ int saved_errno;
1363
1552
  msghdr msg;
1364
1553
  // iov consumes a large space. Keep it as the last item on the stack to
1365
1554
  // improve locality. After all, we expect only the first elements of it being
@@ -1378,12 +1567,13 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
1378
1567
  // Before calling sendmsg (with or without timestamps): we
1379
1568
  // take a single ref on the zerocopy send record.
1380
1569
  tcp->tcp_zerocopy_send_ctx.NoteSend(record);
1570
+ saved_errno = 0;
1381
1571
  if (tcp->outgoing_buffer_arg != nullptr) {
1382
1572
  if (!tcp->ts_capable ||
1383
1573
  !tcp_write_with_timestamps(tcp, &msg, sending_length, &sent_length,
1384
- MSG_ZEROCOPY)) {
1385
- /* We could not set socket options to collect Fathom timestamps.
1386
- * Fallback on writing without timestamps. */
1574
+ &saved_errno, MSG_ZEROCOPY)) {
1575
+ // We could not set socket options to collect Fathom timestamps.
1576
+ // Fallback on writing without timestamps.
1387
1577
  tcp->ts_capable = false;
1388
1578
  tcp_shutdown_buffer_list(tcp);
1389
1579
  } else {
@@ -1393,31 +1583,36 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
1393
1583
  if (!tried_sending_message) {
1394
1584
  msg.msg_control = nullptr;
1395
1585
  msg.msg_controllen = 0;
1396
- GRPC_STATS_INC_TCP_WRITE_SIZE(sending_length);
1397
- GRPC_STATS_INC_TCP_WRITE_IOV_SIZE(iov_size);
1398
- sent_length = tcp_send(tcp->fd, &msg, MSG_ZEROCOPY);
1586
+ grpc_core::global_stats().IncrementTcpWriteSize(sending_length);
1587
+ grpc_core::global_stats().IncrementTcpWriteIovSize(iov_size);
1588
+ sent_length = tcp_send(tcp->fd, &msg, &saved_errno, MSG_ZEROCOPY);
1589
+ }
1590
+ if (tcp->tcp_zerocopy_send_ctx.UpdateZeroCopyOMemStateAfterSend(
1591
+ saved_errno == ENOBUFS)) {
1592
+ grpc_fd_set_writable(tcp->em_fd);
1399
1593
  }
1400
1594
  if (sent_length < 0) {
1401
1595
  // If this particular send failed, drop ref taken earlier in this method.
1402
1596
  tcp->tcp_zerocopy_send_ctx.UndoSend();
1403
- if (errno == EAGAIN) {
1597
+ if (saved_errno == EAGAIN || saved_errno == ENOBUFS) {
1404
1598
  record->UnwindIfThrottled(unwind_slice_idx, unwind_byte_idx);
1405
1599
  return false;
1406
- } else if (errno == EPIPE) {
1407
- *error = tcp_annotate_error(GRPC_OS_ERROR(errno, "sendmsg"), tcp);
1600
+ } else if (saved_errno == EPIPE) {
1601
+ *error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
1408
1602
  tcp_shutdown_buffer_list(tcp);
1409
1603
  return true;
1410
1604
  } else {
1411
- *error = tcp_annotate_error(GRPC_OS_ERROR(errno, "sendmsg"), tcp);
1605
+ *error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
1412
1606
  tcp_shutdown_buffer_list(tcp);
1413
1607
  return true;
1414
1608
  }
1415
1609
  }
1610
+ grpc_core::EventLog::Append("tcp-write-outstanding", -sent_length);
1416
1611
  tcp->bytes_counter += sent_length;
1417
1612
  record->UpdateOffsetForBytesSent(sending_length,
1418
1613
  static_cast<size_t>(sent_length));
1419
1614
  if (record->AllSlicesSent()) {
1420
- *error = GRPC_ERROR_NONE;
1615
+ *error = absl::OkStatus();
1421
1616
  return true;
1422
1617
  }
1423
1618
  }
@@ -1452,6 +1647,7 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
1452
1647
  size_t trailing;
1453
1648
  size_t unwind_slice_idx;
1454
1649
  size_t unwind_byte_idx;
1650
+ int saved_errno;
1455
1651
 
1456
1652
  // We always start at zero, because we eagerly unref and trim the slice
1457
1653
  // buffer as we write
@@ -1483,11 +1679,13 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
1483
1679
  msg.msg_iovlen = iov_size;
1484
1680
  msg.msg_flags = 0;
1485
1681
  bool tried_sending_message = false;
1682
+ saved_errno = 0;
1486
1683
  if (tcp->outgoing_buffer_arg != nullptr) {
1487
1684
  if (!tcp->ts_capable ||
1488
- !tcp_write_with_timestamps(tcp, &msg, sending_length, &sent_length)) {
1489
- /* We could not set socket options to collect Fathom timestamps.
1490
- * Fallback on writing without timestamps. */
1685
+ !tcp_write_with_timestamps(tcp, &msg, sending_length, &sent_length,
1686
+ &saved_errno)) {
1687
+ // We could not set socket options to collect Fathom timestamps.
1688
+ // Fallback on writing without timestamps.
1491
1689
  tcp->ts_capable = false;
1492
1690
  tcp_shutdown_buffer_list(tcp);
1493
1691
  } else {
@@ -1498,14 +1696,14 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
1498
1696
  msg.msg_control = nullptr;
1499
1697
  msg.msg_controllen = 0;
1500
1698
 
1501
- GRPC_STATS_INC_TCP_WRITE_SIZE(sending_length);
1502
- GRPC_STATS_INC_TCP_WRITE_IOV_SIZE(iov_size);
1699
+ grpc_core::global_stats().IncrementTcpWriteSize(sending_length);
1700
+ grpc_core::global_stats().IncrementTcpWriteIovSize(iov_size);
1503
1701
 
1504
- sent_length = tcp_send(tcp->fd, &msg);
1702
+ sent_length = tcp_send(tcp->fd, &msg, &saved_errno);
1505
1703
  }
1506
1704
 
1507
1705
  if (sent_length < 0) {
1508
- if (errno == EAGAIN) {
1706
+ if (saved_errno == EAGAIN || saved_errno == ENOBUFS) {
1509
1707
  tcp->outgoing_byte_idx = unwind_byte_idx;
1510
1708
  // unref all and forget about all slices that have been written to this
1511
1709
  // point
@@ -1513,20 +1711,21 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
1513
1711
  grpc_slice_buffer_remove_first(tcp->outgoing_buffer);
1514
1712
  }
1515
1713
  return false;
1516
- } else if (errno == EPIPE) {
1517
- *error = tcp_annotate_error(GRPC_OS_ERROR(errno, "sendmsg"), tcp);
1518
- grpc_slice_buffer_reset_and_unref_internal(tcp->outgoing_buffer);
1714
+ } else if (saved_errno == EPIPE) {
1715
+ *error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
1716
+ grpc_slice_buffer_reset_and_unref(tcp->outgoing_buffer);
1519
1717
  tcp_shutdown_buffer_list(tcp);
1520
1718
  return true;
1521
1719
  } else {
1522
- *error = tcp_annotate_error(GRPC_OS_ERROR(errno, "sendmsg"), tcp);
1523
- grpc_slice_buffer_reset_and_unref_internal(tcp->outgoing_buffer);
1720
+ *error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
1721
+ grpc_slice_buffer_reset_and_unref(tcp->outgoing_buffer);
1524
1722
  tcp_shutdown_buffer_list(tcp);
1525
1723
  return true;
1526
1724
  }
1527
1725
  }
1528
1726
 
1529
1727
  GPR_ASSERT(tcp->outgoing_byte_idx == 0);
1728
+ grpc_core::EventLog::Append("tcp-write-outstanding", -sent_length);
1530
1729
  tcp->bytes_counter += sent_length;
1531
1730
  trailing = sending_length - static_cast<size_t>(sent_length);
1532
1731
  while (trailing > 0) {
@@ -1543,8 +1742,8 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
1543
1742
  }
1544
1743
  }
1545
1744
  if (outgoing_slice_idx == tcp->outgoing_buffer->count) {
1546
- *error = GRPC_ERROR_NONE;
1547
- grpc_slice_buffer_reset_and_unref_internal(tcp->outgoing_buffer);
1745
+ *error = absl::OkStatus();
1746
+ grpc_slice_buffer_reset_and_unref(tcp->outgoing_buffer);
1548
1747
  return true;
1549
1748
  }
1550
1749
  }
@@ -1555,7 +1754,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
1555
1754
  grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
1556
1755
  grpc_closure* cb;
1557
1756
 
1558
- if (error != GRPC_ERROR_NONE) {
1757
+ if (!error.ok()) {
1559
1758
  cb = tcp->write_cb;
1560
1759
  tcp->write_cb = nullptr;
1561
1760
  if (tcp->current_zerocopy_send != nullptr) {
@@ -1563,11 +1762,10 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
1563
1762
  "handle_write_err");
1564
1763
  tcp->current_zerocopy_send = nullptr;
1565
1764
  }
1566
- grpc_core::Closure::Run(DEBUG_LOCATION, cb, GRPC_ERROR_REF(error));
1765
+ grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
1567
1766
  TCP_UNREF(tcp, "write");
1568
1767
  return;
1569
1768
  }
1570
-
1571
1769
  bool flush_result =
1572
1770
  tcp->current_zerocopy_send != nullptr
1573
1771
  ? tcp_flush_zerocopy(tcp, tcp->current_zerocopy_send, &error)
@@ -1578,13 +1776,13 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
1578
1776
  }
1579
1777
  notify_on_write(tcp);
1580
1778
  // tcp_flush does not populate error if it has returned false.
1581
- GPR_DEBUG_ASSERT(error == GRPC_ERROR_NONE);
1779
+ GPR_DEBUG_ASSERT(error.ok());
1582
1780
  } else {
1583
1781
  cb = tcp->write_cb;
1584
1782
  tcp->write_cb = nullptr;
1585
1783
  tcp->current_zerocopy_send = nullptr;
1586
1784
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1587
- gpr_log(GPR_INFO, "write: %s", grpc_error_std_string(error).c_str());
1785
+ gpr_log(GPR_INFO, "write: %s", grpc_core::StatusToString(error).c_str());
1588
1786
  }
1589
1787
  // No need to take a ref on error since tcp_flush provides a ref.
1590
1788
  grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
@@ -1593,12 +1791,13 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
1593
1791
  }
1594
1792
 
1595
1793
  static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
1596
- grpc_closure* cb, void* arg) {
1597
- GPR_TIMER_SCOPE("tcp_write", 0);
1794
+ grpc_closure* cb, void* arg, int /*max_frame_size*/) {
1598
1795
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1599
- grpc_error_handle error = GRPC_ERROR_NONE;
1796
+ grpc_error_handle error;
1600
1797
  TcpZerocopySendRecord* zerocopy_send_record = nullptr;
1601
1798
 
1799
+ grpc_core::EventLog::Append("tcp-write-outstanding", buf->length);
1800
+
1602
1801
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1603
1802
  size_t i;
1604
1803
 
@@ -1607,7 +1806,7 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
1607
1806
  if (gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
1608
1807
  char* data =
1609
1808
  grpc_dump_slice(buf->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII);
1610
- gpr_log(GPR_DEBUG, "DATA: %s", data);
1809
+ gpr_log(GPR_DEBUG, "WRITE DATA: %s", data);
1611
1810
  gpr_free(data);
1612
1811
  }
1613
1812
  }
@@ -1620,9 +1819,8 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
1620
1819
  grpc_core::Closure::Run(
1621
1820
  DEBUG_LOCATION, cb,
1622
1821
  grpc_fd_is_shutdown(tcp->em_fd)
1623
- ? tcp_annotate_error(GRPC_ERROR_CREATE_FROM_STATIC_STRING("EOF"),
1624
- tcp)
1625
- : GRPC_ERROR_NONE);
1822
+ ? tcp_annotate_error(GRPC_ERROR_CREATE("EOF"), tcp)
1823
+ : absl::OkStatus());
1626
1824
  tcp_shutdown_buffer_list(tcp);
1627
1825
  return;
1628
1826
  }
@@ -1652,7 +1850,7 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
1652
1850
  notify_on_write(tcp);
1653
1851
  } else {
1654
1852
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1655
- gpr_log(GPR_INFO, "write: %s", grpc_error_std_string(error).c_str());
1853
+ gpr_log(GPR_INFO, "write: %s", grpc_core::StatusToString(error).c_str());
1656
1854
  }
1657
1855
  grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
1658
1856
  }
@@ -1715,102 +1913,45 @@ static const grpc_endpoint_vtable vtable = {tcp_read,
1715
1913
  tcp_get_fd,
1716
1914
  tcp_can_track_err};
1717
1915
 
1718
- #define MAX_CHUNK_SIZE (32 * 1024 * 1024)
1719
-
1720
1916
  grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
1721
- const grpc_channel_args* channel_args,
1917
+ const grpc_core::PosixTcpOptions& options,
1722
1918
  absl::string_view peer_string) {
1723
- static constexpr bool kZerocpTxEnabledDefault = false;
1724
- int tcp_read_chunk_size = GRPC_TCP_DEFAULT_READ_SLICE_SIZE;
1725
- int tcp_max_read_chunk_size = 4 * 1024 * 1024;
1726
- int tcp_min_read_chunk_size = 256;
1727
- bool tcp_tx_zerocopy_enabled = kZerocpTxEnabledDefault;
1728
- int tcp_tx_zerocopy_send_bytes_thresh =
1729
- grpc_core::TcpZerocopySendCtx::kDefaultSendBytesThreshold;
1730
- int tcp_tx_zerocopy_max_simult_sends =
1731
- grpc_core::TcpZerocopySendCtx::kDefaultMaxSends;
1732
- if (channel_args != nullptr) {
1733
- for (size_t i = 0; i < channel_args->num_args; i++) {
1734
- if (0 ==
1735
- strcmp(channel_args->args[i].key, GRPC_ARG_TCP_READ_CHUNK_SIZE)) {
1736
- grpc_integer_options options = {tcp_read_chunk_size, 1, MAX_CHUNK_SIZE};
1737
- tcp_read_chunk_size =
1738
- grpc_channel_arg_get_integer(&channel_args->args[i], options);
1739
- } else if (0 == strcmp(channel_args->args[i].key,
1740
- GRPC_ARG_TCP_MIN_READ_CHUNK_SIZE)) {
1741
- grpc_integer_options options = {tcp_read_chunk_size, 1, MAX_CHUNK_SIZE};
1742
- tcp_min_read_chunk_size =
1743
- grpc_channel_arg_get_integer(&channel_args->args[i], options);
1744
- } else if (0 == strcmp(channel_args->args[i].key,
1745
- GRPC_ARG_TCP_MAX_READ_CHUNK_SIZE)) {
1746
- grpc_integer_options options = {tcp_read_chunk_size, 1, MAX_CHUNK_SIZE};
1747
- tcp_max_read_chunk_size =
1748
- grpc_channel_arg_get_integer(&channel_args->args[i], options);
1749
- } else if (0 == strcmp(channel_args->args[i].key,
1750
- GRPC_ARG_TCP_TX_ZEROCOPY_ENABLED)) {
1751
- tcp_tx_zerocopy_enabled = grpc_channel_arg_get_bool(
1752
- &channel_args->args[i], kZerocpTxEnabledDefault);
1753
- } else if (0 == strcmp(channel_args->args[i].key,
1754
- GRPC_ARG_TCP_TX_ZEROCOPY_SEND_BYTES_THRESHOLD)) {
1755
- grpc_integer_options options = {
1756
- grpc_core::TcpZerocopySendCtx::kDefaultSendBytesThreshold, 0,
1757
- INT_MAX};
1758
- tcp_tx_zerocopy_send_bytes_thresh =
1759
- grpc_channel_arg_get_integer(&channel_args->args[i], options);
1760
- } else if (0 == strcmp(channel_args->args[i].key,
1761
- GRPC_ARG_TCP_TX_ZEROCOPY_MAX_SIMULT_SENDS)) {
1762
- grpc_integer_options options = {
1763
- grpc_core::TcpZerocopySendCtx::kDefaultMaxSends, 0, INT_MAX};
1764
- tcp_tx_zerocopy_max_simult_sends =
1765
- grpc_channel_arg_get_integer(&channel_args->args[i], options);
1766
- }
1767
- }
1768
- }
1769
-
1770
- if (tcp_min_read_chunk_size > tcp_max_read_chunk_size) {
1771
- tcp_min_read_chunk_size = tcp_max_read_chunk_size;
1772
- }
1773
- tcp_read_chunk_size = grpc_core::Clamp(
1774
- tcp_read_chunk_size, tcp_min_read_chunk_size, tcp_max_read_chunk_size);
1775
-
1776
- grpc_tcp* tcp = new grpc_tcp(tcp_tx_zerocopy_max_simult_sends,
1777
- tcp_tx_zerocopy_send_bytes_thresh);
1919
+ grpc_tcp* tcp = new grpc_tcp(options);
1778
1920
  tcp->base.vtable = &vtable;
1779
1921
  tcp->peer_string = std::string(peer_string);
1780
1922
  tcp->fd = grpc_fd_wrapped_fd(em_fd);
1781
- tcp->memory_owner = grpc_core::ResourceQuotaFromChannelArgs(channel_args)
1782
- ->memory_quota()
1783
- ->CreateMemoryOwner(peer_string);
1923
+ GPR_ASSERT(options.resource_quota != nullptr);
1924
+ tcp->memory_owner =
1925
+ options.resource_quota->memory_quota()->CreateMemoryOwner(peer_string);
1784
1926
  tcp->self_reservation = tcp->memory_owner.MakeReservation(sizeof(grpc_tcp));
1785
1927
  grpc_resolved_address resolved_local_addr;
1786
1928
  memset(&resolved_local_addr, 0, sizeof(resolved_local_addr));
1787
1929
  resolved_local_addr.len = sizeof(resolved_local_addr.addr);
1930
+ absl::StatusOr<std::string> addr_uri;
1788
1931
  if (getsockname(tcp->fd,
1789
1932
  reinterpret_cast<sockaddr*>(resolved_local_addr.addr),
1790
- &resolved_local_addr.len) < 0) {
1933
+ &resolved_local_addr.len) < 0 ||
1934
+ !(addr_uri = grpc_sockaddr_to_uri(&resolved_local_addr)).ok()) {
1791
1935
  tcp->local_address = "";
1792
1936
  } else {
1793
- tcp->local_address = grpc_sockaddr_to_uri(&resolved_local_addr);
1937
+ tcp->local_address = addr_uri.value();
1794
1938
  }
1795
1939
  tcp->read_cb = nullptr;
1796
1940
  tcp->write_cb = nullptr;
1797
1941
  tcp->current_zerocopy_send = nullptr;
1798
1942
  tcp->release_fd_cb = nullptr;
1799
1943
  tcp->release_fd = nullptr;
1800
- tcp->target_length = static_cast<double>(tcp_read_chunk_size);
1801
- tcp->min_read_chunk_size = tcp_min_read_chunk_size;
1802
- tcp->max_read_chunk_size = tcp_max_read_chunk_size;
1944
+ tcp->target_length = static_cast<double>(options.tcp_read_chunk_size);
1803
1945
  tcp->bytes_read_this_round = 0;
1804
- /* Will be set to false by the very first endpoint read function */
1946
+ // Will be set to false by the very first endpoint read function
1805
1947
  tcp->is_first_read = true;
1806
- tcp->has_posted_reclaimer = false;
1807
1948
  tcp->bytes_counter = -1;
1808
1949
  tcp->socket_ts_enabled = false;
1809
1950
  tcp->ts_capable = true;
1810
1951
  tcp->outgoing_buffer_arg = nullptr;
1811
- tcp->curr_read_completed = true;
1812
- tcp->curr_min_read_chunk_size = tcp->min_read_chunk_size;
1813
- if (tcp_tx_zerocopy_enabled && !tcp->tcp_zerocopy_send_ctx.memory_limited()) {
1952
+ tcp->min_progress_size = 1;
1953
+ if (options.tcp_tx_zero_copy_enabled &&
1954
+ !tcp->tcp_zerocopy_send_ctx.memory_limited()) {
1814
1955
  #ifdef GRPC_LINUX_ERRQUEUE
1815
1956
  const int enable = 1;
1816
1957
  auto err =
@@ -1822,14 +1963,12 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
1822
1963
  }
1823
1964
  #endif
1824
1965
  }
1825
- /* paired with unref in grpc_tcp_destroy */
1966
+ // paired with unref in grpc_tcp_destroy
1826
1967
  new (&tcp->refcount) grpc_core::RefCount(
1827
1968
  1, GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace) ? "tcp" : nullptr);
1828
1969
  gpr_atm_no_barrier_store(&tcp->shutdown_count, 0);
1829
1970
  tcp->em_fd = em_fd;
1830
1971
  grpc_slice_buffer_init(&tcp->last_read_buffer);
1831
- gpr_mu_init(&tcp->tb_mu);
1832
- tcp->tb_head = nullptr;
1833
1972
  GRPC_CLOSURE_INIT(&tcp->read_done_closure, tcp_handle_read, tcp,
1834
1973
  grpc_schedule_on_exec_ctx);
1835
1974
  if (grpc_event_engine_run_in_background()) {
@@ -1842,7 +1981,7 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
1842
1981
  tcp_drop_uncovered_then_handle_write, tcp,
1843
1982
  grpc_schedule_on_exec_ctx);
1844
1983
  }
1845
- /* Always assume there is something on the queue to read. */
1984
+ // Always assume there is something on the queue to read.
1846
1985
  tcp->inq = 1;
1847
1986
  #ifdef GRPC_HAVE_TCP_INQ
1848
1987
  int one = 1;
@@ -1854,12 +1993,12 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
1854
1993
  }
1855
1994
  #else
1856
1995
  tcp->inq_capable = false;
1857
- #endif /* GRPC_HAVE_TCP_INQ */
1858
- /* Start being notified on errors if event engine can track errors. */
1996
+ #endif // GRPC_HAVE_TCP_INQ
1997
+ // Start being notified on errors if event engine can track errors.
1859
1998
  if (grpc_event_engine_can_track_errors()) {
1860
- /* Grab a ref to tcp so that we can safely access the tcp struct when
1861
- * processing errors. We unref when we no longer want to track errors
1862
- * separately. */
1999
+ // Grab a ref to tcp so that we can safely access the tcp struct when
2000
+ // processing errors. We unref when we no longer want to track errors
2001
+ // separately.
1863
2002
  TCP_REF(tcp, "error-tracking");
1864
2003
  gpr_atm_rel_store(&tcp->stop_error_notification, 0);
1865
2004
  GRPC_CLOSURE_INIT(&tcp->error_closure, tcp_handle_error, tcp,
@@ -1878,13 +2017,17 @@ int grpc_tcp_fd(grpc_endpoint* ep) {
1878
2017
 
1879
2018
  void grpc_tcp_destroy_and_release_fd(grpc_endpoint* ep, int* fd,
1880
2019
  grpc_closure* done) {
2020
+ if (grpc_event_engine::experimental::grpc_is_event_engine_endpoint(ep)) {
2021
+ return grpc_event_engine::experimental::
2022
+ grpc_event_engine_endpoint_destroy_and_release_fd(ep, fd, done);
2023
+ }
1881
2024
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1882
2025
  GPR_ASSERT(ep->vtable == &vtable);
1883
2026
  tcp->release_fd = fd;
1884
2027
  tcp->release_fd_cb = done;
1885
- grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
2028
+ grpc_slice_buffer_reset_and_unref(&tcp->last_read_buffer);
1886
2029
  if (grpc_event_engine_can_track_errors()) {
1887
- /* Stop errors notification. */
2030
+ // Stop errors notification.
1888
2031
  ZerocopyDisableAndWaitForRemaining(tcp);
1889
2032
  gpr_atm_no_barrier_store(&tcp->stop_error_notification, true);
1890
2033
  grpc_fd_set_error(tcp->em_fd);
@@ -1899,4 +2042,4 @@ void grpc_tcp_posix_shutdown() {
1899
2042
  g_backup_poller_mu = nullptr;
1900
2043
  }
1901
2044
 
1902
- #endif /* GRPC_POSIX_SOCKET_TCP */
2045
+ #endif // GRPC_POSIX_SOCKET_TCP