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