grpc 1.52.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 (893) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +50 -5
  3. data/include/grpc/event_engine/event_engine.h +24 -2
  4. data/include/grpc/event_engine/slice_buffer.h +13 -1
  5. data/include/grpc/impl/grpc_types.h +3 -0
  6. data/include/grpc/support/time.h +6 -4
  7. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +148 -0
  8. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
  9. data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
  10. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +3 -3
  11. data/src/core/ext/filters/channel_idle/idle_filter_state.h +3 -3
  12. data/src/core/ext/filters/client_channel/backend_metric.h +3 -3
  13. data/src/core/ext/filters/client_channel/backup_poller.h +3 -3
  14. data/src/core/ext/filters/client_channel/channel_connectivity.cc +1 -1
  15. data/src/core/ext/filters/client_channel/client_channel.cc +29 -33
  16. data/src/core/ext/filters/client_channel/client_channel.h +3 -3
  17. data/src/core/ext/filters/client_channel/client_channel_channelz.h +3 -3
  18. data/src/core/ext/filters/client_channel/client_channel_factory.h +3 -3
  19. data/src/core/ext/filters/client_channel/client_channel_service_config.h +3 -3
  20. data/src/core/ext/filters/client_channel/config_selector.h +3 -3
  21. data/src/core/ext/filters/client_channel/connector.h +8 -4
  22. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  23. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -3
  24. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  25. data/src/core/ext/filters/client_channel/http_proxy.h +3 -3
  26. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +3 -3
  27. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -3
  28. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -3
  29. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +3 -3
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -7
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +3 -3
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1 -0
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +3 -3
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +3 -3
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -3
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +3 -3
  37. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +1 -78
  38. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +3 -3
  39. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +3 -3
  41. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +3 -3
  42. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +1 -0
  43. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -3
  44. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +128 -0
  45. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
  46. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +972 -0
  47. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +2 -2
  48. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +3 -6
  49. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h +3 -3
  50. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
  51. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +12 -7
  52. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +275 -107
  53. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +10 -3
  54. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +5 -0
  55. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +3 -3
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -3
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +6 -1
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +1 -2
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +3 -3
  60. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +3 -3
  61. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +3 -3
  62. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +1 -0
  63. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +3 -3
  64. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +3 -7
  65. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -3
  66. data/src/core/ext/filters/client_channel/retry_filter.cc +10 -13
  67. data/src/core/ext/filters/client_channel/retry_filter.h +3 -3
  68. data/src/core/ext/filters/client_channel/retry_service_config.h +3 -3
  69. data/src/core/ext/filters/client_channel/retry_throttle.h +3 -3
  70. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +4 -4
  71. data/src/core/ext/filters/client_channel/subchannel.cc +5 -1
  72. data/src/core/ext/filters/client_channel/subchannel.h +3 -3
  73. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +3 -3
  74. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -3
  75. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +3 -3
  76. data/src/core/ext/filters/deadline/deadline_filter.cc +40 -48
  77. data/src/core/ext/filters/deadline/deadline_filter.h +6 -10
  78. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +3 -3
  79. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +3 -3
  80. data/src/core/ext/filters/http/client/http_client_filter.cc +26 -21
  81. data/src/core/ext/filters/http/client/http_client_filter.h +3 -3
  82. data/src/core/ext/filters/http/client_authority_filter.h +3 -3
  83. data/src/core/ext/filters/http/message_compress/compression_filter.cc +109 -117
  84. data/src/core/ext/filters/http/message_compress/compression_filter.h +17 -10
  85. data/src/core/ext/filters/http/server/http_server_filter.cc +25 -24
  86. data/src/core/ext/filters/http/server/http_server_filter.h +3 -3
  87. data/src/core/ext/filters/message_size/message_size_filter.cc +2 -1
  88. data/src/core/ext/filters/message_size/message_size_filter.h +3 -3
  89. data/src/core/ext/filters/rbac/rbac_filter.cc +4 -3
  90. data/src/core/ext/filters/rbac/rbac_filter.h +3 -3
  91. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +3 -3
  92. data/src/core/ext/filters/server_config_selector/server_config_selector.h +3 -3
  93. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +3 -3
  94. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +27 -37
  95. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +5 -5
  96. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +3 -3
  97. data/src/core/ext/transport/chttp2/alpn/alpn.h +3 -3
  98. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -7
  99. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +3 -3
  100. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +1 -0
  101. data/src/core/ext/transport/chttp2/server/chttp2_server.h +3 -3
  102. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +3 -3
  103. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +3 -3
  104. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +195 -111
  105. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -3
  106. data/src/core/ext/transport/chttp2/transport/context_list.h +3 -3
  107. data/src/core/ext/transport/chttp2/transport/decode_huff.h +3 -3
  108. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
  109. data/src/core/ext/transport/chttp2/transport/flow_control.h +3 -3
  110. data/src/core/ext/transport/chttp2/transport/frame.h +3 -3
  111. data/src/core/ext/transport/chttp2/transport/frame_data.cc +2 -0
  112. data/src/core/ext/transport/chttp2/transport/frame_data.h +3 -3
  113. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -0
  114. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -3
  115. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +1 -0
  116. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -3
  117. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -0
  118. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -3
  119. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +1 -0
  120. data/src/core/ext/transport/chttp2/transport/frame_settings.h +3 -3
  121. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +2 -0
  122. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -3
  123. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +3 -3
  124. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +3 -3
  125. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -3
  126. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +18 -407
  127. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -3
  128. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +1 -0
  129. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +3 -3
  130. data/src/core/ext/transport/chttp2/transport/http2_settings.h +3 -3
  131. data/src/core/ext/transport/chttp2/transport/http_trace.h +3 -3
  132. data/src/core/ext/transport/chttp2/transport/huffsyms.h +3 -3
  133. data/src/core/ext/transport/chttp2/transport/internal.h +28 -23
  134. data/src/core/ext/transport/chttp2/transport/parsing.cc +111 -31
  135. data/src/core/ext/transport/chttp2/transport/stream_map.h +3 -3
  136. data/src/core/ext/transport/chttp2/transport/varint.h +3 -3
  137. data/src/core/ext/transport/chttp2/transport/writing.cc +9 -8
  138. data/src/core/ext/transport/inproc/inproc_transport.h +3 -3
  139. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +3 -2
  140. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +9 -0
  141. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +38 -2
  142. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +185 -0
  143. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +7 -3
  144. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +44 -0
  145. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +16 -25
  146. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +48 -74
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +30 -7
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +137 -0
  149. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +15 -12
  150. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +83 -51
  151. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +3 -2
  152. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +15 -0
  153. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +17 -2
  154. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +61 -0
  155. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +11 -5
  156. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +37 -6
  157. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +5 -3
  158. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +24 -0
  159. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +5 -3
  160. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +22 -0
  161. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +6 -3
  162. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +24 -0
  163. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +24 -5
  164. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +50 -0
  165. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +57 -16
  166. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +254 -17
  167. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -2
  168. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +9 -0
  169. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +3 -2
  170. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +9 -0
  171. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -6
  172. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +21 -12
  173. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +6 -3
  174. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +23 -0
  175. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +10 -7
  176. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +42 -12
  177. 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
  178. 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
  179. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +111 -0
  180. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +444 -0
  181. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +7 -3
  182. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +24 -0
  183. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +8 -6
  184. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +31 -9
  185. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +5 -3
  186. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +24 -0
  187. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +47 -0
  188. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +113 -0
  189. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +43 -0
  190. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +114 -0
  191. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +3 -1
  192. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +54 -53
  193. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +34 -13
  194. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +10 -0
  195. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +195 -187
  196. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +232 -224
  197. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +0 -5
  198. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +95 -75
  199. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +5 -0
  200. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +94 -93
  201. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +81 -75
  202. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +189 -187
  203. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +7 -3
  204. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +5 -0
  205. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +71 -66
  206. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +137 -133
  207. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +16 -12
  208. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +140 -133
  209. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +81 -70
  210. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +5 -0
  211. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +771 -741
  212. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  213. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +16 -14
  214. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +14 -13
  215. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +20 -18
  216. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +53 -42
  217. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +363 -356
  218. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +149 -145
  219. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +16 -13
  220. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
  221. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +35 -0
  222. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +14 -14
  223. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
  224. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +40 -0
  225. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +10 -9
  226. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  227. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +1 -0
  228. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +3 -3
  229. data/src/core/ext/xds/upb_utils.h +3 -3
  230. data/src/core/ext/xds/xds_api.h +3 -3
  231. data/src/core/ext/xds/xds_bootstrap.h +3 -3
  232. data/src/core/ext/xds/xds_bootstrap_grpc.cc +1 -0
  233. data/src/core/ext/xds/xds_bootstrap_grpc.h +3 -3
  234. data/src/core/ext/xds/xds_certificate_provider.h +3 -3
  235. data/src/core/ext/xds/xds_channel_args.h +3 -3
  236. data/src/core/ext/xds/xds_channel_stack_modifier.h +3 -3
  237. data/src/core/ext/xds/xds_client.cc +8 -3
  238. data/src/core/ext/xds/xds_client.h +3 -3
  239. data/src/core/ext/xds/xds_client_grpc.cc +0 -1
  240. data/src/core/ext/xds/xds_client_grpc.h +3 -3
  241. data/src/core/ext/xds/xds_client_stats.h +4 -3
  242. data/src/core/ext/xds/xds_cluster.cc +11 -7
  243. data/src/core/ext/xds/xds_cluster.h +6 -6
  244. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +3 -3
  245. data/src/core/ext/xds/xds_common_types.cc +1 -0
  246. data/src/core/ext/xds/xds_common_types.h +3 -3
  247. data/src/core/ext/xds/xds_endpoint.cc +1 -1
  248. data/src/core/ext/xds/xds_endpoint.h +3 -3
  249. data/src/core/ext/xds/xds_health_status.h +30 -3
  250. data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
  251. data/src/core/ext/xds/xds_http_filters.cc +1 -1
  252. data/src/core/ext/xds/xds_http_filters.h +3 -3
  253. data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
  254. data/src/core/ext/xds/xds_http_stateful_session_filter.h +3 -3
  255. data/src/core/ext/xds/xds_lb_policy_registry.cc +95 -0
  256. data/src/core/ext/xds/xds_lb_policy_registry.h +3 -3
  257. data/src/core/ext/xds/xds_listener.cc +1 -0
  258. data/src/core/ext/xds/xds_listener.h +3 -3
  259. data/src/core/ext/xds/xds_resource_type.h +3 -3
  260. data/src/core/ext/xds/xds_resource_type_impl.h +3 -3
  261. data/src/core/ext/xds/xds_route_config.cc +6 -0
  262. data/src/core/ext/xds/xds_route_config.h +3 -3
  263. data/src/core/ext/xds/xds_routing.h +3 -3
  264. data/src/core/ext/xds/xds_transport.h +3 -3
  265. data/src/core/ext/xds/xds_transport_grpc.h +3 -3
  266. data/src/core/lib/address_utils/parse_address.h +3 -3
  267. data/src/core/lib/address_utils/sockaddr_utils.cc +1 -0
  268. data/src/core/lib/address_utils/sockaddr_utils.h +3 -3
  269. data/src/core/lib/avl/avl.h +3 -3
  270. data/src/core/lib/backoff/backoff.h +3 -3
  271. data/src/core/lib/channel/call_finalization.h +3 -3
  272. data/src/core/lib/channel/call_tracer.h +3 -3
  273. data/src/core/lib/channel/channel_args.cc +1 -0
  274. data/src/core/lib/channel/channel_args.h +11 -5
  275. data/src/core/lib/channel/channel_args_preconditioning.h +3 -3
  276. data/src/core/lib/channel/channel_fwd.h +3 -3
  277. data/src/core/lib/channel/channel_stack.cc +1 -2
  278. data/src/core/lib/channel/channel_stack.h +4 -4
  279. data/src/core/lib/channel/channel_stack_builder.h +3 -3
  280. data/src/core/lib/channel/channel_stack_builder_impl.cc +14 -1
  281. data/src/core/lib/channel/channel_stack_builder_impl.h +3 -3
  282. data/src/core/lib/channel/channel_trace.h +3 -3
  283. data/src/core/lib/channel/channelz.h +3 -3
  284. data/src/core/lib/channel/channelz_registry.h +3 -3
  285. data/src/core/lib/channel/connected_channel.cc +883 -354
  286. data/src/core/lib/channel/connected_channel.h +3 -3
  287. data/src/core/lib/channel/context.h +7 -3
  288. data/src/core/lib/channel/promise_based_filter.cc +532 -260
  289. data/src/core/lib/channel/promise_based_filter.h +124 -44
  290. data/src/core/lib/channel/status_util.h +3 -3
  291. data/src/core/lib/compression/compression_internal.h +3 -3
  292. data/src/core/lib/compression/message_compress.h +3 -3
  293. data/src/core/lib/config/core_configuration.h +3 -3
  294. data/src/core/lib/debug/event_log.h +3 -3
  295. data/src/core/lib/debug/histogram_view.h +3 -3
  296. data/src/core/lib/debug/stats.h +3 -3
  297. data/src/core/lib/debug/stats_data.cc +66 -65
  298. data/src/core/lib/debug/stats_data.h +42 -33
  299. data/src/core/lib/debug/trace.h +4 -26
  300. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +5 -0
  301. data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -3
  302. data/src/core/lib/event_engine/common_closures.h +3 -3
  303. data/src/core/lib/event_engine/default_event_engine.cc +9 -4
  304. data/src/core/lib/event_engine/default_event_engine.h +30 -6
  305. data/src/core/lib/event_engine/default_event_engine_factory.h +3 -3
  306. data/src/core/lib/event_engine/event_engine.cc +25 -0
  307. data/src/core/lib/event_engine/executor/executor.h +3 -3
  308. data/src/core/lib/event_engine/forkable.cc +11 -6
  309. data/src/core/lib/event_engine/forkable.h +3 -3
  310. data/src/core/lib/event_engine/handle_containers.h +10 -3
  311. data/src/core/lib/event_engine/poller.h +3 -3
  312. data/src/core/lib/event_engine/posix.h +158 -0
  313. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +44 -16
  314. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +14 -4
  315. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +6 -7
  316. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +3 -3
  317. data/src/core/lib/event_engine/posix_engine/event_poller.h +3 -3
  318. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -3
  319. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +3 -3
  320. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +3 -3
  321. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +52 -55
  322. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +46 -13
  323. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +82 -12
  324. data/src/core/lib/event_engine/posix_engine/posix_engine.h +23 -9
  325. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +3 -3
  326. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +60 -7
  327. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +65 -14
  328. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +0 -1
  329. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -6
  330. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +3 -3
  331. data/src/core/lib/event_engine/posix_engine/timer.h +3 -3
  332. data/src/core/lib/event_engine/posix_engine/timer_heap.h +3 -3
  333. data/src/core/lib/event_engine/posix_engine/timer_manager.h +3 -3
  334. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +3 -3
  335. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +3 -3
  336. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +3 -3
  337. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +3 -3
  338. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -3
  339. data/src/core/lib/event_engine/resolved_address.cc +19 -0
  340. data/src/core/lib/event_engine/resolved_address_internal.h +34 -0
  341. data/src/core/lib/event_engine/shim.cc +56 -0
  342. data/src/core/lib/event_engine/shim.h +33 -0
  343. data/src/core/lib/event_engine/slice.cc +1 -1
  344. data/src/core/lib/event_engine/tcp_socket_utils.cc +18 -2
  345. data/src/core/lib/event_engine/tcp_socket_utils.h +8 -3
  346. data/src/core/lib/event_engine/thread_local.cc +29 -0
  347. data/src/core/lib/event_engine/thread_local.h +32 -0
  348. data/src/core/lib/event_engine/thread_pool.cc +41 -65
  349. data/src/core/lib/event_engine/thread_pool.h +21 -17
  350. data/src/core/lib/event_engine/time_util.h +3 -3
  351. data/src/core/lib/event_engine/trace.cc +6 -0
  352. data/src/core/lib/event_engine/trace.h +16 -3
  353. data/src/core/lib/event_engine/utils.cc +2 -2
  354. data/src/core/lib/event_engine/utils.h +12 -4
  355. data/src/core/lib/event_engine/windows/iocp.cc +24 -40
  356. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  357. data/src/core/lib/event_engine/windows/win_socket.cc +56 -33
  358. data/src/core/lib/event_engine/windows/win_socket.h +34 -25
  359. data/src/core/lib/event_engine/windows/windows_endpoint.cc +331 -0
  360. data/src/core/lib/event_engine/windows/windows_endpoint.h +103 -0
  361. data/src/core/lib/event_engine/windows/windows_engine.cc +243 -20
  362. data/src/core/lib/event_engine/windows/windows_engine.h +62 -23
  363. data/src/core/lib/experiments/config.cc +16 -1
  364. data/src/core/lib/experiments/config.h +13 -3
  365. data/src/core/lib/experiments/experiments.cc +14 -8
  366. data/src/core/lib/experiments/experiments.h +80 -21
  367. data/src/core/lib/gpr/alloc.h +3 -3
  368. data/src/core/lib/gpr/spinlock.h +3 -3
  369. data/src/core/lib/gpr/string.h +3 -3
  370. data/src/core/lib/gpr/sync_abseil.cc +15 -7
  371. data/src/core/lib/gpr/time_precise.h +3 -3
  372. data/src/core/lib/gpr/tmpfile.h +3 -3
  373. data/src/core/lib/gpr/useful.h +3 -3
  374. data/src/core/lib/gprpp/atomic_utils.h +3 -3
  375. data/src/core/lib/gprpp/bitset.h +3 -3
  376. data/src/core/lib/gprpp/chunked_vector.h +3 -3
  377. data/src/core/lib/gprpp/construct_destruct.h +3 -3
  378. data/src/core/lib/gprpp/cpp_impl_of.h +3 -3
  379. data/src/core/lib/gprpp/crash.h +3 -3
  380. data/src/core/lib/gprpp/debug_location.h +3 -6
  381. data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
  382. data/src/core/lib/gprpp/env.h +3 -3
  383. data/src/core/lib/gprpp/examine_stack.h +3 -3
  384. data/src/core/lib/gprpp/fork.cc +21 -4
  385. data/src/core/lib/gprpp/fork.h +7 -5
  386. data/src/core/lib/gprpp/global_config.h +3 -3
  387. data/src/core/lib/gprpp/global_config_custom.h +3 -3
  388. data/src/core/lib/gprpp/global_config_env.cc +1 -0
  389. data/src/core/lib/gprpp/global_config_env.h +3 -3
  390. data/src/core/lib/gprpp/global_config_generic.h +3 -3
  391. data/src/core/lib/gprpp/host_port.cc +2 -0
  392. data/src/core/lib/gprpp/host_port.h +3 -3
  393. data/src/core/lib/gprpp/load_file.h +3 -3
  394. data/src/core/lib/gprpp/manual_constructor.h +3 -3
  395. data/src/core/lib/gprpp/match.h +3 -3
  396. data/src/core/lib/gprpp/memory.h +3 -3
  397. data/src/core/lib/gprpp/mpscq.h +3 -3
  398. data/src/core/lib/gprpp/no_destruct.h +3 -3
  399. data/src/core/lib/gprpp/notification.h +3 -3
  400. data/src/core/lib/gprpp/orphanable.h +3 -3
  401. data/src/core/lib/gprpp/overload.h +3 -3
  402. data/src/core/lib/gprpp/packed_table.h +3 -3
  403. data/src/core/lib/gprpp/per_cpu.h +3 -3
  404. data/src/core/lib/gprpp/ref_counted.h +3 -3
  405. data/src/core/lib/gprpp/ref_counted_ptr.h +3 -3
  406. data/src/core/lib/gprpp/single_set_ptr.h +3 -3
  407. data/src/core/lib/gprpp/sorted_pack.h +3 -3
  408. data/src/core/lib/gprpp/stat.h +3 -3
  409. data/src/core/lib/gprpp/status_helper.h +3 -3
  410. data/src/core/lib/gprpp/strerror.cc +2 -0
  411. data/src/core/lib/gprpp/strerror.h +3 -3
  412. data/src/core/lib/gprpp/sync.h +3 -3
  413. data/src/core/lib/gprpp/table.h +3 -3
  414. data/src/core/lib/gprpp/tchar.h +3 -3
  415. data/src/core/lib/gprpp/thd.h +3 -3
  416. data/src/core/lib/gprpp/time.cc +1 -0
  417. data/src/core/lib/gprpp/time.h +3 -3
  418. data/src/core/lib/gprpp/time_averaged_stats.h +3 -3
  419. data/src/core/lib/gprpp/time_util.h +3 -3
  420. data/src/core/lib/gprpp/unique_type_name.h +3 -3
  421. data/src/core/lib/gprpp/validation_errors.h +3 -3
  422. data/src/core/lib/gprpp/work_serializer.h +3 -3
  423. data/src/core/lib/handshaker/proxy_mapper.h +3 -3
  424. data/src/core/lib/handshaker/proxy_mapper_registry.h +3 -3
  425. data/src/core/lib/http/format_request.cc +1 -0
  426. data/src/core/lib/http/format_request.h +3 -3
  427. data/src/core/lib/http/httpcli.cc +1 -0
  428. data/src/core/lib/http/httpcli.h +3 -3
  429. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -3
  430. data/src/core/lib/http/parser.h +3 -3
  431. data/src/core/lib/iomgr/block_annotate.h +3 -3
  432. data/src/core/lib/iomgr/buffer_list.h +3 -3
  433. data/src/core/lib/iomgr/call_combiner.cc +4 -4
  434. data/src/core/lib/iomgr/call_combiner.h +3 -3
  435. data/src/core/lib/iomgr/cfstream_handle.h +3 -3
  436. data/src/core/lib/iomgr/closure.cc +27 -0
  437. data/src/core/lib/iomgr/closure.h +5 -3
  438. data/src/core/lib/iomgr/combiner.h +3 -3
  439. data/src/core/lib/iomgr/dynamic_annotations.h +3 -3
  440. data/src/core/lib/iomgr/endpoint.h +3 -3
  441. data/src/core/lib/iomgr/endpoint_cfstream.h +3 -3
  442. data/src/core/lib/iomgr/endpoint_pair.h +3 -3
  443. data/src/core/lib/iomgr/endpoint_pair_windows.cc +10 -2
  444. data/src/core/lib/iomgr/error.h +3 -3
  445. data/src/core/lib/iomgr/error_cfstream.h +3 -3
  446. data/src/core/lib/iomgr/ev_apple.h +3 -3
  447. data/src/core/lib/iomgr/ev_epoll1_linux.h +3 -3
  448. data/src/core/lib/iomgr/ev_poll_posix.h +3 -3
  449. data/src/core/lib/iomgr/ev_posix.h +3 -3
  450. data/src/core/lib/iomgr/event_engine_shims/closure.cc +62 -0
  451. data/src/core/lib/iomgr/event_engine_shims/closure.h +39 -0
  452. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +430 -0
  453. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
  454. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
  455. data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
  456. data/src/core/lib/iomgr/exec_ctx.h +3 -3
  457. data/src/core/lib/iomgr/executor.h +3 -3
  458. data/src/core/lib/iomgr/fork_posix.cc +5 -4
  459. data/src/core/lib/iomgr/gethostname.h +3 -3
  460. data/src/core/lib/iomgr/grpc_if_nametoindex.h +3 -3
  461. data/src/core/lib/iomgr/internal_errqueue.h +3 -3
  462. data/src/core/lib/iomgr/iocp_windows.h +3 -3
  463. data/src/core/lib/iomgr/iomgr.h +3 -3
  464. data/src/core/lib/iomgr/iomgr_fwd.h +3 -3
  465. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  466. data/src/core/lib/iomgr/load_file.h +3 -3
  467. data/src/core/lib/iomgr/lockfree_event.h +3 -3
  468. data/src/core/lib/iomgr/nameser.h +3 -3
  469. data/src/core/lib/iomgr/polling_entity.h +3 -3
  470. data/src/core/lib/iomgr/pollset.h +3 -3
  471. data/src/core/lib/iomgr/pollset_set.h +3 -3
  472. data/src/core/lib/iomgr/pollset_set_windows.h +3 -3
  473. data/src/core/lib/iomgr/pollset_windows.cc +2 -2
  474. data/src/core/lib/iomgr/pollset_windows.h +3 -3
  475. data/src/core/lib/iomgr/port.h +3 -3
  476. data/src/core/lib/iomgr/python_util.h +3 -3
  477. data/src/core/lib/iomgr/resolve_address.h +3 -3
  478. data/src/core/lib/iomgr/resolve_address_impl.h +3 -3
  479. data/src/core/lib/iomgr/resolve_address_posix.h +3 -3
  480. data/src/core/lib/iomgr/resolve_address_windows.h +3 -3
  481. data/src/core/lib/iomgr/resolved_address.h +3 -3
  482. data/src/core/lib/iomgr/sockaddr.h +3 -3
  483. data/src/core/lib/iomgr/sockaddr_posix.h +3 -3
  484. data/src/core/lib/iomgr/sockaddr_windows.h +3 -3
  485. data/src/core/lib/iomgr/socket_factory_posix.h +3 -3
  486. data/src/core/lib/iomgr/socket_mutator.h +3 -3
  487. data/src/core/lib/iomgr/socket_utils.h +3 -3
  488. data/src/core/lib/iomgr/socket_utils_posix.h +3 -3
  489. data/src/core/lib/iomgr/socket_windows.h +3 -3
  490. data/src/core/lib/iomgr/systemd_utils.cc +19 -19
  491. data/src/core/lib/iomgr/systemd_utils.h +24 -24
  492. data/src/core/lib/iomgr/tcp_client.h +3 -3
  493. data/src/core/lib/iomgr/tcp_client_posix.cc +12 -0
  494. data/src/core/lib/iomgr/tcp_client_posix.h +3 -3
  495. data/src/core/lib/iomgr/tcp_client_windows.cc +13 -1
  496. data/src/core/lib/iomgr/tcp_posix.cc +49 -65
  497. data/src/core/lib/iomgr/tcp_posix.h +3 -3
  498. data/src/core/lib/iomgr/tcp_server.h +3 -3
  499. data/src/core/lib/iomgr/tcp_server_posix.cc +219 -4
  500. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -3
  501. data/src/core/lib/iomgr/tcp_server_windows.cc +4 -6
  502. data/src/core/lib/iomgr/tcp_windows.h +3 -3
  503. data/src/core/lib/iomgr/timer.h +3 -3
  504. data/src/core/lib/iomgr/timer_generic.h +3 -3
  505. data/src/core/lib/iomgr/timer_heap.h +3 -3
  506. data/src/core/lib/iomgr/timer_manager.h +3 -3
  507. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -3
  508. data/src/core/lib/iomgr/wakeup_fd_pipe.h +3 -3
  509. data/src/core/lib/iomgr/wakeup_fd_posix.h +3 -3
  510. data/src/core/lib/json/json.h +3 -3
  511. data/src/core/lib/json/json_args.h +3 -3
  512. data/src/core/lib/json/json_channel_args.h +3 -3
  513. data/src/core/lib/json/json_object_loader.h +3 -3
  514. data/src/core/lib/json/json_reader.cc +1 -0
  515. data/src/core/lib/json/json_util.h +3 -3
  516. data/src/core/lib/load_balancing/lb_policy.cc +9 -0
  517. data/src/core/lib/load_balancing/lb_policy.h +9 -5
  518. data/src/core/lib/load_balancing/lb_policy_factory.h +3 -3
  519. data/src/core/lib/load_balancing/lb_policy_registry.cc +1 -0
  520. data/src/core/lib/load_balancing/lb_policy_registry.h +3 -3
  521. data/src/core/lib/load_balancing/subchannel_interface.h +8 -6
  522. data/src/core/lib/matchers/matchers.cc +1 -0
  523. data/src/core/lib/matchers/matchers.h +3 -3
  524. data/src/core/lib/promise/activity.cc +8 -6
  525. data/src/core/lib/promise/activity.h +52 -66
  526. data/src/core/lib/promise/arena_promise.h +3 -3
  527. data/src/core/lib/promise/context.h +3 -3
  528. data/src/core/lib/promise/detail/basic_join.h +197 -0
  529. data/src/core/lib/promise/detail/basic_seq.h +10 -16
  530. data/src/core/lib/promise/detail/promise_factory.h +3 -3
  531. data/src/core/lib/promise/detail/promise_like.h +3 -3
  532. data/src/core/lib/promise/detail/status.h +3 -3
  533. data/src/core/lib/promise/detail/switch.h +3 -3
  534. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +3 -3
  535. data/src/core/lib/promise/if.h +195 -0
  536. data/src/core/lib/promise/interceptor_list.h +308 -0
  537. data/src/core/lib/promise/intra_activity_waiter.h +9 -3
  538. data/src/core/lib/promise/latch.h +99 -5
  539. data/src/core/lib/promise/loop.h +4 -4
  540. data/src/core/lib/promise/map.h +4 -6
  541. data/src/core/lib/promise/pipe.h +296 -193
  542. data/src/core/lib/promise/poll.h +113 -14
  543. data/src/core/lib/promise/promise.h +4 -5
  544. data/src/core/lib/promise/race.h +6 -9
  545. data/src/core/lib/promise/seq.h +3 -3
  546. data/src/core/lib/promise/sleep.h +3 -3
  547. data/src/core/lib/promise/{pipe.cc → trace.cc} +3 -2
  548. data/src/core/lib/promise/trace.h +24 -0
  549. data/src/core/lib/promise/try_join.h +82 -0
  550. data/src/core/lib/promise/try_seq.h +3 -3
  551. data/src/core/lib/resolver/resolver.h +3 -3
  552. data/src/core/lib/resolver/resolver_factory.h +4 -4
  553. data/src/core/lib/resolver/resolver_registry.cc +15 -0
  554. data/src/core/lib/resolver/resolver_registry.h +3 -3
  555. data/src/core/lib/resolver/server_address.cc +1 -0
  556. data/src/core/lib/resolver/server_address.h +3 -3
  557. data/src/core/lib/resource_quota/api.h +3 -3
  558. data/src/core/lib/resource_quota/arena.cc +36 -9
  559. data/src/core/lib/resource_quota/arena.h +84 -22
  560. data/src/core/lib/resource_quota/memory_quota.h +3 -3
  561. data/src/core/lib/resource_quota/periodic_update.h +3 -3
  562. data/src/core/lib/resource_quota/resource_quota.h +3 -3
  563. data/src/core/lib/resource_quota/thread_quota.h +3 -3
  564. data/src/core/lib/resource_quota/trace.h +3 -3
  565. data/src/core/lib/security/authorization/authorization_engine.h +3 -3
  566. data/src/core/lib/security/authorization/authorization_policy_provider.h +3 -3
  567. data/src/core/lib/security/authorization/evaluate_args.h +3 -3
  568. data/src/core/lib/security/authorization/grpc_authorization_engine.h +3 -3
  569. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +3 -3
  570. data/src/core/lib/security/authorization/matchers.h +3 -3
  571. data/src/core/lib/security/authorization/rbac_policy.cc +1 -0
  572. data/src/core/lib/security/authorization/rbac_policy.h +3 -3
  573. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +3 -3
  574. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +3 -3
  575. data/src/core/lib/security/context/security_context.h +3 -3
  576. data/src/core/lib/security/credentials/alts/alts_credentials.h +3 -3
  577. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +3 -3
  578. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +3 -3
  579. data/src/core/lib/security/credentials/call_creds_util.h +3 -3
  580. data/src/core/lib/security/credentials/channel_creds_registry.h +3 -3
  581. data/src/core/lib/security/credentials/composite/composite_credentials.h +3 -3
  582. data/src/core/lib/security/credentials/credentials.h +3 -3
  583. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +1 -0
  584. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +3 -3
  585. data/src/core/lib/security/credentials/external/aws_request_signer.cc +1 -0
  586. data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
  587. data/src/core/lib/security/credentials/external/external_account_credentials.cc +1 -0
  588. data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -3
  589. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +3 -3
  590. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
  591. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +3 -3
  592. data/src/core/lib/security/credentials/fake/fake_credentials.h +3 -3
  593. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +3 -3
  594. data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -0
  595. data/src/core/lib/security/credentials/iam/iam_credentials.h +3 -3
  596. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -3
  597. data/src/core/lib/security/credentials/jwt/json_token.h +3 -3
  598. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
  599. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +3 -3
  600. data/src/core/lib/security/credentials/local/local_credentials.h +3 -3
  601. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -3
  602. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -3
  603. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +3 -3
  604. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +3 -3
  605. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +1 -1
  606. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +3 -3
  607. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +3 -3
  608. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +3 -3
  609. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -3
  610. data/src/core/lib/security/credentials/tls/tls_utils.h +3 -3
  611. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  612. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +3 -3
  613. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -0
  614. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +3 -3
  615. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +3 -3
  616. data/src/core/lib/security/security_connector/load_system_roots.h +3 -3
  617. data/src/core/lib/security/security_connector/load_system_roots_supported.h +3 -3
  618. data/src/core/lib/security/security_connector/local/local_security_connector.h +3 -3
  619. data/src/core/lib/security/security_connector/security_connector.h +3 -3
  620. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -0
  621. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +3 -3
  622. data/src/core/lib/security/security_connector/ssl_utils.h +3 -3
  623. data/src/core/lib/security/security_connector/ssl_utils_config.h +3 -3
  624. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +3 -3
  625. data/src/core/lib/security/transport/auth_filters.h +27 -5
  626. data/src/core/lib/security/transport/secure_endpoint.h +3 -3
  627. data/src/core/lib/security/transport/security_handshaker.cc +9 -0
  628. data/src/core/lib/security/transport/security_handshaker.h +3 -3
  629. data/src/core/lib/security/transport/server_auth_filter.cc +120 -251
  630. data/src/core/lib/security/transport/tsi_error.h +3 -3
  631. data/src/core/lib/security/util/json_util.h +3 -3
  632. data/src/core/lib/service_config/service_config.h +3 -3
  633. data/src/core/lib/service_config/service_config_call_data.h +3 -3
  634. data/src/core/lib/service_config/service_config_impl.h +3 -3
  635. data/src/core/lib/service_config/service_config_parser.h +3 -3
  636. data/src/core/lib/slice/b64.h +3 -3
  637. data/src/core/lib/slice/percent_encoding.h +3 -3
  638. data/src/core/lib/slice/slice.cc +3 -3
  639. data/src/core/lib/slice/slice.h +14 -21
  640. data/src/core/lib/slice/slice_buffer.h +10 -4
  641. data/src/core/lib/slice/slice_internal.h +3 -3
  642. data/src/core/lib/slice/slice_refcount.cc +20 -0
  643. data/src/core/lib/slice/slice_refcount.h +26 -6
  644. data/src/core/lib/slice/slice_string_helpers.h +3 -3
  645. data/src/core/lib/surface/api_trace.h +3 -3
  646. data/src/core/lib/surface/builtins.h +3 -3
  647. data/src/core/lib/surface/call.cc +866 -252
  648. data/src/core/lib/surface/call.h +31 -3
  649. data/src/core/lib/surface/call_log_batch.cc +1 -0
  650. data/src/core/lib/surface/call_test_only.h +3 -3
  651. data/src/core/lib/surface/call_trace.cc +21 -11
  652. data/src/core/lib/surface/call_trace.h +3 -3
  653. data/src/core/lib/surface/channel.h +3 -3
  654. data/src/core/lib/surface/channel_init.h +3 -3
  655. data/src/core/lib/surface/channel_stack_type.h +3 -3
  656. data/src/core/lib/surface/completion_queue.cc +1 -0
  657. data/src/core/lib/surface/completion_queue.h +3 -3
  658. data/src/core/lib/surface/completion_queue_factory.h +3 -3
  659. data/src/core/lib/surface/event_string.cc +1 -0
  660. data/src/core/lib/surface/event_string.h +3 -3
  661. data/src/core/lib/surface/init.cc +1 -1
  662. data/src/core/lib/surface/init.h +3 -3
  663. data/src/core/lib/surface/init_internally.h +3 -3
  664. data/src/core/lib/surface/lame_client.cc +3 -1
  665. data/src/core/lib/surface/lame_client.h +3 -3
  666. data/src/core/lib/surface/server.cc +273 -27
  667. data/src/core/lib/surface/server.h +6 -3
  668. data/src/core/lib/surface/validate_metadata.h +3 -3
  669. data/src/core/lib/surface/version.cc +2 -2
  670. data/src/core/lib/transport/bdp_estimator.h +3 -3
  671. data/src/core/lib/transport/connectivity_state.h +3 -3
  672. data/src/core/lib/transport/error_utils.h +3 -3
  673. data/src/core/lib/transport/handshaker.cc +11 -0
  674. data/src/core/lib/transport/handshaker.h +4 -4
  675. data/src/core/lib/transport/handshaker_factory.h +3 -3
  676. data/src/core/lib/transport/handshaker_registry.h +3 -3
  677. data/src/core/lib/transport/http2_errors.h +3 -3
  678. data/src/core/lib/transport/http_connect_handshaker.h +3 -3
  679. data/src/core/lib/transport/metadata_batch.cc +11 -0
  680. data/src/core/lib/transport/metadata_batch.h +24 -3
  681. data/src/core/lib/transport/parsed_metadata.h +3 -3
  682. data/src/core/lib/transport/pid_controller.h +3 -3
  683. data/src/core/lib/transport/status_conversion.h +3 -3
  684. data/src/core/lib/transport/tcp_connect_handshaker.cc +0 -1
  685. data/src/core/lib/transport/tcp_connect_handshaker.h +3 -3
  686. data/src/core/lib/transport/timeout_encoding.h +3 -3
  687. data/src/core/lib/transport/transport.cc +3 -8
  688. data/src/core/lib/transport/transport.h +16 -8
  689. data/src/core/lib/transport/transport_fwd.h +3 -3
  690. data/src/core/lib/transport/transport_impl.h +3 -3
  691. data/src/core/lib/transport/transport_op_string.cc +1 -0
  692. data/src/core/lib/uri/uri_parser.cc +1 -1
  693. data/src/core/lib/uri/uri_parser.h +3 -3
  694. data/src/core/plugin_registry/grpc_plugin_registry.cc +5 -0
  695. data/src/core/tsi/alts/crypt/gsec.h +3 -3
  696. data/src/core/tsi/alts/frame_protector/alts_counter.h +3 -3
  697. data/src/core/tsi/alts/frame_protector/alts_crypter.h +3 -3
  698. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +3 -3
  699. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +3 -3
  700. data/src/core/tsi/alts/frame_protector/frame_handler.h +3 -3
  701. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +3 -3
  702. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +3 -3
  703. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +3 -3
  704. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +3 -3
  705. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +3 -3
  706. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +3 -3
  707. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +3 -3
  708. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +3 -3
  709. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +3 -3
  710. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +3 -3
  711. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +3 -3
  712. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +3 -3
  713. data/src/core/tsi/fake_transport_security.h +3 -3
  714. data/src/core/tsi/local_transport_security.h +3 -3
  715. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +1 -1
  716. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
  717. data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -3
  718. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -3
  719. data/src/core/tsi/ssl_transport_security.cc +113 -24
  720. data/src/core/tsi/ssl_transport_security.h +5 -3
  721. data/src/core/tsi/ssl_transport_security_utils.h +3 -3
  722. data/src/core/tsi/ssl_types.h +3 -3
  723. data/src/core/tsi/transport_security.h +3 -3
  724. data/src/core/tsi/transport_security_grpc.h +3 -3
  725. data/src/core/tsi/transport_security_interface.h +3 -3
  726. data/src/ruby/lib/grpc/version.rb +1 -1
  727. data/src/ruby/pb/generate_proto_ruby.sh +0 -6
  728. data/third_party/abseil-cpp/absl/algorithm/container.h +56 -57
  729. data/third_party/abseil-cpp/absl/base/attributes.h +39 -19
  730. data/third_party/abseil-cpp/absl/base/config.h +44 -3
  731. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +3 -18
  732. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
  733. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +2 -1
  734. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
  735. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
  736. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
  737. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +10 -6
  738. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +23 -24
  739. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -3
  740. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +2 -6
  741. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
  742. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +4 -4
  743. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -10
  744. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
  745. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
  746. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -40
  747. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
  748. data/third_party/abseil-cpp/absl/base/macros.h +4 -21
  749. data/third_party/abseil-cpp/absl/base/optimization.h +58 -6
  750. data/third_party/abseil-cpp/absl/base/options.h +1 -7
  751. data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
  752. data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -5
  753. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -7
  754. data/third_party/abseil-cpp/absl/container/inlined_vector.h +66 -18
  755. data/third_party/abseil-cpp/absl/container/internal/common.h +3 -3
  756. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
  757. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +13 -1
  758. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
  759. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +50 -5
  760. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +14 -46
  761. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +110 -32
  762. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +155 -4
  763. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +661 -341
  764. data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
  765. data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
  766. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
  767. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
  768. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
  769. data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
  770. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
  771. data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
  772. data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
  773. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
  774. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
  775. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
  776. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
  777. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
  778. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
  779. data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
  780. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
  781. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
  782. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
  783. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +1 -1
  784. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
  785. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
  786. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -13
  787. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -9
  788. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
  789. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +40 -85
  790. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
  791. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +33 -8
  792. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +3 -2
  793. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
  794. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +118 -94
  795. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
  796. data/third_party/abseil-cpp/absl/functional/any_invocable.h +5 -2
  797. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +47 -26
  798. data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
  799. data/third_party/abseil-cpp/absl/hash/internal/hash.h +18 -4
  800. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
  801. data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
  802. data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
  803. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -3
  804. data/third_party/abseil-cpp/absl/numeric/int128.cc +10 -8
  805. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +14 -6
  806. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  807. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +1 -1
  808. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +2 -23
  809. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
  810. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
  811. data/third_party/abseil-cpp/absl/random/random.h +6 -6
  812. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +1 -0
  813. data/third_party/abseil-cpp/absl/status/status.cc +19 -12
  814. data/third_party/abseil-cpp/absl/status/status.h +2 -2
  815. data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
  816. data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
  817. data/third_party/abseil-cpp/absl/strings/cord.cc +92 -40
  818. data/third_party/abseil-cpp/absl/strings/cord.h +71 -80
  819. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +8 -5
  820. data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
  821. data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
  822. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
  823. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
  824. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  825. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +326 -70
  826. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +8 -4
  827. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +26 -14
  828. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +5 -5
  829. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +9 -7
  830. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +5 -4
  831. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
  832. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
  833. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +8 -5
  834. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
  835. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +4 -4
  836. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
  837. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
  838. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +12 -10
  839. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
  840. data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
  841. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
  842. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
  843. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
  844. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
  845. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +126 -29
  846. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
  847. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +4 -3
  848. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +49 -287
  849. data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
  850. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +2 -1
  851. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +4 -2
  852. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
  853. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
  854. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +10 -101
  855. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
  856. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
  857. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
  858. data/third_party/abseil-cpp/absl/strings/numbers.cc +34 -31
  859. data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
  860. data/third_party/abseil-cpp/absl/strings/str_cat.h +50 -3
  861. data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
  862. data/third_party/abseil-cpp/absl/strings/string_view.cc +6 -6
  863. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -10
  864. data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
  865. data/third_party/abseil-cpp/absl/strings/substitute.h +46 -20
  866. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
  867. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
  868. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
  869. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +104 -55
  870. data/third_party/abseil-cpp/absl/synchronization/mutex.h +85 -46
  871. data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
  872. data/third_party/abseil-cpp/absl/synchronization/notification.h +0 -1
  873. data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
  874. data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
  875. data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
  876. data/third_party/abseil-cpp/absl/time/duration.cc +7 -7
  877. data/third_party/abseil-cpp/absl/time/format.cc +2 -1
  878. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
  879. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
  880. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
  881. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
  882. data/third_party/abseil-cpp/absl/time/time.cc +2 -2
  883. data/third_party/abseil-cpp/absl/time/time.h +253 -158
  884. data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
  885. data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
  886. data/third_party/abseil-cpp/absl/types/span.h +29 -7
  887. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +1 -1
  888. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +1 -2
  889. metadata +73 -8
  890. data/src/core/lib/event_engine/socket_notifier.h +0 -55
  891. data/src/core/lib/promise/for_each.h +0 -155
  892. data/src/core/lib/promise/map_pipe.h +0 -88
  893. data/src/core/lib/promise/try_concurrently.h +0 -342
@@ -26,34 +26,68 @@
26
26
  #include <grpc/event_engine/memory_allocator.h>
27
27
  #include <grpc/event_engine/slice_buffer.h>
28
28
 
29
+ #include "src/core/lib/event_engine/channel_args_endpoint_config.h"
30
+ #include "src/core/lib/event_engine/common_closures.h"
31
+ #include "src/core/lib/event_engine/executor/executor.h"
29
32
  #include "src/core/lib/event_engine/handle_containers.h"
30
33
  #include "src/core/lib/event_engine/posix_engine/timer_manager.h"
34
+ #include "src/core/lib/event_engine/tcp_socket_utils.h"
31
35
  #include "src/core/lib/event_engine/trace.h"
32
36
  #include "src/core/lib/event_engine/utils.h"
33
37
  #include "src/core/lib/event_engine/windows/iocp.h"
38
+ #include "src/core/lib/event_engine/windows/windows_endpoint.h"
34
39
  #include "src/core/lib/event_engine/windows/windows_engine.h"
35
40
  #include "src/core/lib/gprpp/crash.h"
36
41
  #include "src/core/lib/gprpp/sync.h"
37
42
  #include "src/core/lib/gprpp/time.h"
43
+ #include "src/core/lib/iomgr/error.h"
38
44
 
39
45
  namespace grpc_event_engine {
40
46
  namespace experimental {
41
47
 
48
+ // ---- IOCPWorkClosure ----
49
+
50
+ WindowsEventEngine::IOCPWorkClosure::IOCPWorkClosure(Executor* executor,
51
+ IOCP* iocp)
52
+ : executor_(executor), iocp_(iocp) {
53
+ executor_->Run(this);
54
+ }
55
+
56
+ void WindowsEventEngine::IOCPWorkClosure::Run() {
57
+ auto result = iocp_->Work(std::chrono::seconds(60), [this] {
58
+ workers_.fetch_add(1);
59
+ executor_->Run(this);
60
+ });
61
+ if (result == Poller::WorkResult::kDeadlineExceeded) {
62
+ // iocp received no messages. restart the worker
63
+ workers_.fetch_add(1);
64
+ executor_->Run(this);
65
+ }
66
+ if (workers_.fetch_sub(1) == 1) done_signal_.Notify();
67
+ }
68
+
69
+ void WindowsEventEngine::IOCPWorkClosure::WaitForShutdown() {
70
+ done_signal_.WaitForNotification();
71
+ }
72
+
73
+ // ---- WindowsEventEngine ----
74
+
42
75
  // TODO(hork): The iomgr timer and execution engine can be reused. It should
43
76
  // be separated out from the posix_engine and instantiated as components. It is
44
77
  // effectively copied below.
45
78
 
46
- struct WindowsEventEngine::Closure final : public EventEngine::Closure {
79
+ struct WindowsEventEngine::TimerClosure final : public EventEngine::Closure {
47
80
  absl::AnyInvocable<void()> cb;
48
81
  Timer timer;
49
82
  WindowsEventEngine* engine;
50
83
  EventEngine::TaskHandle handle;
51
84
 
52
85
  void Run() override {
53
- GRPC_EVENT_ENGINE_TRACE("WindowsEventEngine:%p executing callback:%s",
54
- engine, HandleToString(handle).c_str());
86
+ GRPC_EVENT_ENGINE_TRACE(
87
+ "WindowsEventEngine:%p executing callback:%s", engine,
88
+ HandleToString<EventEngine::TaskHandle>(handle).c_str());
55
89
  {
56
- grpc_core::MutexLock lock(&engine->mu_);
90
+ grpc_core::MutexLock lock(&engine->task_mu_);
57
91
  engine->known_handles_.erase(handle);
58
92
  }
59
93
  cb();
@@ -64,7 +98,8 @@ struct WindowsEventEngine::Closure final : public EventEngine::Closure {
64
98
  WindowsEventEngine::WindowsEventEngine()
65
99
  : executor_(std::make_shared<ThreadPool>()),
66
100
  iocp_(executor_.get()),
67
- timer_manager_(executor_) {
101
+ timer_manager_(executor_),
102
+ iocp_worker_(executor_.get(), &iocp_) {
68
103
  WSADATA wsaData;
69
104
  int status = WSAStartup(MAKEWORD(2, 0), &wsaData);
70
105
  GPR_ASSERT(status == 0);
@@ -72,25 +107,31 @@ WindowsEventEngine::WindowsEventEngine()
72
107
 
73
108
  WindowsEventEngine::~WindowsEventEngine() {
74
109
  {
75
- grpc_core::MutexLock lock(&mu_);
110
+ grpc_core::MutexLock lock(&task_mu_);
76
111
  if (GRPC_TRACE_FLAG_ENABLED(grpc_event_engine_trace)) {
77
112
  for (auto handle : known_handles_) {
78
113
  gpr_log(GPR_ERROR,
79
114
  "WindowsEventEngine:%p uncleared TaskHandle at shutdown:%s",
80
- this, HandleToString(handle).c_str());
115
+ this, HandleToString<EventEngine::TaskHandle>(handle).c_str());
81
116
  }
82
117
  }
83
118
  GPR_ASSERT(GPR_LIKELY(known_handles_.empty()));
84
- GPR_ASSERT(WSACleanup() == 0);
85
- timer_manager_.Shutdown();
86
119
  }
120
+ iocp_.Kick();
121
+ iocp_worker_.WaitForShutdown();
122
+ iocp_.Shutdown();
123
+ GPR_ASSERT(WSACleanup() == 0);
124
+ timer_manager_.Shutdown();
87
125
  executor_->Quiesce();
88
126
  }
89
127
 
90
128
  bool WindowsEventEngine::Cancel(EventEngine::TaskHandle handle) {
91
- grpc_core::MutexLock lock(&mu_);
129
+ grpc_core::MutexLock lock(&task_mu_);
92
130
  if (!known_handles_.contains(handle)) return false;
93
- auto* cd = reinterpret_cast<Closure*>(handle.keys[0]);
131
+ GRPC_EVENT_ENGINE_TRACE(
132
+ "WindowsEventEngine::%p cancelling %s", this,
133
+ HandleToString<EventEngine::TaskHandle>(handle).c_str());
134
+ auto* cd = reinterpret_cast<TimerClosure*>(handle.keys[0]);
94
135
  bool r = timer_manager_.TimerCancel(&cd->timer);
95
136
  known_handles_.erase(handle);
96
137
  if (r) delete cd;
@@ -118,16 +159,17 @@ void WindowsEventEngine::Run(EventEngine::Closure* closure) {
118
159
  EventEngine::TaskHandle WindowsEventEngine::RunAfterInternal(
119
160
  Duration when, absl::AnyInvocable<void()> cb) {
120
161
  auto when_ts = ToTimestamp(timer_manager_.Now(), when);
121
- auto* cd = new Closure;
162
+ auto* cd = new TimerClosure;
122
163
  cd->cb = std::move(cb);
123
164
  cd->engine = this;
124
165
  EventEngine::TaskHandle handle{reinterpret_cast<intptr_t>(cd),
125
166
  aba_token_.fetch_add(1)};
126
- grpc_core::MutexLock lock(&mu_);
167
+ grpc_core::MutexLock lock(&task_mu_);
127
168
  known_handles_.insert(handle);
128
169
  cd->handle = handle;
129
- GRPC_EVENT_ENGINE_TRACE("WindowsEventEngine:%p scheduling callback:%s", this,
130
- HandleToString(handle).c_str());
170
+ GRPC_EVENT_ENGINE_TRACE(
171
+ "WindowsEventEngine:%p scheduling callback:%s", this,
172
+ HandleToString<EventEngine::TaskHandle>(handle).c_str());
131
173
  timer_manager_.TimerInit(&cd->timer, when_ts, cd);
132
174
  return handle;
133
175
  }
@@ -139,15 +181,196 @@ std::unique_ptr<EventEngine::DNSResolver> WindowsEventEngine::GetDNSResolver(
139
181
 
140
182
  bool WindowsEventEngine::IsWorkerThread() { grpc_core::Crash("unimplemented"); }
141
183
 
142
- bool WindowsEventEngine::CancelConnect(EventEngine::ConnectionHandle handle) {
143
- grpc_core::Crash("unimplemented");
184
+ void WindowsEventEngine::OnConnectCompleted(
185
+ std::shared_ptr<ConnectionState> state) {
186
+ absl::StatusOr<std::unique_ptr<WindowsEndpoint>> endpoint;
187
+ {
188
+ // Connection attempt complete!
189
+ grpc_core::MutexLock lock(&state->mu);
190
+ state->on_connected = nullptr;
191
+ {
192
+ grpc_core::MutexLock handle_lock(&connection_mu_);
193
+ known_connection_handles_.erase(state->connection_handle);
194
+ }
195
+ const auto& overlapped_result = state->socket->write_info()->result();
196
+ // return early if we cannot cancel the connection timeout timer.
197
+ if (!Cancel(state->timer_handle)) return;
198
+ if (overlapped_result.wsa_error != 0) {
199
+ state->socket->Shutdown(DEBUG_LOCATION, "ConnectEx failure");
200
+ endpoint = GRPC_WSA_ERROR(overlapped_result.wsa_error, "ConnectEx");
201
+ } else {
202
+ // This code should be running in an executor thread already, so the
203
+ // callback can be run directly.
204
+ ChannelArgsEndpointConfig cfg;
205
+ endpoint = std::make_unique<WindowsEndpoint>(
206
+ state->address, std::move(state->socket), std::move(state->allocator),
207
+ cfg, executor_.get());
208
+ }
209
+ }
210
+ state->on_connected_user_callback(std::move(endpoint));
144
211
  }
145
212
 
146
213
  EventEngine::ConnectionHandle WindowsEventEngine::Connect(
147
214
  OnConnectCallback on_connect, const ResolvedAddress& addr,
148
- const EndpointConfig& args, MemoryAllocator memory_allocator,
149
- Duration deadline) {
150
- grpc_core::Crash("unimplemented");
215
+ const EndpointConfig& /* args */, MemoryAllocator memory_allocator,
216
+ Duration timeout) {
217
+ // TODO(hork): utilize the endpoint config
218
+ absl::Status status;
219
+ int istatus;
220
+ auto uri = ResolvedAddressToURI(addr);
221
+ if (!uri.ok()) {
222
+ Run([on_connect = std::move(on_connect), status = uri.status()]() mutable {
223
+ on_connect(status);
224
+ });
225
+ return EventEngine::kInvalidConnectionHandle;
226
+ }
227
+ GRPC_EVENT_ENGINE_TRACE("EventEngine::%p connecting to %s", this,
228
+ uri->c_str());
229
+ // Use dualstack sockets where available.
230
+ ResolvedAddress address = addr;
231
+ ResolvedAddress addr6_v4mapped;
232
+ if (ResolvedAddressToV4Mapped(addr, &addr6_v4mapped)) {
233
+ address = addr6_v4mapped;
234
+ }
235
+ SOCKET sock = WSASocket(AF_INET6, SOCK_STREAM, IPPROTO_TCP, nullptr, 0,
236
+ IOCP::GetDefaultSocketFlags());
237
+ if (sock == INVALID_SOCKET) {
238
+ Run([on_connect = std::move(on_connect),
239
+ status = GRPC_WSA_ERROR(WSAGetLastError(), "WSASocket")]() mutable {
240
+ on_connect(status);
241
+ });
242
+ return EventEngine::kInvalidConnectionHandle;
243
+ }
244
+ status = PrepareSocket(sock);
245
+ if (!status.ok()) {
246
+ Run([on_connect = std::move(on_connect), status]() mutable {
247
+ on_connect(status);
248
+ });
249
+ return EventEngine::kInvalidConnectionHandle;
250
+ }
251
+ // Grab the function pointer for ConnectEx for that specific socket It may
252
+ // change depending on the interface.
253
+ LPFN_CONNECTEX ConnectEx;
254
+ GUID guid = WSAID_CONNECTEX;
255
+ DWORD ioctl_num_bytes;
256
+ istatus = WSAIoctl(sock, SIO_GET_EXTENSION_FUNCTION_POINTER, &guid,
257
+ sizeof(guid), &ConnectEx, sizeof(ConnectEx),
258
+ &ioctl_num_bytes, nullptr, nullptr);
259
+ if (istatus != 0) {
260
+ Run([on_connect = std::move(on_connect),
261
+ status = GRPC_WSA_ERROR(
262
+ WSAGetLastError(),
263
+ "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER)")]() mutable {
264
+ on_connect(status);
265
+ });
266
+ return EventEngine::kInvalidConnectionHandle;
267
+ }
268
+ // bind the local address
269
+ auto local_address = ResolvedAddressMakeWild6(0);
270
+ istatus = bind(sock, local_address.address(), local_address.size());
271
+ if (istatus != 0) {
272
+ Run([on_connect = std::move(on_connect),
273
+ status = GRPC_WSA_ERROR(WSAGetLastError(), "bind")]() mutable {
274
+ on_connect(status);
275
+ });
276
+ return EventEngine::kInvalidConnectionHandle;
277
+ }
278
+ // Connect
279
+ auto watched_socket = iocp_.Watch(sock);
280
+ auto* info = watched_socket->write_info();
281
+ bool success =
282
+ ConnectEx(watched_socket->raw_socket(), address.address(), address.size(),
283
+ nullptr, 0, nullptr, info->overlapped());
284
+ // It wouldn't be unusual to get a success immediately. But we'll still get an
285
+ // IOCP notification, so let's ignore it.
286
+ if (!success) {
287
+ int last_error = WSAGetLastError();
288
+ if (last_error != ERROR_IO_PENDING) {
289
+ Run([on_connect = std::move(on_connect),
290
+ status = GRPC_WSA_ERROR(WSAGetLastError(), "ConnectEx")]() mutable {
291
+ on_connect(status);
292
+ });
293
+ watched_socket->Shutdown(DEBUG_LOCATION, "ConnectEx");
294
+ return EventEngine::kInvalidConnectionHandle;
295
+ }
296
+ }
297
+ GPR_ASSERT(watched_socket != nullptr);
298
+ auto connection_state = std::make_shared<ConnectionState>();
299
+ grpc_core::MutexLock lock(&connection_state->mu);
300
+ connection_state->address = address;
301
+ connection_state->socket = std::move(watched_socket);
302
+ connection_state->on_connected_user_callback = std::move(on_connect);
303
+ connection_state->allocator = std::move(memory_allocator);
304
+ connection_state->on_connected =
305
+ SelfDeletingClosure::Create([this, connection_state]() mutable {
306
+ OnConnectCompleted(std::move(connection_state));
307
+ });
308
+ {
309
+ grpc_core::MutexLock conn_lock(&connection_mu_);
310
+ connection_state->connection_handle =
311
+ ConnectionHandle{reinterpret_cast<intptr_t>(connection_state.get()),
312
+ aba_token_.fetch_add(1)};
313
+ known_connection_handles_.insert(connection_state->connection_handle);
314
+ }
315
+ connection_state->timer_handle =
316
+ RunAfter(timeout, [this, connection_state]() {
317
+ grpc_core::MutexLock lock(&connection_state->mu);
318
+ if (CancelConnectFromDeadlineTimer(connection_state.get())) {
319
+ connection_state->on_connected_user_callback(
320
+ absl::DeadlineExceededError("Connection timed out"));
321
+ }
322
+ // else: The connection attempt could not be canceled. We can assume the
323
+ // connection callback will be called.
324
+ });
325
+ connection_state->socket->NotifyOnWrite(connection_state->on_connected);
326
+ return connection_state->connection_handle;
327
+ }
328
+
329
+ bool WindowsEventEngine::CancelConnect(EventEngine::ConnectionHandle handle) {
330
+ if (TaskHandleComparator<ConnectionHandle>::Eq()(
331
+ handle, EventEngine::kInvalidConnectionHandle)) {
332
+ GRPC_EVENT_ENGINE_TRACE("%s",
333
+ "Attempted to cancel an invalid connection handle");
334
+ return false;
335
+ }
336
+ // Erase the connection handle, which may be unknown
337
+ {
338
+ grpc_core::MutexLock lock(&connection_mu_);
339
+ if (!known_connection_handles_.contains(handle)) {
340
+ GRPC_EVENT_ENGINE_TRACE(
341
+ "Unknown connection handle: %s",
342
+ HandleToString<EventEngine::ConnectionHandle>(handle).c_str());
343
+ return false;
344
+ }
345
+ known_connection_handles_.erase(handle);
346
+ }
347
+ auto* connection_state = reinterpret_cast<ConnectionState*>(handle.keys[0]);
348
+ grpc_core::MutexLock state_lock(&connection_state->mu);
349
+ if (!Cancel(connection_state->timer_handle)) return false;
350
+ return CancelConnectInternalStateLocked(connection_state);
351
+ }
352
+
353
+ bool WindowsEventEngine::CancelConnectFromDeadlineTimer(
354
+ ConnectionState* connection_state) {
355
+ // Erase the connection handle, which is guaranteed to exist.
356
+ {
357
+ grpc_core::MutexLock lock(&connection_mu_);
358
+ GPR_ASSERT(known_connection_handles_.erase(
359
+ connection_state->connection_handle) == 1);
360
+ }
361
+ return CancelConnectInternalStateLocked(connection_state);
362
+ }
363
+
364
+ bool WindowsEventEngine::CancelConnectInternalStateLocked(
365
+ ConnectionState* connection_state) {
366
+ connection_state->socket->Shutdown(DEBUG_LOCATION, "CancelConnect");
367
+ // Release the connection_state shared_ptr. connection_state is now invalid.
368
+ delete connection_state->on_connected;
369
+ GRPC_EVENT_ENGINE_TRACE("Successfully cancelled connection %s",
370
+ HandleToString<EventEngine::ConnectionHandle>(
371
+ connection_state->connection_handle)
372
+ .c_str());
373
+ return true;
151
374
  }
152
375
 
153
376
  absl::StatusOr<std::unique_ptr<EventEngine::Listener>>
@@ -11,8 +11,8 @@
11
11
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
- #ifndef GRPC_CORE_LIB_EVENT_ENGINE_WINDOWS_WINDOWS_ENGINE_H
15
- #define GRPC_CORE_LIB_EVENT_ENGINE_WINDOWS_WINDOWS_ENGINE_H
14
+ #ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_WINDOWS_WINDOWS_ENGINE_H
15
+ #define GRPC_SRC_CORE_LIB_EVENT_ENGINE_WINDOWS_WINDOWS_ENGINE_H
16
16
  #include <grpc/support/port_platform.h>
17
17
 
18
18
  #ifdef GPR_WINDOWS
@@ -32,6 +32,7 @@
32
32
  #include "src/core/lib/event_engine/posix_engine/timer_manager.h"
33
33
  #include "src/core/lib/event_engine/thread_pool.h"
34
34
  #include "src/core/lib/event_engine/windows/iocp.h"
35
+ #include "src/core/lib/event_engine/windows/windows_endpoint.h"
35
36
  #include "src/core/lib/gprpp/sync.h"
36
37
  #include "src/core/lib/gprpp/time.h"
37
38
  #include "src/core/lib/surface/init_internally.h"
@@ -40,26 +41,10 @@ namespace grpc_event_engine {
40
41
  namespace experimental {
41
42
 
42
43
  // TODO(ctiller): KeepsGrpcInitialized is an interim measure to ensure that
43
- // event engine is shut down before we shut down iomgr.
44
+ // EventEngine is shut down before we shut down iomgr.
44
45
  class WindowsEventEngine : public EventEngine,
45
46
  public grpc_core::KeepsGrpcInitialized {
46
47
  public:
47
- class WindowsEndpoint : public EventEngine::Endpoint {
48
- public:
49
- ~WindowsEndpoint() override;
50
- void Read(absl::AnyInvocable<void(absl::Status)> on_read,
51
- SliceBuffer* buffer, const ReadArgs* args) override;
52
- void Write(absl::AnyInvocable<void(absl::Status)> on_writable,
53
- SliceBuffer* data, const WriteArgs* args) override;
54
- const ResolvedAddress& GetPeerAddress() const override;
55
- const ResolvedAddress& GetLocalAddress() const override;
56
- };
57
- class WindowsListener : public EventEngine::Listener {
58
- public:
59
- ~WindowsListener() override;
60
- absl::StatusOr<int> Bind(const ResolvedAddress& addr) override;
61
- absl::Status Start() override;
62
- };
63
48
  class WindowsDNSResolver : public EventEngine::DNSResolver {
64
49
  public:
65
50
  ~WindowsDNSResolver() override;
@@ -103,17 +88,71 @@ class WindowsEventEngine : public EventEngine,
103
88
  absl::AnyInvocable<void()> closure) override;
104
89
  bool Cancel(TaskHandle handle) override;
105
90
 
91
+ // Retrieve the base executor.
92
+ // This is public because most classes that know the concrete
93
+ // WindowsEventEngine type are effectively friends.
94
+ // Not intended for external use.
95
+ Executor* executor() { return executor_.get(); }
96
+
106
97
  private:
107
- struct Closure;
98
+ // State of an active connection.
99
+ // Managed by a shared_ptr, owned exclusively by the timeout callback and the
100
+ // OnConnectCompleted callback herein.
101
+ struct ConnectionState {
102
+ // everything is guarded by mu;
103
+ grpc_core::Mutex mu
104
+ ABSL_ACQUIRED_BEFORE(WindowsEventEngine::connection_mu_);
105
+ EventEngine::ConnectionHandle connection_handle ABSL_GUARDED_BY(mu);
106
+ EventEngine::TaskHandle timer_handle ABSL_GUARDED_BY(mu);
107
+ EventEngine::OnConnectCallback on_connected_user_callback
108
+ ABSL_GUARDED_BY(mu);
109
+ EventEngine::Closure* on_connected ABSL_GUARDED_BY(mu);
110
+ std::unique_ptr<WinSocket> socket ABSL_GUARDED_BY(mu);
111
+ EventEngine::ResolvedAddress address ABSL_GUARDED_BY(mu);
112
+ MemoryAllocator allocator ABSL_GUARDED_BY(mu);
113
+ };
114
+
115
+ // A poll worker which schedules itself unless kicked
116
+ class IOCPWorkClosure : public EventEngine::Closure {
117
+ public:
118
+ explicit IOCPWorkClosure(Executor* executor, IOCP* iocp);
119
+ void Run() override;
120
+ void WaitForShutdown();
121
+
122
+ private:
123
+ std::atomic<int> workers_{1};
124
+ grpc_core::Notification done_signal_;
125
+ Executor* executor_;
126
+ IOCP* iocp_;
127
+ };
128
+
129
+ void OnConnectCompleted(std::shared_ptr<ConnectionState> state);
130
+
131
+ // CancelConnect called from within the deadline timer.
132
+ // In this case, the connection_state->mu is already locked, and timer
133
+ // cancellation is not possible.
134
+ bool CancelConnectFromDeadlineTimer(ConnectionState* connection_state)
135
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(connection_state->mu);
136
+
137
+ // Completes the connection cancellation logic after checking handle validity
138
+ // and optionally cancelling deadline timers.
139
+ bool CancelConnectInternalStateLocked(ConnectionState* connection_state)
140
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(connection_state->mu);
141
+
142
+ class TimerClosure;
108
143
  EventEngine::TaskHandle RunAfterInternal(Duration when,
109
144
  absl::AnyInvocable<void()> cb);
110
- grpc_core::Mutex mu_;
111
- TaskHandleSet known_handles_ ABSL_GUARDED_BY(mu_);
145
+ grpc_core::Mutex task_mu_;
146
+ TaskHandleSet known_handles_ ABSL_GUARDED_BY(task_mu_);
147
+ grpc_core::Mutex connection_mu_ ABSL_ACQUIRED_AFTER(ConnectionState::mu);
148
+ grpc_core::CondVar connection_cv_;
149
+ ConnectionHandleSet known_connection_handles_ ABSL_GUARDED_BY(connection_mu_);
112
150
  std::atomic<intptr_t> aba_token_{0};
113
151
 
114
152
  std::shared_ptr<ThreadPool> executor_;
115
153
  IOCP iocp_;
116
154
  TimerManager timer_manager_;
155
+ IOCPWorkClosure iocp_worker_;
117
156
  };
118
157
 
119
158
  } // namespace experimental
@@ -121,4 +160,4 @@ class WindowsEventEngine : public EventEngine,
121
160
 
122
161
  #endif
123
162
 
124
- #endif // GRPC_CORE_LIB_EVENT_ENGINE_WINDOWS_WINDOWS_ENGINE_H
163
+ #endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_WINDOWS_WINDOWS_ENGINE_H
@@ -30,10 +30,12 @@
30
30
  #include <grpc/support/log.h>
31
31
 
32
32
  #include "src/core/lib/experiments/experiments.h"
33
+ #include "src/core/lib/gprpp/crash.h" // IWYU pragma: keep
33
34
  #include "src/core/lib/gprpp/global_config.h"
34
35
  #include "src/core/lib/gprpp/memory.h"
35
36
  #include "src/core/lib/gprpp/no_destruct.h"
36
37
 
38
+ #ifndef GRPC_EXPERIMENTS_ARE_FINAL
37
39
  GPR_GLOBAL_CONFIG_DEFINE_STRING(
38
40
  grpc_experiments, "",
39
41
  "List of grpc experiments to enable (or with a '-' prefix to disable).");
@@ -58,7 +60,11 @@ GPR_ATTRIBUTE_NOINLINE Experiments LoadExperimentsFromConfigVariable() {
58
60
  // Set defaults from metadata.
59
61
  Experiments experiments;
60
62
  for (size_t i = 0; i < kNumExperiments; i++) {
61
- experiments.enabled[i] = g_experiment_metadata[i].default_value;
63
+ if (!g_forced_experiments[i].forced) {
64
+ experiments.enabled[i] = g_experiment_metadata[i].default_value;
65
+ } else {
66
+ experiments.enabled[i] = g_forced_experiments[i].value;
67
+ }
62
68
  }
63
69
  // Get the global config.
64
70
  auto experiments_str = GPR_GLOBAL_CONFIG_GET(grpc_experiments);
@@ -144,3 +150,12 @@ void ForceEnableExperiment(absl::string_view experiment, bool enable) {
144
150
  }
145
151
 
146
152
  } // namespace grpc_core
153
+ #else
154
+ namespace grpc_core {
155
+ void PrintExperimentsList() {}
156
+ void ForceEnableExperiment(absl::string_view experiment_name, bool) {
157
+ Crash(absl::StrCat("ForceEnableExperiment(\"", experiment_name,
158
+ "\") called in final build"));
159
+ }
160
+ } // namespace grpc_core
161
+ #endif
@@ -12,8 +12,8 @@
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
14
 
15
- #ifndef GRPC_CORE_LIB_EXPERIMENTS_CONFIG_H
16
- #define GRPC_CORE_LIB_EXPERIMENTS_CONFIG_H
15
+ #ifndef GRPC_SRC_CORE_LIB_EXPERIMENTS_CONFIG_H
16
+ #define GRPC_SRC_CORE_LIB_EXPERIMENTS_CONFIG_H
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
@@ -21,12 +21,16 @@
21
21
 
22
22
  #include "absl/strings/string_view.h"
23
23
 
24
+ // #define GRPC_EXPERIMENTS_ARE_FINAL
25
+
24
26
  namespace grpc_core {
25
27
 
28
+ #ifndef GRPC_EXPERIMENTS_ARE_FINAL
26
29
  // Return true if experiment \a experiment_id is enabled.
27
30
  // Experiments are numbered by their order in the g_experiment_metadata array
28
31
  // declared in experiments.h.
29
32
  bool IsExperimentEnabled(size_t experiment_id);
33
+ #endif
30
34
 
31
35
  // Print out a list of all experiments that are built into this binary.
32
36
  void PrintExperimentsList();
@@ -38,6 +42,12 @@ void PrintExperimentsList();
38
42
  // If this is called twice for the same experiment, both calls must agree.
39
43
  void ForceEnableExperiment(absl::string_view experiment_name, bool enable);
40
44
 
45
+ struct ExperimentMetadata {
46
+ const char* name;
47
+ const char* description;
48
+ bool default_value;
49
+ };
50
+
41
51
  } // namespace grpc_core
42
52
 
43
- #endif // GRPC_CORE_LIB_EXPERIMENTS_CONFIG_H
53
+ #endif // GRPC_SRC_CORE_LIB_EXPERIMENTS_CONFIG_H
@@ -18,15 +18,13 @@
18
18
 
19
19
  #include "src/core/lib/experiments/experiments.h"
20
20
 
21
+ #ifndef GRPC_EXPERIMENTS_ARE_FINAL
21
22
  namespace {
22
23
  const char* const description_tcp_frame_size_tuning =
23
24
  "If set, enables TCP to use RPC size estimation made by higher layers. TCP "
24
25
  "would not indicate completion of a read operation until a specified "
25
26
  "number of bytes have been read over the socket. Buffers are also "
26
27
  "allocated according to estimated RPC sizes.";
27
- const char* const description_tcp_read_chunks =
28
- "Allocate only 8kb or 64kb chunks for TCP reads to reduce pressure on "
29
- "malloc to recycle arbitrary large blocks.";
30
28
  const char* const description_tcp_rcv_lowat =
31
29
  "Use SO_RCVLOWAT to avoid wakeups on the read path.";
32
30
  const char* const description_peer_state_based_framing =
@@ -39,9 +37,6 @@ const char* const description_memory_pressure_controller =
39
37
  "New memory pressure controller";
40
38
  const char* const description_unconstrained_max_quota_buffer_size =
41
39
  "Discard the cap on the max free pool size for one memory allocator";
42
- const char* const description_new_hpack_huffman_decoder =
43
- "New HPACK huffman decoder - should be much faster than the existing "
44
- "implementation.";
45
40
  const char* const description_event_engine_client =
46
41
  "Use EventEngine clients instead of iomgr's grpc_tcp_client";
47
42
  const char* const description_monitoring_experiment =
@@ -51,13 +46,20 @@ const char* const description_promise_based_client_call =
51
46
  "(ie when all filters in a stack are promise based)";
52
47
  const char* const description_free_large_allocator =
53
48
  "If set, return all free bytes from a \042big\042 allocator";
49
+ const char* const description_promise_based_server_call =
50
+ "If set, use the new gRPC promise based call code when it's appropriate "
51
+ "(ie when all filters in a stack are promise based)";
52
+ const char* const description_transport_supplies_client_latency =
53
+ "If set, use the transport represented value for client latency in "
54
+ "opencensus";
55
+ const char* const description_event_engine_listener =
56
+ "Use EventEngine listeners instead of iomgr's grpc_tcp_server";
54
57
  } // namespace
55
58
 
56
59
  namespace grpc_core {
57
60
 
58
61
  const ExperimentMetadata g_experiment_metadata[] = {
59
62
  {"tcp_frame_size_tuning", description_tcp_frame_size_tuning, false},
60
- {"tcp_read_chunks", description_tcp_read_chunks, true},
61
63
  {"tcp_rcv_lowat", description_tcp_rcv_lowat, false},
62
64
  {"peer_state_based_framing", description_peer_state_based_framing, false},
63
65
  {"flow_control_fixes", description_flow_control_fixes, true},
@@ -65,11 +67,15 @@ const ExperimentMetadata g_experiment_metadata[] = {
65
67
  false},
66
68
  {"unconstrained_max_quota_buffer_size",
67
69
  description_unconstrained_max_quota_buffer_size, false},
68
- {"new_hpack_huffman_decoder", description_new_hpack_huffman_decoder, true},
69
70
  {"event_engine_client", description_event_engine_client, false},
70
71
  {"monitoring_experiment", description_monitoring_experiment, true},
71
72
  {"promise_based_client_call", description_promise_based_client_call, false},
72
73
  {"free_large_allocator", description_free_large_allocator, false},
74
+ {"promise_based_server_call", description_promise_based_server_call, false},
75
+ {"transport_supplies_client_latency",
76
+ description_transport_supplies_client_latency, false},
77
+ {"event_engine_listener", description_event_engine_listener, false},
73
78
  };
74
79
 
75
80
  } // namespace grpc_core
81
+ #endif