grpc 1.51.0 → 1.52.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 (886) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +91 -23
  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/event_engine.h +17 -3
  7. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
  8. data/include/grpc/event_engine/internal/slice_cast.h +67 -0
  9. data/include/grpc/event_engine/memory_allocator.h +1 -1
  10. data/include/grpc/event_engine/slice.h +24 -4
  11. data/include/grpc/event_engine/slice_buffer.h +14 -2
  12. data/include/grpc/fork.h +25 -1
  13. data/include/grpc/grpc.h +3 -3
  14. data/include/grpc/grpc_posix.h +1 -1
  15. data/include/grpc/impl/codegen/atm.h +3 -71
  16. data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -58
  17. data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -59
  18. data/include/grpc/impl/codegen/atm_windows.h +3 -106
  19. data/include/grpc/impl/codegen/byte_buffer.h +4 -78
  20. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
  21. data/include/grpc/impl/codegen/compression_types.h +3 -82
  22. data/include/grpc/impl/codegen/connectivity_state.h +3 -20
  23. data/include/grpc/impl/codegen/fork.h +4 -25
  24. data/include/grpc/impl/codegen/gpr_types.h +2 -34
  25. data/include/grpc/impl/codegen/grpc_types.h +3 -787
  26. data/include/grpc/impl/codegen/log.h +3 -86
  27. data/include/grpc/impl/codegen/port_platform.h +3 -755
  28. data/include/grpc/impl/codegen/propagation_bits.h +3 -28
  29. data/include/grpc/impl/codegen/slice.h +3 -106
  30. data/include/grpc/impl/codegen/status.h +4 -131
  31. data/include/grpc/impl/codegen/sync.h +3 -42
  32. data/include/grpc/impl/codegen/sync_abseil.h +3 -12
  33. data/include/grpc/impl/codegen/sync_custom.h +3 -14
  34. data/include/grpc/impl/codegen/sync_generic.h +3 -25
  35. data/include/grpc/impl/codegen/sync_posix.h +3 -28
  36. data/include/grpc/impl/codegen/sync_windows.h +3 -16
  37. data/include/grpc/impl/compression_types.h +109 -0
  38. data/include/grpc/impl/connectivity_state.h +47 -0
  39. data/include/grpc/impl/grpc_types.h +824 -0
  40. data/include/grpc/impl/propagation_bits.h +54 -0
  41. data/include/grpc/impl/slice_type.h +112 -0
  42. data/include/grpc/load_reporting.h +1 -1
  43. data/include/grpc/module.modulemap +5 -1
  44. data/include/grpc/slice.h +1 -1
  45. data/include/grpc/status.h +131 -1
  46. data/include/grpc/support/atm.h +70 -1
  47. data/include/grpc/support/atm_gcc_atomic.h +59 -1
  48. data/include/grpc/support/atm_gcc_sync.h +58 -1
  49. data/include/grpc/support/atm_windows.h +105 -1
  50. data/include/grpc/support/log.h +87 -1
  51. data/include/grpc/support/log_windows.h +1 -1
  52. data/include/grpc/support/port_platform.h +767 -1
  53. data/include/grpc/support/string_util.h +1 -1
  54. data/include/grpc/support/sync.h +35 -2
  55. data/include/grpc/support/sync_abseil.h +11 -1
  56. data/include/grpc/support/sync_custom.h +13 -1
  57. data/include/grpc/support/sync_generic.h +24 -1
  58. data/include/grpc/support/sync_posix.h +27 -1
  59. data/include/grpc/support/sync_windows.h +15 -1
  60. data/include/grpc/support/time.h +25 -2
  61. data/src/core/ext/filters/census/grpc_context.cc +17 -18
  62. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +9 -9
  63. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -1
  64. data/src/core/ext/filters/channel_idle/idle_filter_state.h +1 -1
  65. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
  66. data/src/core/ext/filters/client_channel/backup_poller.cc +21 -21
  67. data/src/core/ext/filters/client_channel/backup_poller.h +21 -21
  68. data/src/core/ext/filters/client_channel/channel_connectivity.cc +45 -24
  69. data/src/core/ext/filters/client_channel/client_channel.cc +40 -31
  70. data/src/core/ext/filters/client_channel/client_channel.h +7 -6
  71. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +17 -17
  72. data/src/core/ext/filters/client_channel/client_channel_channelz.h +19 -19
  73. data/src/core/ext/filters/client_channel/client_channel_factory.cc +17 -17
  74. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +17 -17
  75. data/src/core/ext/filters/client_channel/config_selector.h +16 -20
  76. data/src/core/ext/filters/client_channel/dynamic_filters.cc +8 -8
  77. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +18 -18
  78. data/src/core/ext/filters/client_channel/health/health_check_client.cc +1 -1
  79. data/src/core/ext/filters/client_channel/http_proxy.cc +39 -39
  80. data/src/core/ext/filters/client_channel/http_proxy.h +18 -18
  81. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +39 -0
  82. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +17 -17
  83. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -2
  84. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -2
  85. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +58 -130
  86. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +37 -21
  87. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +102 -116
  88. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +24 -25
  89. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +2 -4
  90. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +17 -17
  91. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +18 -19
  92. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +18 -19
  93. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +18 -19
  94. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +5 -5
  95. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +173 -196
  96. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +10 -19
  97. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +66 -97
  98. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +14 -13
  99. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +1 -1
  100. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +98 -84
  101. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +10 -8
  102. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +30 -16
  103. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +21 -35
  104. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +45 -39
  105. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +11 -23
  106. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +16 -49
  107. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +31 -21
  108. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +651 -0
  109. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +60 -0
  110. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +4 -4
  111. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +18 -18
  112. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +0 -1
  113. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +3 -3
  114. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +40 -41
  115. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +21 -21
  116. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +60 -59
  117. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +67 -66
  118. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +50 -51
  119. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
  120. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +18 -18
  121. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +18 -19
  122. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
  123. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
  124. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +0 -1
  125. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +44 -33
  126. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -10
  127. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +59 -73
  128. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +1 -1
  129. data/src/core/ext/filters/client_channel/retry_filter.cc +1 -1
  130. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
  131. data/src/core/ext/filters/client_channel/retry_throttle.cc +19 -21
  132. data/src/core/ext/filters/client_channel/retry_throttle.h +18 -18
  133. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +1 -1
  134. data/src/core/ext/filters/client_channel/subchannel.cc +139 -155
  135. data/src/core/ext/filters/client_channel/subchannel.h +15 -38
  136. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +18 -18
  137. data/src/core/ext/filters/deadline/deadline_filter.cc +21 -3
  138. data/src/core/ext/filters/deadline/deadline_filter.h +1 -1
  139. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +2 -1
  140. data/src/core/ext/filters/http/client/http_client_filter.cc +20 -21
  141. data/src/core/ext/filters/http/client/http_client_filter.h +17 -17
  142. data/src/core/ext/filters/http/client_authority_filter.cc +18 -18
  143. data/src/core/ext/filters/http/client_authority_filter.h +18 -18
  144. data/src/core/ext/filters/http/http_filters_plugin.cc +35 -51
  145. data/src/core/ext/filters/http/message_compress/compression_filter.cc +315 -0
  146. data/src/core/ext/filters/http/message_compress/compression_filter.h +132 -0
  147. data/src/core/ext/filters/http/server/http_server_filter.cc +18 -18
  148. data/src/core/ext/filters/http/server/http_server_filter.h +18 -18
  149. data/src/core/ext/filters/message_size/message_size_filter.cc +6 -6
  150. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  151. data/src/core/ext/filters/server_config_selector/server_config_selector.h +6 -8
  152. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +3 -4
  153. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +229 -0
  154. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
  155. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
  156. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
  157. data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
  158. data/src/core/ext/transport/chttp2/alpn/alpn.h +22 -22
  159. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +54 -44
  160. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +28 -22
  161. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +24 -25
  162. data/src/core/ext/transport/chttp2/server/chttp2_server.h +18 -18
  163. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +17 -17
  164. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +30 -30
  165. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +29 -29
  166. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +27 -27
  167. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +66 -35
  168. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +18 -19
  169. data/src/core/ext/transport/chttp2/transport/context_list.cc +19 -19
  170. data/src/core/ext/transport/chttp2/transport/context_list.h +25 -25
  171. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +0 -36
  172. data/src/core/ext/transport/chttp2/transport/decode_huff.h +35 -82
  173. data/src/core/ext/transport/chttp2/transport/flow_control.cc +75 -38
  174. data/src/core/ext/transport/chttp2/transport/flow_control.h +56 -31
  175. data/src/core/ext/transport/chttp2/transport/frame.h +19 -19
  176. data/src/core/ext/transport/chttp2/transport/frame_data.cc +17 -17
  177. data/src/core/ext/transport/chttp2/transport/frame_data.h +22 -22
  178. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +23 -23
  179. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +18 -18
  180. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +21 -21
  181. data/src/core/ext/transport/chttp2/transport/frame_ping.h +19 -19
  182. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +18 -18
  183. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +18 -18
  184. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +19 -19
  185. data/src/core/ext/transport/chttp2/transport/frame_settings.h +20 -20
  186. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +17 -17
  187. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +18 -18
  188. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +129 -176
  189. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +39 -58
  190. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +69 -111
  191. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +20 -20
  192. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +19 -20
  193. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +18 -18
  194. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
  195. data/src/core/ext/transport/chttp2/transport/http2_settings.h +36 -34
  196. data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
  197. data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
  198. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
  199. data/src/core/ext/transport/chttp2/transport/huffsyms.h +19 -19
  200. data/src/core/ext/transport/chttp2/transport/internal.h +170 -163
  201. data/src/core/ext/transport/chttp2/transport/parsing.cc +96 -28
  202. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +19 -19
  203. data/src/core/ext/transport/chttp2/transport/stream_map.cc +23 -23
  204. data/src/core/ext/transport/chttp2/transport/stream_map.h +31 -31
  205. data/src/core/ext/transport/chttp2/transport/varint.cc +17 -17
  206. data/src/core/ext/transport/chttp2/transport/varint.h +24 -24
  207. data/src/core/ext/transport/chttp2/transport/writing.cc +45 -41
  208. data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -17
  209. data/src/core/ext/transport/inproc/inproc_transport.cc +25 -25
  210. data/src/core/ext/transport/inproc/inproc_transport.h +19 -19
  211. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
  212. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
  213. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
  214. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
  215. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
  216. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
  217. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +3 -2
  218. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +9 -0
  219. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +0 -1
  220. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +46 -0
  221. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
  222. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
  223. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
  224. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
  225. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
  226. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
  227. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
  228. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
  229. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
  230. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +67 -0
  231. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +214 -0
  232. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +64 -0
  233. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +208 -0
  234. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +0 -1
  235. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
  236. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
  237. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
  238. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
  239. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
  240. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +35 -0
  241. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
  242. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +35 -0
  243. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
  244. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +40 -0
  245. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
  246. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +35 -0
  247. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
  248. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +40 -0
  249. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +9 -9
  250. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
  251. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +60 -0
  252. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
  253. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +40 -0
  254. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
  255. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +45 -0
  256. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +4 -7
  257. data/src/core/ext/xds/xds_api.cc +5 -27
  258. data/src/core/ext/xds/xds_api.h +2 -1
  259. data/src/core/ext/xds/xds_certificate_provider.h +1 -1
  260. data/src/core/ext/xds/xds_channel_args.h +1 -1
  261. data/src/core/ext/xds/xds_channel_stack_modifier.h +2 -2
  262. data/src/core/ext/xds/xds_client.cc +14 -6
  263. data/src/core/ext/xds/xds_client.h +6 -3
  264. data/src/core/ext/xds/xds_client_grpc.cc +26 -0
  265. data/src/core/ext/xds/xds_client_grpc.h +1 -1
  266. data/src/core/ext/xds/xds_client_stats.cc +17 -17
  267. data/src/core/ext/xds/xds_client_stats.h +18 -18
  268. data/src/core/ext/xds/xds_cluster.cc +94 -46
  269. data/src/core/ext/xds/xds_cluster.h +44 -23
  270. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +30 -50
  271. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +14 -9
  272. data/src/core/ext/xds/xds_common_types.cc +4 -3
  273. data/src/core/ext/xds/xds_endpoint.cc +8 -2
  274. data/src/core/ext/xds/xds_health_status.cc +80 -0
  275. data/src/core/ext/xds/xds_health_status.h +82 -0
  276. data/src/core/ext/xds/xds_http_fault_filter.cc +7 -6
  277. data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
  278. data/src/core/ext/xds/xds_http_filters.cc +11 -6
  279. data/src/core/ext/xds/xds_http_filters.h +5 -5
  280. data/src/core/ext/xds/xds_http_rbac_filter.cc +7 -6
  281. data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
  282. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
  283. data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
  284. data/src/core/ext/xds/xds_lb_policy_registry.cc +0 -4
  285. data/src/core/ext/xds/xds_listener.cc +14 -28
  286. data/src/core/ext/xds/xds_listener.h +2 -0
  287. data/src/core/ext/xds/xds_resource_type_impl.h +8 -6
  288. data/src/core/ext/xds/xds_route_config.cc +501 -529
  289. data/src/core/ext/xds/xds_route_config.h +29 -18
  290. data/src/core/ext/xds/xds_server_config_fetcher.cc +12 -24
  291. data/src/core/ext/xds/xds_transport_grpc.cc +2 -2
  292. data/src/core/ext/xds/xds_transport_grpc.h +1 -1
  293. data/src/core/lib/address_utils/parse_address.cc +19 -19
  294. data/src/core/lib/address_utils/parse_address.h +32 -32
  295. data/src/core/lib/address_utils/sockaddr_utils.cc +29 -28
  296. data/src/core/lib/address_utils/sockaddr_utils.h +33 -33
  297. data/src/core/lib/avl/avl.h +4 -4
  298. data/src/core/lib/backoff/backoff.cc +17 -17
  299. data/src/core/lib/backoff/backoff.h +18 -18
  300. data/src/core/lib/channel/call_tracer.h +10 -1
  301. data/src/core/lib/channel/channel_args.cc +19 -20
  302. data/src/core/lib/channel/channel_args.h +43 -42
  303. data/src/core/lib/channel/channel_args_preconditioning.h +1 -1
  304. data/src/core/lib/channel/channel_stack.cc +39 -38
  305. data/src/core/lib/channel/channel_stack.h +127 -127
  306. data/src/core/lib/channel/channel_stack_builder.cc +17 -17
  307. data/src/core/lib/channel/channel_stack_builder_impl.cc +18 -18
  308. data/src/core/lib/channel/channel_trace.cc +17 -17
  309. data/src/core/lib/channel/channel_trace.h +19 -19
  310. data/src/core/lib/channel/channelz.cc +17 -18
  311. data/src/core/lib/channel/channelz.h +26 -26
  312. data/src/core/lib/channel/channelz_registry.cc +17 -17
  313. data/src/core/lib/channel/channelz_registry.h +18 -18
  314. data/src/core/lib/channel/connected_channel.cc +43 -34
  315. data/src/core/lib/channel/connected_channel.h +18 -18
  316. data/src/core/lib/channel/context.h +18 -18
  317. data/src/core/lib/channel/promise_based_filter.cc +191 -68
  318. data/src/core/lib/channel/promise_based_filter.h +10 -1
  319. data/src/core/lib/channel/status_util.cc +35 -17
  320. data/src/core/lib/channel/status_util.h +26 -19
  321. data/src/core/lib/compression/compression.cc +19 -19
  322. data/src/core/lib/compression/compression_internal.cc +41 -48
  323. data/src/core/lib/compression/compression_internal.h +22 -22
  324. data/src/core/lib/compression/message_compress.cc +21 -21
  325. data/src/core/lib/compression/message_compress.h +25 -25
  326. data/src/core/lib/config/core_configuration.h +1 -1
  327. data/src/core/lib/debug/stats.cc +17 -17
  328. data/src/core/lib/debug/stats.h +17 -17
  329. data/src/core/lib/debug/trace.cc +18 -18
  330. data/src/core/lib/debug/trace.h +19 -19
  331. data/src/core/lib/event_engine/executor/executor.h +1 -1
  332. data/src/core/lib/event_engine/forkable.h +1 -1
  333. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +27 -31
  334. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +2 -2
  335. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +36 -37
  336. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +3 -3
  337. data/src/core/lib/event_engine/posix_engine/event_poller.h +3 -3
  338. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +2 -2
  339. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +2 -2
  340. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +2 -2
  341. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +46 -46
  342. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +10 -12
  343. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +2 -2
  344. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +79 -41
  345. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +11 -9
  346. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +33 -40
  347. data/src/core/lib/event_engine/posix_engine/posix_engine.h +14 -14
  348. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +2 -2
  349. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +236 -0
  350. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +228 -0
  351. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +380 -0
  352. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
  353. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +55 -283
  354. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +4 -49
  355. data/src/core/lib/event_engine/posix_engine/timer.cc +49 -49
  356. data/src/core/lib/event_engine/posix_engine/timer.h +87 -87
  357. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +27 -27
  358. data/src/core/lib/event_engine/posix_engine/timer_heap.h +21 -21
  359. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +19 -20
  360. data/src/core/lib/event_engine/posix_engine/timer_manager.h +20 -20
  361. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +39 -8
  362. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +46 -40
  363. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +8 -7
  364. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +2 -2
  365. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +6 -7
  366. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +2 -2
  367. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +28 -28
  368. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +4 -4
  369. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -3
  370. data/src/core/lib/event_engine/socket_notifier.h +1 -1
  371. data/src/core/lib/event_engine/tcp_socket_utils.cc +373 -0
  372. data/src/core/lib/event_engine/tcp_socket_utils.h +85 -0
  373. data/src/core/lib/event_engine/thread_pool.cc +19 -18
  374. data/src/core/lib/event_engine/thread_pool.h +17 -17
  375. data/src/core/lib/event_engine/time_util.h +1 -1
  376. data/src/core/lib/event_engine/windows/iocp.cc +13 -12
  377. data/src/core/lib/event_engine/windows/iocp.h +1 -1
  378. data/src/core/lib/event_engine/windows/win_socket.cc +2 -2
  379. data/src/core/lib/event_engine/windows/windows_engine.cc +8 -8
  380. data/src/core/lib/event_engine/windows/windows_engine.h +1 -1
  381. data/src/core/lib/experiments/experiments.cc +5 -16
  382. data/src/core/lib/experiments/experiments.h +7 -12
  383. data/src/core/lib/gpr/alloc.cc +19 -17
  384. data/src/core/lib/gpr/alloc.h +18 -18
  385. data/src/core/lib/gpr/atm.cc +17 -17
  386. data/src/core/lib/gpr/cpu_iphone.cc +24 -24
  387. data/src/core/lib/gpr/cpu_linux.cc +22 -21
  388. data/src/core/lib/gpr/cpu_posix.cc +23 -22
  389. data/src/core/lib/gpr/cpu_windows.cc +20 -18
  390. data/src/core/lib/gpr/log.cc +27 -19
  391. data/src/core/lib/gpr/log_android.cc +22 -20
  392. data/src/core/lib/gpr/log_linux.cc +21 -20
  393. data/src/core/lib/gpr/log_posix.cc +20 -19
  394. data/src/core/lib/gpr/log_windows.cc +25 -24
  395. data/src/core/lib/gpr/spinlock.h +18 -18
  396. data/src/core/lib/gpr/string.cc +25 -24
  397. data/src/core/lib/gpr/string.h +57 -57
  398. data/src/core/lib/gpr/string_posix.cc +24 -24
  399. data/src/core/lib/gpr/string_util_windows.cc +22 -22
  400. data/src/core/lib/gpr/string_windows.cc +24 -24
  401. data/src/core/lib/gpr/sync.cc +25 -25
  402. data/src/core/lib/gpr/sync_abseil.cc +22 -20
  403. data/src/core/lib/gpr/sync_posix.cc +23 -21
  404. data/src/core/lib/gpr/sync_windows.cc +29 -27
  405. data/src/core/lib/gpr/time.cc +23 -21
  406. data/src/core/lib/gpr/time_posix.cc +35 -30
  407. data/src/core/lib/gpr/time_precise.cc +22 -22
  408. data/src/core/lib/gpr/time_precise.h +18 -19
  409. data/src/core/lib/gpr/time_windows.cc +25 -22
  410. data/src/core/lib/gpr/tmpfile.h +22 -22
  411. data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
  412. data/src/core/lib/gpr/tmpfile_posix.cc +19 -18
  413. data/src/core/lib/gpr/tmpfile_windows.cc +23 -22
  414. data/src/core/lib/gpr/useful.h +40 -27
  415. data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
  416. data/src/core/lib/gprpp/atomic_utils.h +18 -18
  417. data/src/core/lib/gprpp/bitset.h +24 -0
  418. data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/gprpp/crash.cc} +15 -14
  419. data/src/core/lib/gprpp/crash.h +34 -0
  420. data/src/core/lib/gprpp/debug_location.h +18 -18
  421. data/src/core/lib/gprpp/dual_ref_counted.h +1 -1
  422. data/src/core/lib/gprpp/env.h +20 -20
  423. data/src/core/lib/gprpp/env_linux.cc +21 -21
  424. data/src/core/lib/gprpp/env_posix.cc +18 -18
  425. data/src/core/lib/gprpp/env_windows.cc +18 -18
  426. data/src/core/lib/gprpp/examine_stack.cc +17 -17
  427. data/src/core/lib/gprpp/examine_stack.h +18 -18
  428. data/src/core/lib/gprpp/fork.cc +21 -22
  429. data/src/core/lib/gprpp/fork.h +22 -22
  430. data/src/core/lib/gprpp/global_config.h +18 -18
  431. data/src/core/lib/gprpp/global_config_custom.h +18 -18
  432. data/src/core/lib/gprpp/global_config_env.cc +17 -17
  433. data/src/core/lib/gprpp/global_config_env.h +23 -23
  434. data/src/core/lib/gprpp/global_config_generic.h +18 -18
  435. data/src/core/lib/gprpp/host_port.cc +26 -26
  436. data/src/core/lib/gprpp/host_port.h +29 -28
  437. data/src/core/lib/gprpp/manual_constructor.h +18 -17
  438. data/src/core/lib/gprpp/memory.h +18 -18
  439. data/src/core/lib/gprpp/mpscq.cc +17 -17
  440. data/src/core/lib/gprpp/mpscq.h +18 -18
  441. data/src/core/lib/gprpp/no_destruct.h +1 -0
  442. data/src/core/lib/gprpp/orphanable.h +18 -18
  443. data/src/core/lib/gprpp/ref_counted.h +18 -18
  444. data/src/core/lib/gprpp/ref_counted_ptr.h +19 -18
  445. data/src/core/lib/gprpp/stat_windows.cc +1 -0
  446. data/src/core/lib/gprpp/status_helper.cc +4 -3
  447. data/src/core/lib/gprpp/sync.h +20 -20
  448. data/src/core/lib/gprpp/table.h +1 -0
  449. data/src/core/lib/gprpp/thd.h +19 -19
  450. data/src/core/lib/gprpp/thd_posix.cc +30 -31
  451. data/src/core/lib/gprpp/thd_windows.cc +25 -24
  452. data/src/core/lib/gprpp/time.cc +13 -7
  453. data/src/core/lib/gprpp/time.h +0 -1
  454. data/src/core/lib/gprpp/time_averaged_stats.cc +20 -20
  455. data/src/core/lib/gprpp/time_averaged_stats.h +48 -48
  456. data/src/core/lib/gprpp/time_util.h +1 -1
  457. data/src/core/lib/gprpp/unique_type_name.h +18 -18
  458. data/src/core/lib/handshaker/proxy_mapper.h +18 -18
  459. data/src/core/lib/handshaker/proxy_mapper_registry.cc +17 -17
  460. data/src/core/lib/handshaker/proxy_mapper_registry.h +18 -18
  461. data/src/core/lib/http/format_request.cc +18 -18
  462. data/src/core/lib/http/format_request.h +18 -18
  463. data/src/core/lib/http/httpcli.cc +17 -17
  464. data/src/core/lib/http/httpcli.h +20 -21
  465. data/src/core/lib/http/httpcli_security_connector.cc +18 -19
  466. data/src/core/lib/http/parser.cc +22 -22
  467. data/src/core/lib/http/parser.h +32 -32
  468. data/src/core/lib/iomgr/block_annotate.h +21 -21
  469. data/src/core/lib/iomgr/buffer_list.cc +52 -21
  470. data/src/core/lib/iomgr/buffer_list.h +63 -57
  471. data/src/core/lib/iomgr/call_combiner.cc +18 -17
  472. data/src/core/lib/iomgr/call_combiner.h +18 -18
  473. data/src/core/lib/iomgr/cfstream_handle.cc +20 -20
  474. data/src/core/lib/iomgr/cfstream_handle.h +22 -22
  475. data/src/core/lib/iomgr/closure.h +42 -41
  476. data/src/core/lib/iomgr/combiner.cc +18 -17
  477. data/src/core/lib/iomgr/combiner.h +18 -18
  478. data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
  479. data/src/core/lib/iomgr/dynamic_annotations.h +20 -20
  480. data/src/core/lib/iomgr/endpoint.cc +17 -17
  481. data/src/core/lib/iomgr/endpoint.h +46 -46
  482. data/src/core/lib/iomgr/endpoint_cfstream.cc +18 -18
  483. data/src/core/lib/iomgr/endpoint_cfstream.h +27 -27
  484. data/src/core/lib/iomgr/endpoint_pair.h +18 -18
  485. data/src/core/lib/iomgr/endpoint_pair_posix.cc +18 -17
  486. data/src/core/lib/iomgr/endpoint_pair_windows.cc +18 -17
  487. data/src/core/lib/iomgr/error.cc +22 -19
  488. data/src/core/lib/iomgr/error.h +20 -21
  489. data/src/core/lib/iomgr/error_cfstream.cc +18 -18
  490. data/src/core/lib/iomgr/error_cfstream.h +19 -19
  491. data/src/core/lib/iomgr/ev_apple.cc +17 -17
  492. data/src/core/lib/iomgr/ev_apple.h +17 -17
  493. data/src/core/lib/iomgr/ev_epoll1_linux.cc +182 -170
  494. data/src/core/lib/iomgr/ev_epoll1_linux.h +18 -18
  495. data/src/core/lib/iomgr/ev_poll_posix.cc +185 -174
  496. data/src/core/lib/iomgr/ev_poll_posix.h +18 -18
  497. data/src/core/lib/iomgr/ev_posix.cc +36 -28
  498. data/src/core/lib/iomgr/ev_posix.h +85 -81
  499. data/src/core/lib/iomgr/ev_windows.cc +18 -18
  500. data/src/core/lib/iomgr/exec_ctx.cc +31 -30
  501. data/src/core/lib/iomgr/exec_ctx.h +139 -138
  502. data/src/core/lib/iomgr/executor.cc +20 -19
  503. data/src/core/lib/iomgr/executor.h +24 -24
  504. data/src/core/lib/iomgr/fork_posix.cc +24 -22
  505. data/src/core/lib/iomgr/fork_windows.cc +21 -21
  506. data/src/core/lib/iomgr/gethostname.h +18 -18
  507. data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
  508. data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
  509. data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
  510. data/src/core/lib/iomgr/grpc_if_nametoindex.h +20 -20
  511. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
  512. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
  513. data/src/core/lib/iomgr/internal_errqueue.cc +1 -1
  514. data/src/core/lib/iomgr/internal_errqueue.h +80 -80
  515. data/src/core/lib/iomgr/iocp_windows.cc +21 -21
  516. data/src/core/lib/iomgr/iocp_windows.h +18 -18
  517. data/src/core/lib/iomgr/iomgr.cc +19 -18
  518. data/src/core/lib/iomgr/iomgr.h +32 -32
  519. data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
  520. data/src/core/lib/iomgr/iomgr_internal.h +25 -25
  521. data/src/core/lib/iomgr/iomgr_posix.cc +18 -18
  522. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +18 -18
  523. data/src/core/lib/iomgr/iomgr_windows.cc +22 -21
  524. data/src/core/lib/iomgr/load_file.cc +19 -18
  525. data/src/core/lib/iomgr/load_file.h +20 -20
  526. data/src/core/lib/iomgr/lockfree_event.cc +104 -104
  527. data/src/core/lib/iomgr/lockfree_event.h +19 -19
  528. data/src/core/lib/iomgr/nameser.h +84 -84
  529. data/src/core/lib/iomgr/polling_entity.cc +25 -21
  530. data/src/core/lib/iomgr/polling_entity.h +27 -27
  531. data/src/core/lib/iomgr/pollset.cc +17 -17
  532. data/src/core/lib/iomgr/pollset.h +51 -51
  533. data/src/core/lib/iomgr/pollset_set.cc +17 -17
  534. data/src/core/lib/iomgr/pollset_set.h +22 -22
  535. data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
  536. data/src/core/lib/iomgr/pollset_set_windows.h +18 -18
  537. data/src/core/lib/iomgr/pollset_windows.cc +26 -25
  538. data/src/core/lib/iomgr/pollset_windows.h +22 -22
  539. data/src/core/lib/iomgr/port.h +29 -29
  540. data/src/core/lib/iomgr/python_util.h +18 -18
  541. data/src/core/lib/iomgr/resolve_address.cc +18 -17
  542. data/src/core/lib/iomgr/resolve_address.h +18 -18
  543. data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
  544. data/src/core/lib/iomgr/resolve_address_posix.cc +21 -20
  545. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -3
  546. data/src/core/lib/iomgr/resolved_address.h +1 -1
  547. data/src/core/lib/iomgr/sockaddr.h +21 -21
  548. data/src/core/lib/iomgr/sockaddr_posix.h +18 -18
  549. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +18 -17
  550. data/src/core/lib/iomgr/sockaddr_windows.h +18 -18
  551. data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
  552. data/src/core/lib/iomgr/socket_factory_posix.h +30 -30
  553. data/src/core/lib/iomgr/socket_mutator.cc +19 -18
  554. data/src/core/lib/iomgr/socket_mutator.h +37 -37
  555. data/src/core/lib/iomgr/socket_utils.h +24 -24
  556. data/src/core/lib/iomgr/socket_utils_common_posix.cc +38 -37
  557. data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
  558. data/src/core/lib/iomgr/socket_utils_posix.cc +21 -20
  559. data/src/core/lib/iomgr/socket_utils_posix.h +76 -76
  560. data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
  561. data/src/core/lib/iomgr/socket_windows.cc +35 -34
  562. data/src/core/lib/iomgr/socket_windows.h +56 -56
  563. data/src/core/lib/iomgr/systemd_utils.cc +116 -0
  564. data/src/core/lib/iomgr/systemd_utils.h +33 -0
  565. data/src/core/lib/iomgr/tcp_client.cc +17 -17
  566. data/src/core/lib/iomgr/tcp_client.h +26 -26
  567. data/src/core/lib/iomgr/tcp_client_cfstream.cc +19 -18
  568. data/src/core/lib/iomgr/tcp_client_posix.cc +39 -38
  569. data/src/core/lib/iomgr/tcp_client_posix.h +43 -43
  570. data/src/core/lib/iomgr/tcp_client_windows.cc +28 -27
  571. data/src/core/lib/iomgr/tcp_posix.cc +136 -134
  572. data/src/core/lib/iomgr/tcp_posix.h +27 -27
  573. data/src/core/lib/iomgr/tcp_server.cc +30 -22
  574. data/src/core/lib/iomgr/tcp_server.h +68 -62
  575. data/src/core/lib/iomgr/tcp_server_posix.cc +91 -61
  576. data/src/core/lib/iomgr/tcp_server_utils_posix.h +54 -51
  577. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +72 -34
  578. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +28 -27
  579. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +18 -18
  580. data/src/core/lib/iomgr/tcp_server_windows.cc +71 -75
  581. data/src/core/lib/iomgr/tcp_windows.cc +83 -60
  582. data/src/core/lib/iomgr/tcp_windows.h +29 -29
  583. data/src/core/lib/iomgr/timer.cc +17 -17
  584. data/src/core/lib/iomgr/timer.h +65 -65
  585. data/src/core/lib/iomgr/timer_generic.cc +106 -107
  586. data/src/core/lib/iomgr/timer_generic.h +19 -19
  587. data/src/core/lib/iomgr/timer_heap.cc +25 -25
  588. data/src/core/lib/iomgr/timer_heap.h +19 -19
  589. data/src/core/lib/iomgr/timer_manager.cc +30 -29
  590. data/src/core/lib/iomgr/timer_manager.h +25 -25
  591. data/src/core/lib/iomgr/unix_sockets_posix.cc +18 -17
  592. data/src/core/lib/iomgr/unix_sockets_posix.h +18 -18
  593. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
  594. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +19 -18
  595. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
  596. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +19 -18
  597. data/src/core/lib/iomgr/wakeup_fd_pipe.h +18 -18
  598. data/src/core/lib/iomgr/wakeup_fd_posix.cc +18 -18
  599. data/src/core/lib/iomgr/wakeup_fd_posix.h +50 -50
  600. data/src/core/lib/json/json_object_loader.cc +10 -0
  601. data/src/core/lib/json/json_object_loader.h +15 -1
  602. data/src/core/lib/json/json_reader.cc +28 -28
  603. data/src/core/lib/json/json_writer.cc +56 -56
  604. data/src/core/lib/load_balancing/lb_policy.cc +17 -17
  605. data/src/core/lib/load_balancing/lb_policy.h +3 -4
  606. data/src/core/lib/load_balancing/subchannel_interface.h +1 -1
  607. data/src/core/lib/matchers/matchers.cc +3 -1
  608. data/src/core/lib/matchers/matchers.h +1 -1
  609. data/src/core/lib/promise/activity.h +20 -12
  610. data/src/core/lib/promise/arena_promise.h +2 -1
  611. data/src/core/lib/promise/context.h +1 -0
  612. data/src/core/lib/promise/detail/promise_factory.h +1 -0
  613. data/src/core/lib/promise/detail/switch.h +18 -18
  614. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +18 -12
  615. data/src/core/lib/promise/for_each.h +68 -42
  616. data/src/core/lib/promise/latch.h +13 -19
  617. data/src/core/lib/promise/map.h +1 -0
  618. data/src/core/lib/promise/map_pipe.h +1 -0
  619. data/src/core/lib/promise/poll.h +6 -0
  620. data/src/core/lib/promise/seq.h +1 -0
  621. data/src/core/lib/promise/try_concurrently.h +1 -0
  622. data/src/core/lib/promise/try_seq.h +1 -0
  623. data/src/core/lib/resolver/resolver.cc +17 -17
  624. data/src/core/lib/resolver/server_address.cc +17 -17
  625. data/src/core/lib/resolver/server_address.h +18 -18
  626. data/src/core/lib/resource_quota/api.h +1 -1
  627. data/src/core/lib/resource_quota/arena.cc +17 -17
  628. data/src/core/lib/resource_quota/arena.h +18 -18
  629. data/src/core/lib/resource_quota/memory_quota.cc +139 -43
  630. data/src/core/lib/resource_quota/memory_quota.h +85 -23
  631. data/src/core/lib/resource_quota/resource_quota.h +1 -1
  632. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  633. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +0 -1
  634. data/src/core/lib/security/authorization/rbac_policy.h +1 -1
  635. data/src/core/lib/security/context/security_context.cc +22 -23
  636. data/src/core/lib/security/context/security_context.h +30 -30
  637. data/src/core/lib/security/credentials/alts/alts_credentials.cc +17 -17
  638. data/src/core/lib/security/credentials/alts/alts_credentials.h +50 -50
  639. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
  640. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +41 -41
  641. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
  642. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
  643. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
  644. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +19 -19
  645. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
  646. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +36 -37
  647. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +18 -18
  648. data/src/core/lib/security/credentials/call_creds_util.h +1 -1
  649. data/src/core/lib/security/credentials/composite/composite_credentials.cc +21 -21
  650. data/src/core/lib/security/credentials/composite/composite_credentials.h +20 -21
  651. data/src/core/lib/security/credentials/credentials.cc +19 -18
  652. data/src/core/lib/security/credentials/credentials.h +34 -33
  653. data/src/core/lib/security/credentials/fake/fake_credentials.cc +19 -19
  654. data/src/core/lib/security/credentials/fake/fake_credentials.h +34 -35
  655. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +17 -17
  656. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +48 -49
  657. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +18 -19
  658. data/src/core/lib/security/credentials/iam/iam_credentials.cc +17 -17
  659. data/src/core/lib/security/credentials/iam/iam_credentials.h +18 -18
  660. data/src/core/lib/security/credentials/jwt/json_token.cc +23 -23
  661. data/src/core/lib/security/credentials/jwt/json_token.h +32 -32
  662. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +17 -17
  663. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +18 -19
  664. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +70 -70
  665. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +43 -43
  666. data/src/core/lib/security/credentials/local/local_credentials.cc +17 -17
  667. data/src/core/lib/security/credentials/local/local_credentials.h +20 -20
  668. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +28 -29
  669. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +19 -19
  670. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +18 -18
  671. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +19 -19
  672. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +19 -20
  673. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +18 -18
  674. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +1 -1
  675. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +1 -2
  676. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +18 -18
  677. data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -19
  678. data/src/core/lib/security/credentials/tls/tls_credentials.h +18 -18
  679. data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -2
  680. data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
  681. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +26 -27
  682. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +41 -42
  683. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +24 -26
  684. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +20 -21
  685. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +1 -2
  686. data/src/core/lib/security/security_connector/load_system_roots.h +18 -18
  687. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +18 -18
  688. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +18 -18
  689. data/src/core/lib/security/security_connector/load_system_roots_supported.h +19 -20
  690. data/src/core/lib/security/security_connector/local/local_security_connector.cc +23 -23
  691. data/src/core/lib/security/security_connector/local/local_security_connector.h +40 -41
  692. data/src/core/lib/security/security_connector/security_connector.cc +17 -17
  693. data/src/core/lib/security/security_connector/security_connector.h +32 -33
  694. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +25 -25
  695. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +38 -39
  696. data/src/core/lib/security/security_connector/ssl_utils.cc +32 -32
  697. data/src/core/lib/security/security_connector/ssl_utils.h +31 -31
  698. data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
  699. data/src/core/lib/security/security_connector/ssl_utils_config.h +18 -19
  700. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -21
  701. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +17 -17
  702. data/src/core/lib/security/transport/auth_filters.h +18 -18
  703. data/src/core/lib/security/transport/client_auth_filter.cc +20 -20
  704. data/src/core/lib/security/transport/secure_endpoint.cc +28 -28
  705. data/src/core/lib/security/transport/secure_endpoint.h +22 -22
  706. data/src/core/lib/security/transport/security_handshaker.cc +17 -17
  707. data/src/core/lib/security/transport/security_handshaker.h +19 -19
  708. data/src/core/lib/security/transport/server_auth_filter.cc +22 -23
  709. data/src/core/lib/security/transport/tsi_error.cc +17 -17
  710. data/src/core/lib/security/transport/tsi_error.h +18 -18
  711. data/src/core/lib/security/util/json_util.cc +17 -17
  712. data/src/core/lib/security/util/json_util.h +18 -18
  713. data/src/core/lib/service_config/service_config.h +1 -1
  714. data/src/core/lib/service_config/service_config_call_data.h +7 -1
  715. data/src/core/lib/slice/b64.cc +24 -24
  716. data/src/core/lib/slice/b64.h +29 -29
  717. data/src/core/lib/slice/percent_encoding.cc +17 -17
  718. data/src/core/lib/slice/percent_encoding.h +24 -24
  719. data/src/core/lib/slice/slice.cc +37 -37
  720. data/src/core/lib/slice/slice.h +38 -5
  721. data/src/core/lib/slice/slice_buffer.cc +50 -45
  722. data/src/core/lib/slice/slice_buffer.h +27 -2
  723. data/src/core/lib/slice/slice_internal.h +18 -18
  724. data/src/core/lib/slice/slice_string_helpers.cc +17 -17
  725. data/src/core/lib/slice/slice_string_helpers.h +19 -19
  726. data/src/core/lib/surface/api_trace.cc +17 -17
  727. data/src/core/lib/surface/api_trace.h +22 -22
  728. data/src/core/lib/surface/byte_buffer.cc +19 -19
  729. data/src/core/lib/surface/byte_buffer_reader.cc +19 -19
  730. data/src/core/lib/surface/call.cc +163 -104
  731. data/src/core/lib/surface/call.h +42 -39
  732. data/src/core/lib/surface/call_details.cc +17 -18
  733. data/src/core/lib/surface/call_log_batch.cc +18 -18
  734. data/src/core/lib/surface/call_test_only.h +30 -30
  735. data/src/core/lib/surface/call_trace.cc +5 -5
  736. data/src/core/lib/surface/channel.cc +18 -18
  737. data/src/core/lib/surface/channel.h +31 -31
  738. data/src/core/lib/surface/channel_init.cc +17 -17
  739. data/src/core/lib/surface/channel_init.h +18 -18
  740. data/src/core/lib/surface/channel_ping.cc +18 -18
  741. data/src/core/lib/surface/channel_stack_type.cc +17 -17
  742. data/src/core/lib/surface/channel_stack_type.h +18 -18
  743. data/src/core/lib/surface/completion_queue.cc +136 -140
  744. data/src/core/lib/surface/completion_queue.h +32 -32
  745. data/src/core/lib/surface/completion_queue_factory.cc +28 -28
  746. data/src/core/lib/surface/completion_queue_factory.h +20 -20
  747. data/src/core/lib/surface/event_string.cc +17 -17
  748. data/src/core/lib/surface/event_string.h +20 -20
  749. data/src/core/lib/surface/init.cc +21 -19
  750. data/src/core/lib/surface/init.h +18 -18
  751. data/src/core/lib/surface/init_internally.cc +1 -0
  752. data/src/core/lib/surface/init_internally.h +1 -0
  753. data/src/core/lib/surface/lame_client.cc +18 -18
  754. data/src/core/lib/surface/lame_client.h +19 -19
  755. data/src/core/lib/surface/metadata_array.cc +17 -18
  756. data/src/core/lib/surface/server.cc +15 -15
  757. data/src/core/lib/surface/server.h +2 -3
  758. data/src/core/lib/surface/validate_metadata.cc +17 -17
  759. data/src/core/lib/surface/validate_metadata.h +18 -18
  760. data/src/core/lib/surface/version.cc +21 -21
  761. data/src/core/lib/transport/bdp_estimator.cc +17 -17
  762. data/src/core/lib/transport/bdp_estimator.h +18 -19
  763. data/src/core/lib/transport/connectivity_state.cc +17 -17
  764. data/src/core/lib/transport/connectivity_state.h +19 -19
  765. data/src/core/lib/transport/error_utils.cc +17 -17
  766. data/src/core/lib/transport/error_utils.h +18 -18
  767. data/src/core/lib/transport/handshaker.cc +37 -34
  768. data/src/core/lib/transport/handshaker.h +42 -37
  769. data/src/core/lib/transport/handshaker_factory.h +18 -18
  770. data/src/core/lib/transport/handshaker_registry.cc +17 -17
  771. data/src/core/lib/transport/handshaker_registry.h +18 -18
  772. data/src/core/lib/transport/http2_errors.h +20 -20
  773. data/src/core/lib/transport/http_connect_handshaker.cc +17 -17
  774. data/src/core/lib/transport/http_connect_handshaker.h +18 -18
  775. data/src/core/lib/transport/metadata_batch.cc +4 -1
  776. data/src/core/lib/transport/metadata_batch.h +30 -20
  777. data/src/core/lib/transport/parsed_metadata.h +1 -0
  778. data/src/core/lib/transport/pid_controller.cc +20 -20
  779. data/src/core/lib/transport/pid_controller.h +24 -24
  780. data/src/core/lib/transport/status_conversion.cc +22 -22
  781. data/src/core/lib/transport/status_conversion.h +20 -20
  782. data/src/core/lib/transport/tcp_connect_handshaker.h +1 -1
  783. data/src/core/lib/transport/timeout_encoding.cc +22 -22
  784. data/src/core/lib/transport/timeout_encoding.h +18 -18
  785. data/src/core/lib/transport/transport.cc +25 -24
  786. data/src/core/lib/transport/transport.h +134 -132
  787. data/src/core/lib/transport/transport_impl.h +41 -41
  788. data/src/core/lib/transport/transport_op_string.cc +19 -19
  789. data/src/core/plugin_registry/grpc_plugin_registry.cc +21 -19
  790. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +5 -0
  791. data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
  792. data/src/core/tsi/alts/crypt/gsec.cc +26 -26
  793. data/src/core/tsi/alts/crypt/gsec.h +334 -334
  794. data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
  795. data/src/core/tsi/alts/frame_protector/alts_counter.h +66 -66
  796. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
  797. data/src/core/tsi/alts/frame_protector/alts_crypter.h +206 -206
  798. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
  799. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +38 -38
  800. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
  801. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +80 -81
  802. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
  803. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
  804. data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
  805. data/src/core/tsi/alts/frame_protector/frame_handler.h +166 -166
  806. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +68 -67
  807. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +99 -99
  808. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
  809. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +41 -42
  810. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +29 -28
  811. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +58 -58
  812. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +20 -20
  813. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +19 -19
  814. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +36 -36
  815. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
  816. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +102 -101
  817. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +38 -37
  818. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +38 -39
  819. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +31 -30
  820. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +33 -34
  821. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +65 -66
  822. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +31 -30
  823. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +53 -54
  824. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
  825. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +138 -139
  826. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +53 -52
  827. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +41 -42
  828. data/src/core/tsi/fake_transport_security.cc +77 -76
  829. data/src/core/tsi/fake_transport_security.h +30 -30
  830. data/src/core/tsi/local_transport_security.cc +34 -33
  831. data/src/core/tsi/local_transport_security.h +31 -31
  832. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +1 -0
  833. data/src/core/tsi/ssl/session_cache/ssl_session.h +18 -18
  834. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +18 -18
  835. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
  836. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +19 -19
  837. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +19 -18
  838. data/src/core/tsi/ssl_transport_security.cc +139 -323
  839. data/src/core/tsi/ssl_transport_security.h +201 -200
  840. data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
  841. data/src/core/tsi/ssl_transport_security_utils.h +147 -0
  842. data/src/core/tsi/ssl_types.h +25 -25
  843. data/src/core/tsi/transport_security.cc +26 -26
  844. data/src/core/tsi/transport_security.h +45 -45
  845. data/src/core/tsi/transport_security_grpc.cc +20 -20
  846. data/src/core/tsi/transport_security_grpc.h +39 -39
  847. data/src/core/tsi/transport_security_interface.h +330 -330
  848. data/src/ruby/ext/grpc/{ext-export-truffleruby.clang → ext-export-truffleruby-with-ruby-abi-version.clang} +0 -0
  849. data/src/ruby/ext/grpc/{ext-export-truffleruby.gcc → ext-export-truffleruby-with-ruby-abi-version.gcc} +0 -0
  850. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
  851. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
  852. data/src/ruby/ext/grpc/ext-export.clang +0 -1
  853. data/src/ruby/ext/grpc/ext-export.gcc +1 -2
  854. data/src/ruby/ext/grpc/extconf.rb +47 -2
  855. data/src/ruby/ext/grpc/rb_call.c +1 -0
  856. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  857. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  858. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  859. data/src/ruby/ext/grpc/rb_grpc.c +1 -0
  860. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -36
  861. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +59 -56
  862. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  863. data/src/ruby/lib/grpc/version.rb +1 -1
  864. data/src/ruby/spec/client_server_spec.rb +20 -8
  865. data/third_party/re2/re2/bitstate.cc +3 -3
  866. data/third_party/re2/re2/dfa.cc +13 -13
  867. data/third_party/re2/re2/nfa.cc +4 -4
  868. data/third_party/re2/re2/onepass.cc +2 -2
  869. data/third_party/re2/re2/prefilter_tree.cc +27 -59
  870. data/third_party/re2/re2/prefilter_tree.h +3 -2
  871. data/third_party/re2/re2/prog.cc +11 -2
  872. data/third_party/re2/re2/prog.h +17 -5
  873. data/third_party/re2/re2/re2.cc +6 -11
  874. data/third_party/re2/re2/re2.h +1 -1
  875. data/third_party/re2/re2/regexp.cc +1 -2
  876. data/third_party/re2/re2/stringpiece.h +10 -7
  877. data/third_party/re2/re2/unicode_casefold.cc +25 -11
  878. data/third_party/re2/re2/unicode_groups.cc +319 -151
  879. data/third_party/re2/re2/walker-inl.h +3 -2
  880. data/third_party/re2/util/mutex.h +4 -4
  881. metadata +93 -24
  882. data/include/grpc/impl/codegen/gpr_slice.h +0 -71
  883. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -332
  884. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -52
  885. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -322
  886. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -62
@@ -28,10 +28,10 @@
28
28
  #ifdef GRPC_LINUX_ERRQUEUE
29
29
  #include <linux/errqueue.h> // IWYU pragma: keep
30
30
  #include <sys/socket.h>
31
- #endif /* GRPC_LINUX_ERRQUEUE */
31
+ #endif // GRPC_LINUX_ERRQUEUE
32
32
 
33
33
  namespace grpc_event_engine {
34
- namespace posix_engine {
34
+ namespace experimental {
35
35
 
36
36
  #ifdef GRPC_LINUX_ERRQUEUE
37
37
 
@@ -72,31 +72,31 @@ constexpr uint32_t kTimestampingRecordingOptions =
72
72
  // Netlink attribute types used for TCP opt stats.
73
73
  enum TCPOptStats {
74
74
  TCP_NLA_PAD,
75
- TCP_NLA_BUSY, /* Time (usec) busy sending data. */
76
- TCP_NLA_RWND_LIMITED, /* Time (usec) limited by receive window. */
77
- TCP_NLA_SNDBUF_LIMITED, /* Time (usec) limited by send buffer. */
78
- TCP_NLA_DATA_SEGS_OUT, /* Data pkts sent including retransmission. */
79
- TCP_NLA_TOTAL_RETRANS, /* Data pkts retransmitted. */
80
- TCP_NLA_PACING_RATE, /* Pacing rate in Bps. */
81
- TCP_NLA_DELIVERY_RATE, /* Delivery rate in Bps. */
82
- TCP_NLA_SND_CWND, /* Sending congestion window. */
83
- TCP_NLA_REORDERING, /* Reordering metric. */
84
- TCP_NLA_MIN_RTT, /* minimum RTT. */
85
- TCP_NLA_RECUR_RETRANS, /* Recurring retransmits for the current pkt. */
86
- TCP_NLA_DELIVERY_RATE_APP_LMT, /* Delivery rate application limited? */
87
- TCP_NLA_SNDQ_SIZE, /* Data (bytes) pending in send queue */
88
- TCP_NLA_CA_STATE, /* ca_state of socket */
89
- TCP_NLA_SND_SSTHRESH, /* Slow start size threshold */
90
- TCP_NLA_DELIVERED, /* Data pkts delivered incl. out-of-order */
91
- TCP_NLA_DELIVERED_CE, /* Like above but only ones w/ CE marks */
92
- TCP_NLA_BYTES_SENT, /* Data bytes sent including retransmission */
93
- TCP_NLA_BYTES_RETRANS, /* Data bytes retransmitted */
94
- TCP_NLA_DSACK_DUPS, /* DSACK blocks received */
95
- TCP_NLA_REORD_SEEN, /* reordering events seen */
96
- TCP_NLA_SRTT, /* smoothed RTT in usecs */
75
+ TCP_NLA_BUSY, // Time (usec) busy sending data.
76
+ TCP_NLA_RWND_LIMITED, // Time (usec) limited by receive window.
77
+ TCP_NLA_SNDBUF_LIMITED, // Time (usec) limited by send buffer.
78
+ TCP_NLA_DATA_SEGS_OUT, // Data pkts sent including retransmission.
79
+ TCP_NLA_TOTAL_RETRANS, // Data pkts retransmitted.
80
+ TCP_NLA_PACING_RATE, // Pacing rate in Bps.
81
+ TCP_NLA_DELIVERY_RATE, // Delivery rate in Bps.
82
+ TCP_NLA_SND_CWND, // Sending congestion window.
83
+ TCP_NLA_REORDERING, // Reordering metric.
84
+ TCP_NLA_MIN_RTT, // minimum RTT.
85
+ TCP_NLA_RECUR_RETRANS, // Recurring retransmits for the current pkt.
86
+ TCP_NLA_DELIVERY_RATE_APP_LMT, // Delivery rate application limited?
87
+ TCP_NLA_SNDQ_SIZE, // Data (bytes) pending in send queue
88
+ TCP_NLA_CA_STATE, // ca_state of socket
89
+ TCP_NLA_SND_SSTHRESH, // Slow start size threshold
90
+ TCP_NLA_DELIVERED, // Data pkts delivered incl. out-of-order
91
+ TCP_NLA_DELIVERED_CE, // Like above but only ones w/ CE marks
92
+ TCP_NLA_BYTES_SENT, // Data bytes sent including retransmission
93
+ TCP_NLA_BYTES_RETRANS, // Data bytes retransmitted
94
+ TCP_NLA_DSACK_DUPS, // DSACK blocks received
95
+ TCP_NLA_REORD_SEEN, // reordering events seen
96
+ TCP_NLA_SRTT, // smoothed RTT in usecs
97
97
  };
98
98
 
99
- /* tcp_info from from linux/tcp.h */
99
+ // tcp_info from from linux/tcp.h
100
100
  struct tcp_info {
101
101
  uint8_t tcpi_state;
102
102
  uint8_t tcpi_ca_state;
@@ -115,12 +115,12 @@ struct tcp_info {
115
115
  uint32_t tcpi_lost;
116
116
  uint32_t tcpi_retrans;
117
117
  uint32_t tcpi_fackets;
118
- /* Times. */
118
+ // Times.
119
119
  uint32_t tcpi_last_data_sent;
120
- uint32_t tcpi_last_ack_sent; /* Not remembered, sorry. */
120
+ uint32_t tcpi_last_ack_sent; // Not remembered, sorry.
121
121
  uint32_t tcpi_last_data_recv;
122
122
  uint32_t tcpi_last_ack_recv;
123
- /* Metrics. */
123
+ // Metrics.
124
124
  uint32_t tcpi_pmtu;
125
125
  uint32_t tcpi_rcv_ssthresh;
126
126
  uint32_t tcpi_rtt;
@@ -134,29 +134,29 @@ struct tcp_info {
134
134
  uint32_t tcpi_total_retrans;
135
135
  uint64_t tcpi_pacing_rate;
136
136
  uint64_t tcpi_max_pacing_rate;
137
- uint64_t tcpi_bytes_acked; /* RFC4898 tcpEStatsAppHCThruOctetsAcked */
138
- uint64_t tcpi_bytes_received; /* RFC4898 tcpEStatsAppHCThruOctetsReceived */
137
+ uint64_t tcpi_bytes_acked; // RFC4898 tcpEStatsAppHCThruOctetsAcked
138
+ uint64_t tcpi_bytes_received; // RFC4898 tcpEStatsAppHCThruOctetsReceived
139
139
 
140
- uint32_t tcpi_segs_out; /* RFC4898 tcpEStatsPerfSegsOut */
141
- uint32_t tcpi_segs_in; /* RFC4898 tcpEStatsPerfSegsIn */
140
+ uint32_t tcpi_segs_out; // RFC4898 tcpEStatsPerfSegsOut
141
+ uint32_t tcpi_segs_in; // RFC4898 tcpEStatsPerfSegsIn
142
142
  uint32_t tcpi_notsent_bytes;
143
143
  uint32_t tcpi_min_rtt;
144
144
 
145
- uint32_t tcpi_data_segs_in; /* RFC4898 tcpEStatsDataSegsIn */
146
- uint32_t tcpi_data_segs_out; /* RFC4898 tcpEStatsDataSegsOut */
145
+ uint32_t tcpi_data_segs_in; // RFC4898 tcpEStatsDataSegsIn
146
+ uint32_t tcpi_data_segs_out; // RFC4898 tcpEStatsDataSegsOut
147
147
 
148
148
  uint64_t tcpi_delivery_rate;
149
- uint64_t tcpi_busy_time; /* Time (usec) busy sending data */
150
- uint64_t tcpi_rwnd_limited; /* Time (usec) limited by receive window */
151
- uint64_t tcpi_sndbuf_limited; /* Time (usec) limited by send buffer */
149
+ uint64_t tcpi_busy_time; // Time (usec) busy sending data
150
+ uint64_t tcpi_rwnd_limited; // Time (usec) limited by receive window
151
+ uint64_t tcpi_sndbuf_limited; // Time (usec) limited by send buffer
152
152
 
153
153
  uint32_t tcpi_delivered;
154
154
  uint32_t tcpi_delivered_ce;
155
- uint64_t tcpi_bytes_sent; /* RFC4898 tcpEStatsPerfHCDataOctetsOut */
156
- uint64_t tcpi_bytes_retrans; /* RFC4898 tcpEStatsPerfOctetsRetrans */
157
- uint32_t tcpi_dsack_dups; /* RFC4898 tcpEStatsStackDSACKDups */
158
- uint32_t tcpi_reord_seen; /* reordering events seen */
159
- socklen_t length; /* Length of struct returned by kernel */
155
+ uint64_t tcpi_bytes_sent; // RFC4898 tcpEStatsPerfHCDataOctetsOut
156
+ uint64_t tcpi_bytes_retrans; // RFC4898 tcpEStatsPerfOctetsRetrans
157
+ uint32_t tcpi_dsack_dups; // RFC4898 tcpEStatsStackDSACKDups
158
+ uint32_t tcpi_reord_seen; // reordering events seen
159
+ socklen_t length; // Length of struct returned by kernel
160
160
  };
161
161
 
162
162
  #ifndef TCP_INFO
@@ -165,15 +165,15 @@ struct tcp_info {
165
165
 
166
166
  int GetSocketTcpInfo(tcp_info* info, int fd);
167
167
 
168
- #endif /* GRPC_LINUX_ERRQUEUE */
168
+ #endif // GRPC_LINUX_ERRQUEUE
169
169
 
170
170
  // Returns true if kernel is capable of supporting errqueue and timestamping.
171
171
  // Currently allowing only linux kernels above 4.0.0
172
172
  bool KernelSupportsErrqueue();
173
173
 
174
- } // namespace posix_engine
174
+ } // namespace experimental
175
175
  } // namespace grpc_event_engine
176
176
 
177
- #endif /* GRPC_POSIX_SOCKET_TCP */
177
+ #endif // GRPC_POSIX_SOCKET_TCP
178
178
 
179
- #endif /* GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_INTERNAL_ERRQUEUE_H */
179
+ #endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_INTERNAL_ERRQUEUE_H
@@ -15,8 +15,6 @@
15
15
 
16
16
  #include "src/core/lib/event_engine/posix_engine/lockfree_event.h"
17
17
 
18
- #include <stdlib.h>
19
-
20
18
  #include <atomic>
21
19
  #include <cstdint>
22
20
 
@@ -27,6 +25,7 @@
27
25
 
28
26
  #include "src/core/lib/event_engine/posix_engine/event_poller.h"
29
27
  #include "src/core/lib/event_engine/posix_engine/posix_engine_closure.h"
28
+ #include "src/core/lib/gprpp/crash.h"
30
29
  #include "src/core/lib/gprpp/status_helper.h"
31
30
 
32
31
  // 'state' holds the to call when the fd is readable or writable respectively.
@@ -61,7 +60,7 @@
61
60
  // For 5,6,7: See SetShutdown() function
62
61
 
63
62
  namespace grpc_event_engine {
64
- namespace posix_engine {
63
+ namespace experimental {
65
64
 
66
65
  void LockfreeEvent::InitEvent() {
67
66
  // Perform an atomic store to start the state machine.
@@ -86,7 +85,7 @@ void LockfreeEvent::DestroyEvent() {
86
85
  // with post-deletion (see the note in the constructor) we want the bit
87
86
  // pattern to prevent error retention in a deleted object
88
87
  } while (!state_.compare_exchange_strong(curr, kShutdownBit,
89
- std::memory_order_relaxed,
88
+ std::memory_order_acq_rel,
90
89
  std::memory_order_relaxed));
91
90
  }
92
91
 
@@ -111,7 +110,7 @@ void LockfreeEvent::NotifyOn(PosixEngineClosure* closure) {
111
110
  // barrier.
112
111
  if (state_.compare_exchange_strong(
113
112
  curr, reinterpret_cast<intptr_t>(closure),
114
- std::memory_order_release, std::memory_order_relaxed)) {
113
+ std::memory_order_acq_rel, std::memory_order_relaxed)) {
115
114
  return; // Successful. Return
116
115
  }
117
116
 
@@ -128,7 +127,7 @@ void LockfreeEvent::NotifyOn(PosixEngineClosure* closure) {
128
127
  // closure when transitioning out of CLOSURE_NO_READY state (i.e there
129
128
  // is no other code that needs to 'happen-after' this)
130
129
  if (state_.compare_exchange_strong(curr, kClosureNotReady,
131
- std::memory_order_relaxed,
130
+ std::memory_order_acq_rel,
132
131
  std::memory_order_relaxed)) {
133
132
  scheduler_->Run(closure);
134
133
  return; // Successful. Return.
@@ -149,10 +148,9 @@ void LockfreeEvent::NotifyOn(PosixEngineClosure* closure) {
149
148
  }
150
149
 
151
150
  // There is already a closure!. This indicates a bug in the code.
152
- gpr_log(GPR_ERROR,
153
- "LockfreeEvent::NotifyOn: notify_on called with a previous "
154
- "callback still pending");
155
- abort();
151
+ grpc_core::Crash(
152
+ "LockfreeEvent::NotifyOn: notify_on called with a previous "
153
+ "callback still pending");
156
154
  }
157
155
  }
158
156
  }
@@ -230,7 +228,7 @@ void LockfreeEvent::SetReady() {
230
228
  // No barrier required as we're transitioning to a state that does not
231
229
  // involve a closure
232
230
  if (state_.compare_exchange_strong(curr, kClosureReady,
233
- std::memory_order_relaxed,
231
+ std::memory_order_acq_rel,
234
232
  std::memory_order_relaxed)) {
235
233
  return; // early out
236
234
  }
@@ -263,5 +261,5 @@ void LockfreeEvent::SetReady() {
263
261
  }
264
262
  }
265
263
 
266
- } // namespace posix_engine
264
+ } // namespace experimental
267
265
  } // namespace grpc_event_engine
@@ -24,7 +24,7 @@
24
24
  #include "src/core/lib/event_engine/posix_engine/posix_engine_closure.h"
25
25
 
26
26
  namespace grpc_event_engine {
27
- namespace posix_engine {
27
+ namespace experimental {
28
28
 
29
29
  class Scheduler;
30
30
 
@@ -67,7 +67,7 @@ class LockfreeEvent {
67
67
  Scheduler* scheduler_;
68
68
  };
69
69
 
70
- } // namespace posix_engine
70
+ } // namespace experimental
71
71
  } // namespace grpc_event_engine
72
72
 
73
73
  #endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_LOCKFREE_EVENT_H
@@ -23,9 +23,9 @@
23
23
  #include <cctype>
24
24
  #include <cstdint>
25
25
  #include <cstdlib>
26
- #include <cstring>
27
26
  #include <memory>
28
27
  #include <string>
28
+ #include <type_traits>
29
29
 
30
30
  #include "absl/functional/any_invocable.h"
31
31
  #include "absl/status/status.h"
@@ -33,18 +33,22 @@
33
33
  #include "absl/strings/str_cat.h"
34
34
  #include "absl/types/optional.h"
35
35
 
36
+ #include <grpc/event_engine/internal/slice_cast.h>
36
37
  #include <grpc/event_engine/memory_request.h>
37
38
  #include <grpc/event_engine/slice.h>
38
39
  #include <grpc/event_engine/slice_buffer.h>
40
+ #include <grpc/status.h>
39
41
  #include <grpc/support/log.h>
40
42
 
41
43
  #include "src/core/lib/event_engine/posix_engine/event_poller.h"
42
44
  #include "src/core/lib/event_engine/posix_engine/internal_errqueue.h"
43
45
  #include "src/core/lib/event_engine/posix_engine/tcp_socket_utils.h"
46
+ #include "src/core/lib/event_engine/tcp_socket_utils.h"
44
47
  #include "src/core/lib/experiments/experiments.h"
45
48
  #include "src/core/lib/gpr/useful.h"
46
49
  #include "src/core/lib/gprpp/load_file.h"
47
50
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
51
+ #include "src/core/lib/gprpp/status_helper.h"
48
52
  #include "src/core/lib/gprpp/strerror.h"
49
53
  #include "src/core/lib/gprpp/time.h"
50
54
  #include "src/core/lib/resource_quota/resource_quota.h"
@@ -88,15 +92,10 @@
88
92
  #define MAX_READ_IOVEC 64
89
93
 
90
94
  namespace grpc_event_engine {
91
- namespace posix_engine {
95
+ namespace experimental {
92
96
 
93
97
  namespace {
94
98
 
95
- using ::grpc_event_engine::experimental::EventEngine;
96
- using ::grpc_event_engine::experimental::MemoryAllocator;
97
- using ::grpc_event_engine::experimental::Slice;
98
- using ::grpc_event_engine::experimental::SliceBuffer;
99
-
100
99
  // A wrapper around sendmsg. It sends \a msg over \a fd and returns the number
101
100
  // of bytes sent.
102
101
  ssize_t TcpSend(int fd, const struct msghdr* msg, int* saved_errno,
@@ -210,6 +209,16 @@ bool CmsgIsZeroCopy(const cmsghdr& cmsg) {
210
209
  }
211
210
  #endif // GRPC_LINUX_ERRQUEUE
212
211
 
212
+ absl::Status PosixOSError(int error_no, const char* call_name) {
213
+ absl::Status s = absl::UnknownError(grpc_core::StrError(error_no));
214
+ grpc_core::StatusSetInt(&s, grpc_core::StatusIntProperty::kErrorNo, error_no);
215
+ grpc_core::StatusSetStr(&s, grpc_core::StatusStrProperty::kOsError,
216
+ grpc_core::StrError(error_no));
217
+ grpc_core::StatusSetStr(&s, grpc_core::StatusStrProperty::kSyscall,
218
+ call_name);
219
+ return s;
220
+ }
221
+
213
222
  } // namespace
214
223
 
215
224
  #if defined(IOV_MAX) && IOV_MAX < 260
@@ -227,9 +236,9 @@ msg_iovlen_type TcpZerocopySendRecord::PopulateIovs(size_t* unwind_slice_idx,
227
236
  for (iov_size = 0;
228
237
  out_offset_.slice_idx != buf_.Count() && iov_size != MAX_WRITE_IOVEC;
229
238
  iov_size++) {
230
- auto slice = buf_.RefSlice(out_offset_.slice_idx);
231
- iov[iov_size].iov_base =
232
- const_cast<uint8_t*>(slice.begin()) + out_offset_.byte_idx;
239
+ MutableSlice& slice = internal::SliceCast<MutableSlice>(
240
+ buf_.MutableSliceAt(out_offset_.slice_idx));
241
+ iov[iov_size].iov_base = slice.begin();
233
242
  iov[iov_size].iov_len = slice.length() - out_offset_.byte_idx;
234
243
  *sending_length += iov[iov_size].iov_len;
235
244
  ++(out_offset_.slice_idx);
@@ -270,6 +279,19 @@ void PosixEndpointImpl::FinishEstimate() {
270
279
  bytes_read_this_round_ = 0;
271
280
  }
272
281
 
282
+ absl::Status PosixEndpointImpl::TcpAnnotateError(absl::Status src_error) {
283
+ auto peer_string = ResolvedAddressToNormalizedString(peer_address_);
284
+
285
+ grpc_core::StatusSetStr(&src_error,
286
+ grpc_core::StatusStrProperty::kTargetAddress,
287
+ peer_string.ok() ? *peer_string : "");
288
+ grpc_core::StatusSetInt(&src_error, grpc_core::StatusIntProperty::kFd,
289
+ handle_->WrappedFd());
290
+ grpc_core::StatusSetInt(&src_error, grpc_core::StatusIntProperty::kRpcStatus,
291
+ GRPC_STATUS_UNAVAILABLE);
292
+ return src_error;
293
+ }
294
+
273
295
  // Returns true if data available to read or error other than EAGAIN.
274
296
  bool PosixEndpointImpl::TcpDoRead(absl::Status& status) {
275
297
  struct msghdr msg;
@@ -285,8 +307,9 @@ bool PosixEndpointImpl::TcpDoRead(absl::Status& status) {
285
307
  #endif // GRPC_LINUX_ERRQUEUE
286
308
  char cmsgbuf[cmsg_alloc_space];
287
309
  for (size_t i = 0; i < iov_len; i++) {
288
- Slice slice = incoming_buffer_->RefSlice(i);
289
- iov[i].iov_base = const_cast<uint8_t*>(slice.begin());
310
+ MutableSlice& slice =
311
+ internal::SliceCast<MutableSlice>(incoming_buffer_->MutableSliceAt(i));
312
+ iov[i].iov_base = slice.begin();
290
313
  iov[i].iov_len = slice.length();
291
314
  }
292
315
 
@@ -338,10 +361,10 @@ bool PosixEndpointImpl::TcpDoRead(absl::Status& status) {
338
361
  // 0 read size ==> end of stream
339
362
  incoming_buffer_->Clear();
340
363
  if (read_bytes == 0) {
341
- status = absl::InternalError("Socket closed");
364
+ status = TcpAnnotateError(absl::InternalError("Socket closed"));
342
365
  } else {
343
- status = absl::InternalError(
344
- absl::StrCat("recvmsg:", grpc_core::StrError(errno)));
366
+ status = TcpAnnotateError(absl::InternalError(
367
+ absl::StrCat("recvmsg:", grpc_core::StrError(errno))));
345
368
  }
346
369
  return true;
347
370
  }
@@ -426,7 +449,6 @@ bool PosixEndpointImpl::TcpDoRead(absl::Status& status) {
426
449
  if (total_read_bytes < incoming_buffer_->Length()) {
427
450
  incoming_buffer_->MoveLastNBytesIntoSliceBuffer(
428
451
  incoming_buffer_->Length() - total_read_bytes, last_read_buffer_);
429
- // last_read_buffer_.Clear();
430
452
  }
431
453
  return true;
432
454
  }
@@ -551,6 +573,7 @@ void PosixEndpointImpl::HandleRead(absl::Status status) {
551
573
  if (status.ok()) {
552
574
  MaybeMakeReadSlices();
553
575
  if (!TcpDoRead(status)) {
576
+ UpdateRcvLowat();
554
577
  // We've consumed the edge, request a new one.
555
578
  read_mu_.Unlock();
556
579
  handle_->NotifyOnRead(on_read_);
@@ -571,29 +594,33 @@ void PosixEndpointImpl::HandleRead(absl::Status status) {
571
594
  void PosixEndpointImpl::Read(absl::AnyInvocable<void(absl::Status)> on_read,
572
595
  SliceBuffer* buffer,
573
596
  const EventEngine::Endpoint::ReadArgs* args) {
574
- read_mu_.Lock();
597
+ grpc_core::ReleasableMutexLock lock(&read_mu_);
575
598
  GPR_ASSERT(read_cb_ == nullptr);
576
599
  read_cb_ = std::move(on_read);
577
600
  incoming_buffer_ = buffer;
578
601
  incoming_buffer_->Clear();
579
602
  incoming_buffer_->Swap(last_read_buffer_);
580
- read_mu_.Unlock();
581
603
  if (args != nullptr && grpc_core::IsTcpFrameSizeTuningEnabled()) {
582
- min_progress_size_ = args->read_hint_bytes;
604
+ min_progress_size_ = std::max(static_cast<int>(args->read_hint_bytes), 1);
583
605
  } else {
584
606
  min_progress_size_ = 1;
585
607
  }
586
608
  Ref().release();
587
609
  if (is_first_read_) {
610
+ UpdateRcvLowat();
588
611
  // Endpoint read called for the very first time. Register read callback
589
612
  // with the polling engine.
590
613
  is_first_read_ = false;
614
+ lock.Release();
591
615
  handle_->NotifyOnRead(on_read_);
592
616
  } else if (inq_ == 0) {
617
+ UpdateRcvLowat();
618
+ lock.Release();
593
619
  // Upper layer asked to read more but we know there is no pending data to
594
620
  // read from previous reads. So, wait for POLLIN.
595
621
  handle_->NotifyOnRead(on_read_);
596
622
  } else {
623
+ lock.Release();
597
624
  on_read_->SetStatus(absl::OkStatus());
598
625
  engine_->Run(on_read_);
599
626
  }
@@ -829,7 +856,7 @@ TcpZerocopySendRecord* PosixEndpointImpl::TcpGetSendZerocopyRecord(
829
856
  }
830
857
 
831
858
  void PosixEndpointImpl::HandleError(absl::Status /*status*/) {
832
- GPR_ASSERT(false && "Error handling not supported on this platform");
859
+ grpc_core::Crash("Error handling not supported on this platform");
833
860
  }
834
861
 
835
862
  void PosixEndpointImpl::ZerocopyDisableAndWaitForRemaining() {}
@@ -839,7 +866,7 @@ bool PosixEndpointImpl::WriteWithTimestamps(struct msghdr* /*msg*/,
839
866
  ssize_t* /*sent_length*/,
840
867
  int* /*saved_errno*/,
841
868
  int /*additional_flags*/) {
842
- GPR_ASSERT(false && "Write with timestamps not supported for this platform");
869
+ grpc_core::Crash("Write with timestamps not supported for this platform");
843
870
  }
844
871
  #endif // GRPC_LINUX_ERRQUEUE
845
872
 
@@ -944,8 +971,7 @@ bool PosixEndpointImpl::DoFlushZerocopy(TcpZerocopySendRecord* record,
944
971
  record->UnwindIfThrottled(unwind_slice_idx, unwind_byte_idx);
945
972
  return false;
946
973
  } else {
947
- status = absl::InternalError(
948
- absl::StrCat("sendmsg", std::strerror(saved_errno)));
974
+ status = TcpAnnotateError(PosixOSError(saved_errno, "sendmsg"));
949
975
  TcpShutdownTracedBufferList();
950
976
  return true;
951
977
  }
@@ -993,10 +1019,11 @@ bool PosixEndpointImpl::TcpFlush(absl::Status& status) {
993
1019
  for (iov_size = 0; outgoing_slice_idx != outgoing_buffer_->Count() &&
994
1020
  iov_size != MAX_WRITE_IOVEC;
995
1021
  iov_size++) {
996
- auto slice = outgoing_buffer_->RefSlice(outgoing_slice_idx);
997
- iov[iov_size].iov_base =
998
- const_cast<uint8_t*>(slice.begin()) + outgoing_byte_idx_;
1022
+ MutableSlice& slice = internal::SliceCast<MutableSlice>(
1023
+ outgoing_buffer_->MutableSliceAt(outgoing_slice_idx));
1024
+ iov[iov_size].iov_base = slice.begin() + outgoing_byte_idx_;
999
1025
  iov[iov_size].iov_len = slice.length() - outgoing_byte_idx_;
1026
+
1000
1027
  sending_length += iov[iov_size].iov_len;
1001
1028
  outgoing_slice_idx++;
1002
1029
  outgoing_byte_idx_ = 0;
@@ -1037,8 +1064,7 @@ bool PosixEndpointImpl::TcpFlush(absl::Status& status) {
1037
1064
  }
1038
1065
  return false;
1039
1066
  } else {
1040
- status = absl::InternalError(
1041
- absl::StrCat("sendmsg", std::strerror(saved_errno)));
1067
+ status = TcpAnnotateError(PosixOSError(saved_errno, "sendmsg"));
1042
1068
  outgoing_buffer_->Clear();
1043
1069
  TcpShutdownTracedBufferList();
1044
1070
  return true;
@@ -1104,8 +1130,9 @@ void PosixEndpointImpl::Write(
1104
1130
  GPR_DEBUG_ASSERT(data != nullptr);
1105
1131
 
1106
1132
  if (data->Length() == 0) {
1107
- on_writable(handle_->IsHandleShutdown() ? absl::InternalError("EOF")
1108
- : status);
1133
+ on_writable(handle_->IsHandleShutdown()
1134
+ ? TcpAnnotateError(absl::InternalError("EOF"))
1135
+ : status);
1109
1136
  TcpShutdownTracedBufferList();
1110
1137
  return;
1111
1138
  }
@@ -1132,7 +1159,12 @@ void PosixEndpointImpl::Write(
1132
1159
  current_zerocopy_send_ = zerocopy_send_record;
1133
1160
  handle_->NotifyOnWrite(on_write_);
1134
1161
  } else {
1135
- on_writable(status);
1162
+ // TODO(vigneshbabu): Consider eventually running this callback inline to
1163
+ // avoid a thread hop. At the time of submission, it causes deadlocks which
1164
+ // should be reolved after ExecCtx removal.
1165
+ engine_->Run([on_writable = std::move(on_writable), status]() mutable {
1166
+ on_writable(status);
1167
+ });
1136
1168
  }
1137
1169
  }
1138
1170
 
@@ -1142,6 +1174,8 @@ void PosixEndpointImpl::MaybeShutdown(absl::Status why) {
1142
1174
  stop_error_notification_.store(true, std::memory_order_release);
1143
1175
  handle_->SetHasError();
1144
1176
  }
1177
+ grpc_core::StatusSetInt(&why, grpc_core::StatusIntProperty::kRpcStatus,
1178
+ GRPC_STATUS_UNAVAILABLE);
1145
1179
  handle_->ShutdownHandle(why);
1146
1180
  Unref();
1147
1181
  }
@@ -1167,11 +1201,18 @@ PosixEndpointImpl::PosixEndpointImpl(EventHandle* handle,
1167
1201
  PosixSocketWrapper sock(handle->WrappedFd());
1168
1202
  fd_ = handle_->WrappedFd();
1169
1203
  GPR_ASSERT(options.resource_quota != nullptr);
1204
+ auto peer_addr_string = sock.PeerAddressString();
1170
1205
  memory_owner_ = options.resource_quota->memory_quota()->CreateMemoryOwner(
1171
- *sock.PeerAddressString());
1206
+ peer_addr_string.ok() ? *peer_addr_string : "");
1172
1207
  self_reservation_ = memory_owner_.MakeReservation(sizeof(PosixEndpointImpl));
1173
- local_address_ = *sock.LocalAddress();
1174
- peer_address_ = *sock.PeerAddress();
1208
+ auto local_address = sock.LocalAddress();
1209
+ if (local_address.ok()) {
1210
+ local_address_ = *local_address;
1211
+ }
1212
+ auto peer_address = sock.PeerAddress();
1213
+ if (peer_address.ok()) {
1214
+ peer_address_ = *peer_address;
1215
+ }
1175
1216
  target_length_ = static_cast<double>(options.tcp_read_chunk_size);
1176
1217
  bytes_read_this_round_ = 0;
1177
1218
  min_read_chunk_size_ = options.tcp_min_read_chunk_size;
@@ -1246,25 +1287,22 @@ std::unique_ptr<PosixEndpoint> CreatePosixEndpoint(
1246
1287
  std::move(allocator), options);
1247
1288
  }
1248
1289
 
1249
- } // namespace posix_engine
1290
+ } // namespace experimental
1250
1291
  } // namespace grpc_event_engine
1251
1292
 
1252
1293
  #else // GRPC_POSIX_SOCKET_TCP
1253
1294
 
1254
1295
  namespace grpc_event_engine {
1255
- namespace posix_engine {
1256
-
1257
- using ::grpc_event_engine::experimental::EndpointConfig;
1258
- using ::grpc_event_engine::experimental::EventEngine;
1296
+ namespace experimental {
1259
1297
 
1260
1298
  std::unique_ptr<PosixEndpoint> CreatePosixEndpoint(
1261
1299
  EventHandle* /*handle*/, PosixEngineClosure* /*on_shutdown*/,
1262
1300
  std::shared_ptr<EventEngine> /*engine*/,
1263
1301
  const PosixTcpOptions& /*options*/) {
1264
- GPR_ASSERT(false && "Cannot create PosixEndpoint on this platform");
1302
+ grpc_core::Crash("Cannot create PosixEndpoint on this platform");
1265
1303
  }
1266
1304
 
1267
- } // namespace posix_engine
1305
+ } // namespace experimental
1268
1306
  } // namespace grpc_event_engine
1269
1307
 
1270
1308
  #endif // GRPC_POSIX_SOCKET_TCP
@@ -42,6 +42,7 @@
42
42
  #include "src/core/lib/event_engine/posix_engine/posix_engine_closure.h"
43
43
  #include "src/core/lib/event_engine/posix_engine/tcp_socket_utils.h"
44
44
  #include "src/core/lib/event_engine/posix_engine/traced_buffer_list.h"
45
+ #include "src/core/lib/gprpp/crash.h"
45
46
  #include "src/core/lib/gprpp/ref_counted.h"
46
47
  #include "src/core/lib/gprpp/sync.h"
47
48
  #include "src/core/lib/iomgr/port.h"
@@ -61,7 +62,7 @@ typedef size_t msg_iovlen_type;
61
62
  #endif // GRPC_POSIX_SOCKET_TCP
62
63
 
63
64
  namespace grpc_event_engine {
64
- namespace posix_engine {
65
+ namespace experimental {
65
66
 
66
67
  #ifdef GRPC_POSIX_SOCKET_TCP
67
68
 
@@ -344,7 +345,7 @@ class TcpZerocopySendCtx {
344
345
  // state was CHECK and is_in_write is false. This means that after the
345
346
  // previous sendmsg returned and set is_in_write to false, it did
346
347
  // not update the z-copy change from CHECK to OPEN.
347
- GPR_ASSERT(false && "OMem state error!");
348
+ grpc_core::Crash("OMem state error!");
348
349
  }
349
350
  }
350
351
 
@@ -513,6 +514,7 @@ class PosixEndpointImpl : public grpc_core::RefCounted<PosixEndpointImpl> {
513
514
  bool WriteWithTimestamps(struct msghdr* msg, size_t sending_length,
514
515
  ssize_t* sent_length, int* saved_errno,
515
516
  int additional_flags);
517
+ absl::Status TcpAnnotateError(absl::Status src_error);
516
518
  #ifdef GRPC_LINUX_ERRQUEUE
517
519
  bool ProcessErrors();
518
520
  // Reads a cmsg to process zerocopy control messages.
@@ -640,25 +642,25 @@ class PosixEndpoint
640
642
  grpc_event_engine::experimental::SliceBuffer* /*buffer*/,
641
643
  const grpc_event_engine::experimental::EventEngine::Endpoint::
642
644
  ReadArgs* /*args*/) override {
643
- GPR_ASSERT(false && "PosixEndpoint::Read not supported on this platform");
645
+ grpc_core::Crash("PosixEndpoint::Read not supported on this platform");
644
646
  }
645
647
 
646
648
  void Write(absl::AnyInvocable<void(absl::Status)> /*on_writable*/,
647
649
  grpc_event_engine::experimental::SliceBuffer* /*data*/,
648
650
  const grpc_event_engine::experimental::EventEngine::Endpoint::
649
651
  WriteArgs* /*args*/) override {
650
- GPR_ASSERT(false && "PosixEndpoint::Write not supported on this platform");
652
+ grpc_core::Crash("PosixEndpoint::Write not supported on this platform");
651
653
  }
652
654
 
653
655
  const grpc_event_engine::experimental::EventEngine::ResolvedAddress&
654
656
  GetPeerAddress() const override {
655
- GPR_ASSERT(false &&
656
- "PosixEndpoint::GetPeerAddress not supported on this platform");
657
+ grpc_core::Crash(
658
+ "PosixEndpoint::GetPeerAddress not supported on this platform");
657
659
  }
658
660
  const grpc_event_engine::experimental::EventEngine::ResolvedAddress&
659
661
  GetLocalAddress() const override {
660
- GPR_ASSERT(false &&
661
- "PosixEndpoint::GetLocalAddress not supported on this platform");
662
+ grpc_core::Crash(
663
+ "PosixEndpoint::GetLocalAddress not supported on this platform");
662
664
  }
663
665
 
664
666
  ~PosixEndpoint() override = default;
@@ -676,7 +678,7 @@ std::unique_ptr<PosixEndpoint> CreatePosixEndpoint(
676
678
  grpc_event_engine::experimental::MemoryAllocator&& allocator,
677
679
  const PosixTcpOptions& options);
678
680
 
679
- } // namespace posix_engine
681
+ } // namespace experimental
680
682
  } // namespace grpc_event_engine
681
683
 
682
684
  #endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_POSIX_ENDPOINT_H