grpc 1.45.0 → 1.53.0

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

Potentially problematic release.


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

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