grpc 1.60.0 → 1.62.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (889) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +397 -332
  3. data/include/grpc/event_engine/event_engine.h +25 -16
  4. data/include/grpc/event_engine/extensible.h +68 -0
  5. data/include/grpc/event_engine/internal/memory_allocator_impl.h +6 -0
  6. data/include/grpc/event_engine/internal/slice_cast.h +12 -0
  7. data/include/grpc/event_engine/memory_allocator.h +3 -1
  8. data/include/grpc/event_engine/slice.h +5 -0
  9. data/include/grpc/grpc_security.h +22 -1
  10. data/include/grpc/impl/call.h +29 -0
  11. data/include/grpc/impl/channel_arg_names.h +12 -1
  12. data/include/grpc/impl/slice_type.h +1 -1
  13. data/include/grpc/module.modulemap +1 -0
  14. data/include/grpc/support/port_platform.h +12 -20
  15. data/src/core/{ext/filters/client_channel → client_channel}/backend_metric.cc +3 -3
  16. data/src/core/{ext/filters/client_channel → client_channel}/backend_metric.h +4 -4
  17. data/src/core/{ext/filters/client_channel → client_channel}/backup_poller.cc +1 -1
  18. data/src/core/{ext/filters/client_channel → client_channel}/backup_poller.h +3 -3
  19. data/src/core/{ext/filters/client_channel → client_channel}/channel_connectivity.cc +11 -11
  20. data/src/core/{ext/filters/client_channel → client_channel}/client_channel_channelz.cc +1 -1
  21. data/src/core/{ext/filters/client_channel → client_channel}/client_channel_channelz.h +3 -3
  22. data/src/core/{ext/filters/client_channel → client_channel}/client_channel_factory.cc +1 -1
  23. data/src/core/{ext/filters/client_channel → client_channel}/client_channel_factory.h +4 -4
  24. data/src/core/{ext/filters/client_channel/client_channel.cc → client_channel/client_channel_filter.cc} +278 -236
  25. data/src/core/{ext/filters/client_channel/client_channel.h → client_channel/client_channel_filter.h} +42 -42
  26. data/src/core/{ext/filters/client_channel → client_channel}/client_channel_internal.h +8 -6
  27. data/src/core/{ext/filters/client_channel → client_channel}/client_channel_plugin.cc +5 -5
  28. data/src/core/{ext/filters/client_channel → client_channel}/client_channel_service_config.cc +2 -2
  29. data/src/core/{ext/filters/client_channel → client_channel}/client_channel_service_config.h +5 -5
  30. data/src/core/{ext/filters/client_channel → client_channel}/config_selector.cc +1 -1
  31. data/src/core/{ext/filters/client_channel → client_channel}/config_selector.h +5 -5
  32. data/src/core/{ext/filters/client_channel → client_channel}/connector.h +3 -3
  33. data/src/core/{ext/filters/client_channel → client_channel}/dynamic_filters.cc +1 -1
  34. data/src/core/{ext/filters/client_channel → client_channel}/dynamic_filters.h +3 -3
  35. data/src/core/{ext/filters/client_channel → client_channel}/global_subchannel_pool.cc +3 -3
  36. data/src/core/{ext/filters/client_channel → client_channel}/global_subchannel_pool.h +4 -4
  37. data/src/core/{ext/filters/client_channel → client_channel}/http_proxy_mapper.cc +1 -1
  38. data/src/core/{ext/filters/client_channel → client_channel}/http_proxy_mapper.h +3 -3
  39. data/src/core/{ext/filters/client_channel → client_channel}/local_subchannel_pool.cc +2 -2
  40. data/src/core/{ext/filters/client_channel → client_channel}/local_subchannel_pool.h +4 -4
  41. data/src/core/{ext/filters/client_channel → client_channel}/retry_filter.cc +9 -8
  42. data/src/core/{ext/filters/client_channel → client_channel}/retry_filter.h +8 -8
  43. data/src/core/{ext/filters/client_channel → client_channel}/retry_filter_legacy_call_data.cc +12 -9
  44. data/src/core/{ext/filters/client_channel → client_channel}/retry_filter_legacy_call_data.h +11 -10
  45. data/src/core/{ext/filters/client_channel → client_channel}/retry_service_config.cc +1 -1
  46. data/src/core/{ext/filters/client_channel → client_channel}/retry_service_config.h +4 -4
  47. data/src/core/{ext/filters/client_channel → client_channel}/retry_throttle.cc +1 -1
  48. data/src/core/{ext/filters/client_channel → client_channel}/retry_throttle.h +3 -3
  49. data/src/core/{ext/filters/client_channel → client_channel}/service_config_channel_arg_filter.cc +39 -21
  50. data/src/core/{ext/filters/client_channel → client_channel}/subchannel.cc +2 -2
  51. data/src/core/{ext/filters/client_channel → client_channel}/subchannel.h +6 -6
  52. data/src/core/{ext/filters/client_channel → client_channel}/subchannel_interface_internal.h +5 -5
  53. data/src/core/{ext/filters/client_channel → client_channel}/subchannel_pool_interface.cc +1 -1
  54. data/src/core/{ext/filters/client_channel → client_channel}/subchannel_pool_interface.h +3 -3
  55. data/src/core/{ext/filters/client_channel → client_channel}/subchannel_stream_client.cc +1 -1
  56. data/src/core/{ext/filters/client_channel → client_channel}/subchannel_stream_client.h +4 -4
  57. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +55 -8
  58. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +20 -6
  59. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +10 -13
  60. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -10
  61. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +326 -0
  62. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +143 -0
  63. data/src/core/ext/filters/deadline/deadline_filter.cc +12 -0
  64. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +18 -14
  65. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +13 -4
  66. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +1 -1
  67. data/src/core/ext/filters/http/client/http_client_filter.cc +23 -32
  68. data/src/core/ext/filters/http/client/http_client_filter.h +10 -5
  69. data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
  70. data/src/core/ext/filters/http/client_authority_filter.h +12 -4
  71. data/src/core/ext/filters/http/http_filters_plugin.cc +42 -20
  72. data/src/core/ext/filters/http/message_compress/compression_filter.cc +55 -80
  73. data/src/core/ext/filters/http/message_compress/compression_filter.h +54 -12
  74. data/src/core/ext/filters/http/message_compress/legacy_compression_filter.cc +325 -0
  75. data/src/core/ext/filters/http/message_compress/legacy_compression_filter.h +139 -0
  76. data/src/core/ext/filters/http/server/http_server_filter.cc +41 -41
  77. data/src/core/ext/filters/http/server/http_server_filter.h +11 -4
  78. data/src/core/ext/filters/message_size/message_size_filter.cc +57 -77
  79. data/src/core/ext/filters/message_size/message_size_filter.h +36 -24
  80. data/src/core/ext/filters/rbac/rbac_filter.cc +16 -12
  81. data/src/core/ext/filters/rbac/rbac_filter.h +11 -4
  82. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
  83. data/src/core/ext/filters/server_config_selector/server_config_selector.h +2 -2
  84. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +27 -15
  85. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +48 -51
  86. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +22 -5
  87. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +1 -1
  88. data/src/core/ext/transport/chttp2/alpn/alpn.cc +5 -2
  89. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  90. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +1 -1
  91. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +11 -2
  92. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +67 -145
  93. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -3
  94. data/src/core/ext/transport/chttp2/transport/flow_control.cc +21 -82
  95. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -8
  96. data/src/core/ext/transport/chttp2/transport/frame.cc +506 -0
  97. data/src/core/ext/transport/chttp2/transport/frame.h +214 -0
  98. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -1
  99. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +33 -79
  100. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -7
  101. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +5 -0
  102. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -1
  103. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +3 -1
  104. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +122 -32
  105. data/src/core/ext/transport/chttp2/transport/http2_settings.h +142 -37
  106. data/src/core/ext/transport/chttp2/transport/internal.h +1 -22
  107. data/src/core/ext/transport/chttp2/transport/parsing.cc +23 -37
  108. data/src/core/ext/transport/chttp2/transport/writing.cc +26 -58
  109. data/src/core/ext/transport/inproc/inproc_transport.cc +179 -13
  110. data/src/core/ext/transport/inproc/inproc_transport.h +8 -0
  111. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +351 -164
  112. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.c +89 -50
  113. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.h +2 -0
  114. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +47 -3
  115. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +15 -7
  116. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb.h +32 -3
  117. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb_minitable.c +8 -5
  118. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb.h +28 -0
  119. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb_minitable.c +6 -4
  120. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +0 -1
  121. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.c +0 -1
  122. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +29 -0
  123. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.c +7 -4
  124. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb.h +17 -1
  125. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.c +4 -3
  126. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb.h +166 -0
  127. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb_minitable.c +55 -0
  128. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb_minitable.h +30 -0
  129. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +30 -0
  130. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +7 -5
  131. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb.h +99 -19
  132. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb_minitable.c +29 -12
  133. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb_minitable.h +1 -0
  134. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb.h +15 -0
  135. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb_minitable.c +4 -3
  136. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +31 -3
  137. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.c +22 -4
  138. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +91 -3
  139. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +11 -8
  140. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +30 -0
  141. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.c +7 -4
  142. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb.h +1 -0
  143. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb_minitable.c +1 -0
  144. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb.h +125 -3
  145. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.c +17 -4
  146. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb.h +19 -1
  147. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb_minitable.c +4 -3
  148. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb.h +1 -0
  149. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb_minitable.c +1 -0
  150. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +15 -0
  151. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.c +5 -2
  152. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +42 -0
  153. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +11 -8
  154. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +23 -8
  155. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.c +9 -4
  156. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +58 -16
  157. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c +14 -11
  158. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +712 -0
  159. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +151 -0
  160. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +33 -0
  161. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb.h +15 -0
  162. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb_minitable.c +7 -2
  163. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb.h +129 -0
  164. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb_minitable.c +27 -6
  165. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb_minitable.h +1 -0
  166. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +15 -0
  167. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +5 -2
  168. data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.c +60 -60
  169. data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +278 -256
  170. data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +10 -0
  171. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.c +483 -475
  172. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/filter.upbdefs.c +27 -20
  173. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/outlier_detection.upbdefs.c +17 -12
  174. data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.c +157 -161
  175. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.c +105 -97
  176. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.c +106 -102
  177. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_service.upbdefs.c +52 -0
  178. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_service.upbdefs.h +35 -0
  179. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_uri.upbdefs.c +14 -13
  180. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.c +228 -224
  181. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.c +32 -26
  182. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.h +5 -0
  183. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint.upbdefs.c +31 -28
  184. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.c +22 -19
  185. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.c +818 -813
  186. data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.c +158 -151
  187. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/dynamic_ot.upbdefs.c +27 -23
  188. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opencensus.upbdefs.c +59 -53
  189. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.c +40 -18
  190. data/src/core/ext/upbdefs-gen/envoy/data/accesslog/v3/accesslog.upbdefs.c +106 -103
  191. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/router/v3/router.upbdefs.c +16 -12
  192. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +22 -21
  193. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +265 -261
  194. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +127 -125
  195. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +188 -182
  196. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +133 -0
  197. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +50 -0
  198. data/src/core/ext/upbdefs-gen/envoy/service/status/v3/csds.upbdefs.c +57 -56
  199. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/value.upbdefs.c +27 -20
  200. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/value.upbdefs.h +5 -0
  201. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.c +10 -8
  202. data/src/core/ext/xds/certificate_provider_store.cc +2 -1
  203. data/src/core/ext/xds/certificate_provider_store.h +0 -5
  204. data/src/core/ext/xds/xds_api.cc +92 -166
  205. data/src/core/ext/xds/xds_api.h +4 -9
  206. data/src/core/ext/xds/xds_bootstrap.h +6 -4
  207. data/src/core/ext/xds/xds_bootstrap_grpc.cc +4 -15
  208. data/src/core/ext/xds/xds_bootstrap_grpc.h +2 -1
  209. data/src/core/ext/xds/xds_certificate_provider.cc +88 -287
  210. data/src/core/ext/xds/xds_certificate_provider.h +44 -111
  211. data/src/core/ext/xds/xds_client.cc +526 -468
  212. data/src/core/ext/xds/xds_client.h +50 -36
  213. data/src/core/ext/xds/xds_client_grpc.cc +56 -16
  214. data/src/core/ext/xds/xds_client_grpc.h +4 -1
  215. data/src/core/ext/xds/xds_client_stats.cc +11 -11
  216. data/src/core/ext/xds/xds_client_stats.h +8 -13
  217. data/src/core/ext/xds/xds_cluster.cc +105 -12
  218. data/src/core/ext/xds/xds_cluster.h +10 -2
  219. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +9 -5
  220. data/src/core/ext/xds/xds_common_types.cc +14 -10
  221. data/src/core/ext/xds/xds_endpoint.cc +9 -4
  222. data/src/core/ext/xds/xds_endpoint.h +6 -2
  223. data/src/core/ext/xds/xds_health_status.cc +12 -2
  224. data/src/core/ext/xds/xds_health_status.h +5 -3
  225. data/src/core/ext/xds/xds_http_rbac_filter.cc +5 -3
  226. data/src/core/ext/xds/xds_lb_policy_registry.cc +1 -1
  227. data/src/core/ext/xds/xds_listener.cc +14 -8
  228. data/src/core/ext/xds/xds_resource_type_impl.h +6 -4
  229. data/src/core/ext/xds/xds_route_config.cc +35 -23
  230. data/src/core/ext/xds/xds_route_config.h +1 -0
  231. data/src/core/ext/xds/xds_server_config_fetcher.cc +63 -59
  232. data/src/core/ext/xds/xds_transport.h +3 -0
  233. data/src/core/ext/xds/xds_transport_grpc.cc +52 -55
  234. data/src/core/ext/xds/xds_transport_grpc.h +4 -0
  235. data/src/core/lib/channel/call_tracer.cc +12 -0
  236. data/src/core/lib/channel/call_tracer.h +17 -3
  237. data/src/core/lib/channel/channel_args.cc +24 -14
  238. data/src/core/lib/channel/channel_args.h +89 -14
  239. data/src/core/lib/channel/channel_stack.cc +27 -0
  240. data/src/core/lib/channel/channel_stack.h +10 -10
  241. data/src/core/lib/channel/connected_channel.cc +77 -30
  242. data/src/core/lib/channel/promise_based_filter.cc +4 -4
  243. data/src/core/lib/channel/promise_based_filter.h +1040 -1
  244. data/src/core/lib/channel/server_call_tracer_filter.cc +43 -35
  245. data/src/core/lib/compression/compression_internal.cc +0 -3
  246. data/src/core/lib/config/core_configuration.h +3 -3
  247. data/src/core/lib/event_engine/ares_resolver.cc +141 -73
  248. data/src/core/lib/event_engine/ares_resolver.h +9 -10
  249. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +4 -0
  250. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +8 -1
  251. data/src/core/lib/event_engine/extensions/can_track_errors.h +40 -0
  252. data/src/core/lib/event_engine/extensions/supports_fd.h +160 -0
  253. data/src/core/lib/event_engine/forkable.cc +7 -5
  254. data/src/core/lib/event_engine/posix.h +11 -122
  255. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +132 -0
  256. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +57 -0
  257. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +31 -7
  258. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +1 -0
  259. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +54 -39
  260. data/src/core/lib/event_engine/posix_engine/posix_engine.h +6 -12
  261. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +14 -6
  262. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +21 -3
  263. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +9 -2
  264. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +7 -0
  265. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +17 -27
  266. data/src/core/lib/event_engine/posix_engine/timer_manager.h +0 -3
  267. data/src/core/lib/event_engine/query_extensions.h +85 -0
  268. data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +55 -0
  269. data/src/core/lib/event_engine/shim.cc +3 -17
  270. data/src/core/lib/event_engine/shim.h +0 -2
  271. data/src/core/lib/event_engine/thread_pool/thread_count.cc +28 -7
  272. data/src/core/lib/event_engine/thread_pool/thread_count.h +6 -1
  273. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +109 -5
  274. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +9 -0
  275. data/src/core/lib/event_engine/utils.cc +2 -1
  276. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +1 -0
  277. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +115 -0
  278. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.h +51 -0
  279. data/src/core/lib/event_engine/windows/windows_engine.cc +7 -7
  280. data/src/core/lib/experiments/config.cc +23 -2
  281. data/src/core/lib/experiments/config.h +9 -0
  282. data/src/core/lib/experiments/experiments.cc +296 -378
  283. data/src/core/lib/experiments/experiments.h +64 -162
  284. data/src/core/lib/gpr/posix/sync.cc +2 -2
  285. data/src/core/lib/gpr/posix/time.cc +0 -5
  286. data/src/core/lib/gpr/windows/sync.cc +2 -2
  287. data/src/core/lib/gprpp/debug_location.h +15 -0
  288. data/src/core/lib/gprpp/down_cast.h +49 -0
  289. data/src/core/lib/gprpp/dual_ref_counted.h +36 -7
  290. data/src/core/lib/gprpp/linux/env.cc +1 -19
  291. data/src/core/lib/gprpp/load_file.cc +2 -1
  292. data/src/core/lib/gprpp/load_file.h +2 -1
  293. data/src/core/lib/gprpp/orphanable.h +27 -0
  294. data/src/core/lib/gprpp/posix/thd.cc +27 -2
  295. data/src/core/lib/gprpp/ref_counted.h +63 -22
  296. data/src/core/lib/gprpp/ref_counted_ptr.h +70 -27
  297. data/src/core/lib/gprpp/ref_counted_string.h +13 -0
  298. data/src/core/lib/gprpp/status_helper.cc +1 -2
  299. data/src/core/lib/gprpp/thd.h +8 -0
  300. data/src/core/lib/gprpp/time.h +4 -3
  301. data/src/core/lib/gprpp/windows/directory_reader.cc +1 -0
  302. data/src/core/lib/gprpp/windows/thd.cc +10 -1
  303. data/src/core/lib/iomgr/combiner.cc +16 -52
  304. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +51 -14
  305. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +16 -0
  306. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -2
  307. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +2 -2
  308. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -3
  309. data/src/core/lib/iomgr/tcp_server_posix.cc +65 -50
  310. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -0
  311. data/src/core/lib/json/json_writer.cc +1 -1
  312. data/src/core/lib/promise/activity.cc +17 -2
  313. data/src/core/lib/promise/activity.h +13 -6
  314. data/src/core/lib/promise/all_ok.h +80 -0
  315. data/src/core/lib/promise/context.h +45 -7
  316. data/src/core/lib/promise/detail/join_state.h +2077 -0
  317. data/src/core/lib/promise/detail/promise_factory.h +1 -0
  318. data/src/core/lib/promise/detail/promise_like.h +8 -1
  319. data/src/core/lib/promise/detail/seq_state.h +3458 -150
  320. data/src/core/lib/promise/detail/status.h +42 -5
  321. data/src/core/lib/promise/for_each.h +13 -4
  322. data/src/core/lib/promise/if.h +4 -0
  323. data/src/core/lib/promise/interceptor_list.h +13 -5
  324. data/src/core/lib/promise/latch.h +9 -6
  325. data/src/core/lib/promise/party.cc +45 -31
  326. data/src/core/lib/promise/party.h +176 -9
  327. data/src/core/lib/promise/pipe.h +2 -7
  328. data/src/core/lib/promise/poll.h +39 -13
  329. data/src/core/lib/promise/promise.h +4 -0
  330. data/src/core/lib/promise/seq.h +107 -7
  331. data/src/core/lib/promise/sleep.cc +1 -1
  332. data/src/core/lib/promise/status_flag.h +226 -0
  333. data/src/core/lib/promise/try_join.h +132 -0
  334. data/src/core/lib/promise/try_seq.h +132 -10
  335. data/src/core/lib/resource_quota/arena.h +2 -2
  336. data/src/core/lib/resource_quota/memory_quota.cc +61 -12
  337. data/src/core/lib/resource_quota/memory_quota.h +6 -0
  338. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +14 -11
  339. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +14 -5
  340. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -0
  341. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -0
  342. data/src/core/lib/security/credentials/external/external_account_credentials.cc +28 -20
  343. data/src/core/lib/security/credentials/external/external_account_credentials.h +4 -0
  344. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +9 -11
  345. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -0
  346. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -0
  347. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +4 -0
  348. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +11 -10
  349. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +9 -7
  350. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -1
  351. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -1
  352. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +16 -24
  353. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +0 -3
  354. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +12 -0
  355. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +22 -5
  356. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +1 -5
  357. data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -0
  358. data/src/core/lib/security/credentials/xds/xds_credentials.cc +22 -29
  359. data/src/core/lib/security/credentials/xds/xds_credentials.h +2 -4
  360. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
  361. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +3 -7
  362. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  363. data/src/core/lib/security/security_connector/ssl_utils.cc +26 -17
  364. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -3
  365. data/src/core/lib/security/transport/auth_filters.h +71 -4
  366. data/src/core/lib/security/transport/client_auth_filter.cc +2 -4
  367. data/src/core/lib/security/transport/legacy_server_auth_filter.cc +244 -0
  368. data/src/core/lib/security/transport/security_handshaker.cc +0 -8
  369. data/src/core/lib/security/transport/security_handshaker.h +0 -6
  370. data/src/core/lib/security/transport/server_auth_filter.cc +70 -90
  371. data/src/core/lib/slice/slice_buffer.h +6 -1
  372. data/src/core/lib/surface/builtins.cc +1 -1
  373. data/src/core/lib/surface/call.cc +783 -210
  374. data/src/core/lib/surface/call.h +26 -13
  375. data/src/core/lib/surface/call_trace.cc +46 -5
  376. data/src/core/lib/surface/channel.cc +15 -25
  377. data/src/core/lib/surface/channel.h +4 -26
  378. data/src/core/lib/surface/channel_init.cc +81 -7
  379. data/src/core/lib/surface/channel_init.h +129 -5
  380. data/src/core/lib/surface/init.cc +15 -9
  381. data/src/core/lib/surface/server.cc +255 -239
  382. data/src/core/lib/surface/server.h +26 -54
  383. data/src/core/lib/surface/version.cc +2 -2
  384. data/src/core/lib/surface/wait_for_cq_end_op.cc +75 -0
  385. data/src/core/lib/surface/wait_for_cq_end_op.h +72 -0
  386. data/src/core/lib/transport/batch_builder.cc +2 -3
  387. data/src/core/lib/transport/batch_builder.h +1 -1
  388. data/src/core/lib/transport/call_factory.cc +41 -0
  389. data/src/core/lib/transport/call_factory.h +56 -0
  390. data/src/core/lib/transport/call_filters.cc +371 -0
  391. data/src/core/lib/transport/call_filters.h +1500 -0
  392. data/src/core/lib/transport/call_final_info.cc +38 -0
  393. data/src/core/lib/transport/call_final_info.h +54 -0
  394. data/src/core/lib/transport/call_size_estimator.cc +41 -0
  395. data/src/core/lib/transport/call_size_estimator.h +52 -0
  396. data/src/core/lib/transport/call_spine.cc +107 -0
  397. data/src/core/lib/transport/call_spine.h +429 -0
  398. data/src/core/lib/transport/connectivity_state.cc +3 -2
  399. data/src/core/lib/transport/connectivity_state.h +4 -0
  400. data/src/core/lib/transport/handshaker.cc +0 -8
  401. data/src/core/lib/transport/handshaker.h +0 -7
  402. data/src/core/lib/transport/message.cc +45 -0
  403. data/src/core/lib/transport/message.h +61 -0
  404. data/src/core/lib/transport/metadata.cc +37 -0
  405. data/src/core/lib/transport/metadata.h +78 -0
  406. data/src/core/lib/transport/metadata_batch.cc +4 -2
  407. data/src/core/lib/transport/metadata_batch.h +6 -6
  408. data/src/core/lib/transport/transport.cc +3 -57
  409. data/src/core/lib/transport/transport.h +23 -102
  410. data/src/core/load_balancing/address_filtering.cc +108 -0
  411. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/address_filtering.h +7 -6
  412. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/backend_metric_data.h +3 -3
  413. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/child_policy_handler.cc +6 -5
  414. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/child_policy_handler.h +4 -4
  415. data/src/core/{lib/load_balancing → load_balancing}/delegating_helper.h +5 -5
  416. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/endpoint_list.cc +18 -21
  417. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/endpoint_list.h +14 -11
  418. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/grpclb/client_load_reporting_filter.cc +2 -2
  419. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/grpclb/client_load_reporting_filter.h +3 -3
  420. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/grpclb/grpclb.cc +158 -111
  421. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/grpclb/grpclb.h +3 -3
  422. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/grpclb/grpclb_balancer_addresses.cc +1 -1
  423. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/grpclb/grpclb_balancer_addresses.h +4 -4
  424. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/grpclb/grpclb_client_stats.cc +1 -1
  425. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/grpclb/grpclb_client_stats.h +3 -3
  426. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/grpclb/load_balancer_api.cc +1 -1
  427. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/grpclb/load_balancer_api.h +4 -4
  428. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/health_check_client.cc +15 -10
  429. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/health_check_client.h +4 -4
  430. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/health_check_client_internal.h +7 -7
  431. data/src/core/{lib/load_balancing → load_balancing}/lb_policy.cc +1 -1
  432. data/src/core/{lib/load_balancing → load_balancing}/lb_policy.h +7 -7
  433. data/src/core/{lib/load_balancing → load_balancing}/lb_policy_factory.h +4 -4
  434. data/src/core/{lib/load_balancing → load_balancing}/lb_policy_registry.cc +2 -2
  435. data/src/core/{lib/load_balancing → load_balancing}/lb_policy_registry.h +5 -5
  436. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/oob_backend_metric.cc +15 -10
  437. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/oob_backend_metric.h +5 -5
  438. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/oob_backend_metric_internal.h +8 -8
  439. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/outlier_detection/outlier_detection.cc +20 -21
  440. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/outlier_detection/outlier_detection.h +3 -3
  441. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/pick_first/pick_first.cc +100 -99
  442. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/pick_first/pick_first.h +4 -4
  443. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/priority/priority.cc +13 -11
  444. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/ring_hash/ring_hash.cc +20 -23
  445. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/ring_hash/ring_hash.h +4 -4
  446. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/rls/rls.cc +51 -29
  447. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/round_robin/round_robin.cc +32 -35
  448. data/src/core/{lib/load_balancing → load_balancing}/subchannel_interface.h +3 -3
  449. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/subchannel_list.h +17 -17
  450. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/weighted_round_robin/static_stride_scheduler.cc +1 -1
  451. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/weighted_round_robin/static_stride_scheduler.h +3 -3
  452. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/weighted_round_robin/weighted_round_robin.cc +47 -45
  453. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/weighted_target/weighted_target.cc +18 -16
  454. data/src/core/load_balancing/xds/cds.cc +757 -0
  455. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/xds/xds_channel_args.h +4 -4
  456. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/xds/xds_cluster_impl.cc +241 -131
  457. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/xds/xds_cluster_manager.cc +15 -13
  458. data/src/core/load_balancing/xds/xds_override_host.cc +1313 -0
  459. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/xds/xds_override_host.h +6 -10
  460. data/src/core/{ext/filters/client_channel/lb_policy → load_balancing}/xds/xds_wrr_locality.cc +13 -14
  461. data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -0
  462. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -3
  463. data/src/core/{ext/filters/client_channel/resolver → resolver}/binder/binder_resolver.cc +3 -3
  464. data/src/core/{ext/filters/client_channel/resolver → resolver}/dns/c_ares/dns_resolver_ares.cc +11 -10
  465. data/src/core/{ext/filters/client_channel/resolver → resolver}/dns/c_ares/dns_resolver_ares.h +3 -3
  466. data/src/core/{ext/filters/client_channel/resolver → resolver}/dns/c_ares/grpc_ares_ev_driver.h +4 -4
  467. data/src/core/{ext/filters/client_channel/resolver → resolver}/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  468. data/src/core/{ext/filters/client_channel/resolver → resolver}/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -2
  469. data/src/core/{ext/filters/client_channel/resolver → resolver}/dns/c_ares/grpc_ares_wrapper.cc +2 -2
  470. data/src/core/{ext/filters/client_channel/resolver → resolver}/dns/c_ares/grpc_ares_wrapper.h +4 -4
  471. data/src/core/{ext/filters/client_channel/resolver → resolver}/dns/c_ares/grpc_ares_wrapper_posix.cc +1 -1
  472. data/src/core/{ext/filters/client_channel/resolver → resolver}/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -2
  473. data/src/core/{ext/filters/client_channel/resolver → resolver}/dns/dns_resolver_plugin.cc +7 -5
  474. data/src/core/{ext/filters/client_channel/resolver → resolver}/dns/dns_resolver_plugin.h +3 -3
  475. data/src/core/{ext/filters/client_channel/resolver → resolver}/dns/event_engine/event_engine_client_channel_resolver.cc +12 -10
  476. data/src/core/{ext/filters/client_channel/resolver → resolver}/dns/event_engine/event_engine_client_channel_resolver.h +5 -5
  477. data/src/core/{ext/filters/client_channel/resolver → resolver}/dns/event_engine/service_config_helper.cc +1 -1
  478. data/src/core/{ext/filters/client_channel/resolver → resolver}/dns/event_engine/service_config_helper.h +3 -3
  479. data/src/core/{ext/filters/client_channel/resolver → resolver}/dns/native/dns_resolver.cc +4 -4
  480. data/src/core/{ext/filters/client_channel/resolver → resolver}/dns/native/dns_resolver.h +3 -3
  481. data/src/core/{lib/resolver → resolver}/endpoint_addresses.cc +1 -2
  482. data/src/core/{lib/resolver → resolver}/endpoint_addresses.h +51 -3
  483. data/src/core/{ext/filters/client_channel/resolver → resolver}/fake/fake_resolver.cc +4 -4
  484. data/src/core/{ext/filters/client_channel/resolver → resolver}/fake/fake_resolver.h +4 -4
  485. data/src/core/{ext/filters/client_channel/resolver → resolver}/google_c2p/google_c2p_resolver.cc +5 -5
  486. data/src/core/{ext/filters/client_channel/resolver → resolver}/polling_resolver.cc +9 -11
  487. data/src/core/{ext/filters/client_channel/resolver → resolver}/polling_resolver.h +5 -5
  488. data/src/core/{lib/resolver → resolver}/resolver.cc +1 -1
  489. data/src/core/{lib/resolver → resolver}/resolver.h +6 -6
  490. data/src/core/{lib/resolver → resolver}/resolver_factory.h +4 -4
  491. data/src/core/{lib/resolver → resolver}/resolver_registry.cc +1 -1
  492. data/src/core/{lib/resolver → resolver}/resolver_registry.h +5 -5
  493. data/src/core/{lib/resolver → resolver}/server_address.h +4 -4
  494. data/src/core/{ext/filters/client_channel/resolver → resolver}/sockaddr/sockaddr_resolver.cc +3 -3
  495. data/src/core/resolver/xds/xds_dependency_manager.cc +1031 -0
  496. data/src/core/resolver/xds/xds_dependency_manager.h +277 -0
  497. data/src/core/{ext/filters/client_channel/resolver → resolver}/xds/xds_resolver.cc +136 -278
  498. data/src/core/{ext/filters/client_channel/resolver/xds/xds_resolver.h → resolver/xds/xds_resolver_attributes.h} +6 -5
  499. data/src/core/resolver/xds/xds_resolver_trace.cc +25 -0
  500. data/src/core/resolver/xds/xds_resolver_trace.h +30 -0
  501. data/src/core/{lib/service_config → service_config}/service_config.h +4 -4
  502. data/src/core/{lib/service_config → service_config}/service_config_call_data.h +5 -5
  503. data/src/core/{lib/service_config → service_config}/service_config_impl.cc +2 -2
  504. data/src/core/{lib/service_config → service_config}/service_config_impl.h +5 -5
  505. data/src/core/{lib/service_config → service_config}/service_config_parser.cc +1 -1
  506. data/src/core/{lib/service_config → service_config}/service_config_parser.h +3 -3
  507. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  508. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  509. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
  510. data/src/core/tsi/fake_transport_security.cc +1 -1
  511. data/src/core/tsi/ssl_transport_security.cc +65 -43
  512. data/src/ruby/ext/grpc/extconf.rb +0 -1
  513. data/src/ruby/ext/grpc/rb_channel.c +11 -5
  514. data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
  515. data/src/ruby/ext/grpc/rb_event_thread.c +9 -3
  516. data/src/ruby/ext/grpc/rb_grpc.c +0 -1
  517. data/src/ruby/ext/grpc/rb_grpc.h +0 -2
  518. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  519. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  520. data/src/ruby/lib/grpc/version.rb +1 -1
  521. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +8 -103
  522. data/third_party/abseil-cpp/absl/algorithm/container.h +57 -71
  523. data/third_party/abseil-cpp/absl/base/attributes.h +51 -12
  524. data/third_party/abseil-cpp/absl/base/call_once.h +15 -9
  525. data/third_party/abseil-cpp/absl/base/casts.h +1 -1
  526. data/third_party/abseil-cpp/absl/base/config.h +91 -24
  527. data/third_party/abseil-cpp/absl/base/internal/endian.h +13 -12
  528. data/third_party/abseil-cpp/absl/base/internal/identity.h +4 -2
  529. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +19 -18
  530. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +1 -1
  531. data/third_party/abseil-cpp/absl/base/internal/nullability_impl.h +106 -0
  532. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +9 -11
  533. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +2 -0
  534. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +17 -4
  535. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +20 -0
  536. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +10 -4
  537. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +13 -6
  538. data/third_party/abseil-cpp/absl/base/log_severity.cc +1 -0
  539. data/third_party/abseil-cpp/absl/base/log_severity.h +23 -10
  540. data/third_party/abseil-cpp/absl/base/no_destructor.h +217 -0
  541. data/third_party/abseil-cpp/absl/base/nullability.h +224 -0
  542. data/third_party/abseil-cpp/absl/base/optimization.h +1 -0
  543. data/third_party/abseil-cpp/absl/base/options.h +27 -1
  544. data/third_party/abseil-cpp/absl/base/prefetch.h +25 -14
  545. data/third_party/abseil-cpp/absl/base/thread_annotations.h +0 -2
  546. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +3 -3
  547. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +1 -1
  548. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +4 -2
  549. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +13 -9
  550. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -12
  551. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +12 -1
  552. data/third_party/abseil-cpp/absl/container/internal/layout.h +6 -21
  553. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +11 -2
  554. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +148 -31
  555. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +717 -278
  556. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +26 -2
  557. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +6 -0
  558. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +34 -5
  559. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +6 -3
  560. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +4 -2
  561. data/third_party/abseil-cpp/absl/crc/internal/{crc_memcpy_x86_64.cc → crc_memcpy_x86_arm_combined.cc} +65 -47
  562. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +10 -2
  563. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +4 -2
  564. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +24 -0
  565. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +35 -33
  566. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +41 -17
  567. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +108 -44
  568. data/third_party/abseil-cpp/absl/flags/declare.h +0 -5
  569. data/third_party/abseil-cpp/absl/flags/flag.h +1 -10
  570. data/third_party/abseil-cpp/absl/flags/internal/flag.h +0 -5
  571. data/third_party/abseil-cpp/absl/flags/marshalling.cc +10 -1
  572. data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -1
  573. data/third_party/abseil-cpp/absl/functional/function_ref.h +8 -0
  574. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +2 -2
  575. data/third_party/abseil-cpp/absl/hash/internal/hash.h +49 -2
  576. data/third_party/abseil-cpp/absl/numeric/bits.h +37 -18
  577. data/third_party/abseil-cpp/absl/random/distributions.h +1 -1
  578. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +248 -0
  579. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +55 -14
  580. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +53 -2
  581. data/third_party/abseil-cpp/absl/status/status.cc +36 -238
  582. data/third_party/abseil-cpp/absl/status/status.h +95 -53
  583. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +1 -3
  584. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +3 -2
  585. data/third_party/abseil-cpp/absl/status/statusor.cc +5 -2
  586. data/third_party/abseil-cpp/absl/status/statusor.h +43 -3
  587. data/third_party/abseil-cpp/absl/strings/ascii.cc +84 -12
  588. data/third_party/abseil-cpp/absl/strings/ascii.h +8 -6
  589. data/third_party/abseil-cpp/absl/strings/charconv.cc +19 -12
  590. data/third_party/abseil-cpp/absl/strings/charconv.h +6 -3
  591. data/third_party/abseil-cpp/absl/strings/charset.h +164 -0
  592. data/third_party/abseil-cpp/absl/strings/cord.cc +266 -69
  593. data/third_party/abseil-cpp/absl/strings/cord.h +138 -92
  594. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +19 -33
  595. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +4 -3
  596. data/third_party/abseil-cpp/absl/strings/escaping.cc +5 -4
  597. data/third_party/abseil-cpp/absl/strings/has_absl_stringify.h +63 -0
  598. data/third_party/abseil-cpp/absl/strings/has_ostream_operator.h +42 -0
  599. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +0 -6
  600. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +19 -45
  601. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +23 -28
  602. data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +15 -26
  603. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +12 -4
  604. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +145 -8
  605. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +72 -24
  606. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +17 -1
  607. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +7 -4
  608. data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +8 -3
  609. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +10 -4
  610. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +5 -4
  611. data/third_party/abseil-cpp/absl/strings/match.cc +3 -0
  612. data/third_party/abseil-cpp/absl/strings/numbers.cc +396 -153
  613. data/third_party/abseil-cpp/absl/strings/numbers.h +193 -35
  614. data/third_party/abseil-cpp/absl/strings/str_cat.cc +151 -21
  615. data/third_party/abseil-cpp/absl/strings/str_cat.h +127 -25
  616. data/third_party/abseil-cpp/absl/strings/str_format.h +30 -20
  617. data/third_party/abseil-cpp/absl/strings/str_join.h +16 -16
  618. data/third_party/abseil-cpp/absl/strings/str_replace.cc +12 -3
  619. data/third_party/abseil-cpp/absl/strings/str_replace.h +8 -5
  620. data/third_party/abseil-cpp/absl/strings/str_split.cc +8 -6
  621. data/third_party/abseil-cpp/absl/strings/str_split.h +18 -0
  622. data/third_party/abseil-cpp/absl/strings/string_view.cc +26 -5
  623. data/third_party/abseil-cpp/absl/strings/string_view.h +91 -26
  624. data/third_party/abseil-cpp/absl/strings/strip.h +5 -2
  625. data/third_party/abseil-cpp/absl/strings/substitute.cc +12 -4
  626. data/third_party/abseil-cpp/absl/strings/substitute.h +103 -91
  627. data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.h +2 -2
  628. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -0
  629. data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.h +4 -2
  630. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +296 -332
  631. data/third_party/abseil-cpp/absl/synchronization/mutex.h +89 -34
  632. data/third_party/abseil-cpp/absl/time/civil_time.h +26 -0
  633. data/third_party/abseil-cpp/absl/time/clock.h +5 -1
  634. data/third_party/abseil-cpp/absl/time/duration.cc +3 -3
  635. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +2 -2
  636. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
  637. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +9 -14
  638. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +0 -8
  639. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +18 -0
  640. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +18 -0
  641. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  642. data/third_party/abseil-cpp/absl/types/optional.h +3 -2
  643. data/third_party/abseil-cpp/absl/types/span.h +9 -4
  644. data/third_party/abseil-cpp/absl/utility/utility.h +11 -93
  645. data/third_party/boringssl-with-bazel/err_data.c +278 -276
  646. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +1 -1
  647. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -9
  648. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +8 -21
  649. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
  650. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +19 -1
  651. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +1 -1
  652. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +11 -3
  653. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +4 -1
  654. data/third_party/boringssl-with-bazel/src/crypto/asn1/posix_time.c +1 -1
  655. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +3 -3
  656. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -6
  657. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +4 -13
  658. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +1 -6
  659. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +27 -4
  660. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -4
  661. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -4
  662. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +8 -0
  663. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +1 -11
  664. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +7 -8
  665. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +42 -12
  666. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +0 -22
  667. data/third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c +9 -9
  668. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +34 -1
  669. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +49 -3
  670. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +30 -42
  671. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +87 -96
  672. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +5 -1
  673. data/third_party/boringssl-with-bazel/src/crypto/cpu_intel.c +4 -2
  674. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
  675. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +4 -0
  676. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -2
  677. data/third_party/boringssl-with-bazel/src/crypto/des/des.c +105 -31
  678. data/third_party/boringssl-with-bazel/src/crypto/des/internal.h +10 -81
  679. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +2 -15
  680. data/third_party/boringssl-with-bazel/src/crypto/engine/engine.c +1 -9
  681. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +1 -5
  682. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +2 -5
  683. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +1 -4
  684. data/third_party/boringssl-with-bazel/src/crypto/evp/p_hkdf.c +1 -2
  685. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -3
  686. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +2 -2
  687. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/add.c +2 -8
  688. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +1 -1
  689. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +26 -17
  690. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +1 -1
  691. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +4 -2
  692. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +26 -5
  693. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c +10 -41
  694. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +49 -2
  695. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +26 -0
  696. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +27 -26
  697. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +2 -6
  698. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +1 -8
  699. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +8 -2
  700. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -2
  701. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +11 -24
  702. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aesccm.c +43 -50
  703. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +2 -6
  704. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +4 -0
  705. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +1 -2
  706. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +16 -9
  707. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +7 -6
  708. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +2 -7
  709. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +51 -13
  710. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +17 -0
  711. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +5 -2
  712. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +1 -2
  713. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +1 -3
  714. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +6 -5
  715. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +1 -2
  716. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +153 -6
  717. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +87 -7
  718. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +39 -5
  719. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +32 -5
  720. data/third_party/boringssl-with-bazel/src/crypto/internal.h +254 -54
  721. data/third_party/boringssl-with-bazel/src/crypto/keccak/internal.h +70 -0
  722. data/third_party/boringssl-with-bazel/src/crypto/{kyber → keccak}/keccak.c +124 -49
  723. data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +8 -39
  724. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +39 -29
  725. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +3 -6
  726. data/third_party/boringssl-with-bazel/src/crypto/mem.c +17 -33
  727. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +36 -16
  728. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +0 -3
  729. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +31 -0
  730. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +2 -4
  731. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +3 -3
  732. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +9 -13
  733. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +3 -6
  734. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c +4 -0
  735. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +3 -1
  736. data/third_party/boringssl-with-bazel/src/crypto/spx/address.c +101 -0
  737. data/third_party/boringssl-with-bazel/src/crypto/spx/address.h +50 -0
  738. data/third_party/boringssl-with-bazel/src/crypto/spx/fors.c +133 -0
  739. data/third_party/boringssl-with-bazel/src/crypto/spx/fors.h +54 -0
  740. data/third_party/boringssl-with-bazel/src/crypto/spx/internal.h +79 -0
  741. data/third_party/boringssl-with-bazel/src/crypto/spx/merkle.c +150 -0
  742. data/third_party/boringssl-with-bazel/src/crypto/spx/merkle.h +61 -0
  743. data/third_party/boringssl-with-bazel/src/crypto/spx/params.h +71 -0
  744. data/third_party/boringssl-with-bazel/src/crypto/spx/spx.c +139 -0
  745. data/third_party/boringssl-with-bazel/src/crypto/spx/spx_util.c +53 -0
  746. data/third_party/boringssl-with-bazel/src/crypto/spx/spx_util.h +44 -0
  747. data/third_party/boringssl-with-bazel/src/crypto/spx/thash.c +136 -0
  748. data/third_party/boringssl-with-bazel/src/crypto/spx/thash.h +70 -0
  749. data/third_party/boringssl-with-bazel/src/crypto/spx/wots.c +135 -0
  750. data/third_party/boringssl-with-bazel/src/crypto/spx/wots.h +45 -0
  751. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +4 -9
  752. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +10 -22
  753. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +3 -6
  754. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +12 -36
  755. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +1 -2
  756. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +0 -2
  757. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +14 -9
  758. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +23 -33
  759. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +225 -51
  760. data/third_party/boringssl-with-bazel/src/crypto/x509/policy.c +2 -6
  761. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +6 -2
  762. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +1 -1
  763. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +1 -4
  764. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -3
  765. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_akey.c +1 -1
  766. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_akeya.c +3 -1
  767. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_alt.c +5 -6
  768. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_bcons.c +1 -1
  769. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_bitst.c +1 -1
  770. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_conf.c +0 -2
  771. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_cpols.c +1 -1
  772. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_crld.c +1 -2
  773. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_enum.c +1 -0
  774. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_extku.c +1 -1
  775. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_genn.c +12 -12
  776. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_ia5.c +1 -1
  777. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_info.c +4 -6
  778. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_int.c +1 -1
  779. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_lib.c +3 -2
  780. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_ncons.c +2 -2
  781. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_ocsp.c +1 -1
  782. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_pcons.c +1 -1
  783. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_pmaps.c +1 -1
  784. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_prn.c +3 -4
  785. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_purp.c +92 -335
  786. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_skey.c +1 -2
  787. data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/v3_utl.c +20 -18
  788. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +35 -32
  789. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +44 -59
  790. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +0 -1
  791. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +107 -255
  792. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +32 -20
  793. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +25 -152
  794. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +0 -1
  795. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +330 -944
  796. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +93 -215
  797. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +28 -6
  798. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
  799. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -129
  800. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +7 -8
  801. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +46 -50
  802. data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c +2 -0
  803. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +1 -4
  804. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +6 -6
  805. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +0 -21
  806. data/third_party/boringssl-with-bazel/src/include/openssl/asm_base.h +5 -6
  807. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +3 -1
  808. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +24 -0
  809. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +14 -5
  810. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +22 -0
  811. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +1 -0
  812. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +4 -1
  813. data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +2 -2
  814. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +0 -13
  815. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +33 -11
  816. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -1
  817. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +5 -4
  818. data/third_party/boringssl-with-bazel/src/include/openssl/kyber.h +26 -18
  819. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +13 -6
  820. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +5 -1
  821. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +1 -0
  822. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +19 -5
  823. data/third_party/boringssl-with-bazel/src/include/openssl/posix_time.h +45 -0
  824. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +5 -0
  825. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +20 -3
  826. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +18 -20
  827. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +76 -60
  828. data/third_party/boringssl-with-bazel/src/include/openssl/target.h +31 -6
  829. data/third_party/boringssl-with-bazel/src/include/openssl/time.h +3 -22
  830. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -1
  831. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +2806 -941
  832. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +38 -1025
  833. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3_errors.h +124 -0
  834. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +1 -2
  835. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +82 -9
  836. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +42 -4
  837. data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -0
  838. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +4 -5
  839. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +9 -1
  840. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +0 -1
  841. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +5 -1
  842. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -1
  843. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_adx.h +4 -2
  844. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +21 -0
  845. data/third_party/cares/config_linux/ares_config.h +2 -38
  846. data/third_party/upb/upb/reflection/def_pool.h +2 -2
  847. data/third_party/zlib/adler32.c +5 -27
  848. data/third_party/zlib/compress.c +5 -16
  849. data/third_party/zlib/crc32.c +86 -162
  850. data/third_party/zlib/deflate.c +233 -336
  851. data/third_party/zlib/deflate.h +8 -8
  852. data/third_party/zlib/gzguts.h +11 -12
  853. data/third_party/zlib/infback.c +7 -23
  854. data/third_party/zlib/inffast.c +1 -4
  855. data/third_party/zlib/inffast.h +1 -1
  856. data/third_party/zlib/inflate.c +30 -99
  857. data/third_party/zlib/inftrees.c +6 -11
  858. data/third_party/zlib/inftrees.h +3 -3
  859. data/third_party/zlib/trees.c +224 -302
  860. data/third_party/zlib/uncompr.c +4 -12
  861. data/third_party/zlib/zconf.h +6 -2
  862. data/third_party/zlib/zlib.h +191 -188
  863. data/third_party/zlib/zutil.c +16 -44
  864. data/third_party/zlib/zutil.h +10 -10
  865. metadata +241 -184
  866. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +0 -75
  867. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +0 -711
  868. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +0 -1173
  869. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +0 -922
  870. data/src/core/lib/event_engine/memory_allocator.cc +0 -74
  871. data/src/core/lib/iomgr/load_file.cc +0 -78
  872. data/src/core/lib/iomgr/load_file.h +0 -35
  873. data/src/core/lib/transport/pid_controller.cc +0 -51
  874. data/src/core/lib/transport/pid_controller.h +0 -116
  875. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +0 -137
  876. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +0 -280
  877. data/third_party/abseil-cpp/absl/flags/flag.cc +0 -38
  878. data/third_party/abseil-cpp/absl/flags/internal/flag_msvc.inc +0 -116
  879. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +0 -158
  880. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +0 -773
  881. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +0 -607
  882. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +0 -118
  883. data/third_party/boringssl-with-bazel/src/crypto/x509/x_info.c +0 -100
  884. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +0 -111
  885. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +0 -197
  886. data/third_party/upb/upb/collections/array.h +0 -17
  887. data/third_party/upb/upb/collections/map.h +0 -17
  888. data/third_party/upb/upb/upb.hpp +0 -18
  889. /data/third_party/boringssl-with-bazel/src/crypto/{x509v3 → x509}/ext_dat.h +0 -0
@@ -0,0 +1,2077 @@
1
+ // Copyright 2023 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef GRPC_SRC_CORE_LIB_PROMISE_DETAIL_JOIN_STATE_H
16
+ #define GRPC_SRC_CORE_LIB_PROMISE_DETAIL_JOIN_STATE_H
17
+
18
+ // This file is generated by tools/codegen/core/gen_seq.py
19
+
20
+ #include <grpc/support/port_platform.h>
21
+
22
+ #include <tuple>
23
+ #include <type_traits>
24
+ #include <utility>
25
+
26
+ #include <grpc/support/log.h>
27
+
28
+ #include "src/core/lib/gprpp/bitset.h"
29
+ #include "src/core/lib/gprpp/construct_destruct.h"
30
+ #include "src/core/lib/promise/detail/promise_like.h"
31
+ #include "src/core/lib/promise/poll.h"
32
+ #include "src/core/lib/promise/trace.h"
33
+
34
+ namespace grpc_core {
35
+ namespace promise_detail {
36
+ template <class Traits, typename... Ps>
37
+ struct JoinState;
38
+
39
+ template <class Traits, typename P0, typename P1>
40
+ struct JoinState<Traits, P0, P1> {
41
+ template <typename T>
42
+ using UnwrappedType = decltype(Traits::Unwrapped(std::declval<T>()));
43
+ using Promise0 = PromiseLike<P0>;
44
+ using Result0 = UnwrappedType<typename Promise0::Result>;
45
+ union {
46
+ GPR_NO_UNIQUE_ADDRESS Promise0 promise0;
47
+ GPR_NO_UNIQUE_ADDRESS Result0 result0;
48
+ };
49
+ using Promise1 = PromiseLike<P1>;
50
+ using Result1 = UnwrappedType<typename Promise1::Result>;
51
+ union {
52
+ GPR_NO_UNIQUE_ADDRESS Promise1 promise1;
53
+ GPR_NO_UNIQUE_ADDRESS Result1 result1;
54
+ };
55
+ GPR_NO_UNIQUE_ADDRESS BitSet<2> ready;
56
+ JoinState(P0&& p0, P1&& p1) {
57
+ Construct(&promise0, std::forward<P0>(p0));
58
+ Construct(&promise1, std::forward<P1>(p1));
59
+ }
60
+ JoinState(const JoinState& other) {
61
+ GPR_ASSERT(other.ready.none());
62
+ Construct(&promise0, other.promise0);
63
+ Construct(&promise1, other.promise1);
64
+ }
65
+ JoinState& operator=(const JoinState& other) = delete;
66
+ JoinState& operator=(JoinState&& other) = delete;
67
+ JoinState(JoinState&& other) noexcept : ready(other.ready) {
68
+ if (ready.is_set(0)) {
69
+ Construct(&result0, std::move(other.result0));
70
+ } else {
71
+ Construct(&promise0, std::move(other.promise0));
72
+ }
73
+ if (ready.is_set(1)) {
74
+ Construct(&result1, std::move(other.result1));
75
+ } else {
76
+ Construct(&promise1, std::move(other.promise1));
77
+ }
78
+ }
79
+ ~JoinState() {
80
+ if (ready.is_set(0)) {
81
+ Destruct(&result0);
82
+ } else {
83
+ Destruct(&promise0);
84
+ }
85
+ if (ready.is_set(1)) {
86
+ Destruct(&result1);
87
+ } else {
88
+ Destruct(&promise1);
89
+ }
90
+ }
91
+ using Result =
92
+ typename Traits::template ResultType<std::tuple<Result0, Result1>>;
93
+ Poll<Result> PollOnce() {
94
+ if (!ready.is_set(0)) {
95
+ if (grpc_trace_promise_primitives.enabled()) {
96
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 1/2", this);
97
+ }
98
+ auto poll = promise0();
99
+ if (grpc_trace_promise_primitives.enabled()) {
100
+ auto* p = poll.value_if_ready();
101
+ gpr_log(GPR_DEBUG, "join[%p]: joint 1/2 %s", this,
102
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
103
+ : "pending");
104
+ }
105
+ if (auto* p = poll.value_if_ready()) {
106
+ if (Traits::IsOk(*p)) {
107
+ ready.set(0);
108
+ Destruct(&promise0);
109
+ Construct(&result0, Traits::Unwrapped(std::move(*p)));
110
+ } else {
111
+ return Traits::template EarlyReturn<Result>(std::move(*p));
112
+ }
113
+ }
114
+ } else if (grpc_trace_promise_primitives.enabled()) {
115
+ gpr_log(GPR_DEBUG, "join[%p]: joint 1/2 already ready", this);
116
+ }
117
+ if (!ready.is_set(1)) {
118
+ if (grpc_trace_promise_primitives.enabled()) {
119
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 2/2", this);
120
+ }
121
+ auto poll = promise1();
122
+ if (grpc_trace_promise_primitives.enabled()) {
123
+ auto* p = poll.value_if_ready();
124
+ gpr_log(GPR_DEBUG, "join[%p]: joint 2/2 %s", this,
125
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
126
+ : "pending");
127
+ }
128
+ if (auto* p = poll.value_if_ready()) {
129
+ if (Traits::IsOk(*p)) {
130
+ ready.set(1);
131
+ Destruct(&promise1);
132
+ Construct(&result1, Traits::Unwrapped(std::move(*p)));
133
+ } else {
134
+ return Traits::template EarlyReturn<Result>(std::move(*p));
135
+ }
136
+ }
137
+ } else if (grpc_trace_promise_primitives.enabled()) {
138
+ gpr_log(GPR_DEBUG, "join[%p]: joint 2/2 already ready", this);
139
+ }
140
+ if (ready.all()) {
141
+ return Traits::FinalReturn(std::move(result0), std::move(result1));
142
+ }
143
+ return Pending{};
144
+ }
145
+ };
146
+
147
+ template <class Traits, typename P0, typename P1, typename P2>
148
+ struct JoinState<Traits, P0, P1, P2> {
149
+ template <typename T>
150
+ using UnwrappedType = decltype(Traits::Unwrapped(std::declval<T>()));
151
+ using Promise0 = PromiseLike<P0>;
152
+ using Result0 = UnwrappedType<typename Promise0::Result>;
153
+ union {
154
+ GPR_NO_UNIQUE_ADDRESS Promise0 promise0;
155
+ GPR_NO_UNIQUE_ADDRESS Result0 result0;
156
+ };
157
+ using Promise1 = PromiseLike<P1>;
158
+ using Result1 = UnwrappedType<typename Promise1::Result>;
159
+ union {
160
+ GPR_NO_UNIQUE_ADDRESS Promise1 promise1;
161
+ GPR_NO_UNIQUE_ADDRESS Result1 result1;
162
+ };
163
+ using Promise2 = PromiseLike<P2>;
164
+ using Result2 = UnwrappedType<typename Promise2::Result>;
165
+ union {
166
+ GPR_NO_UNIQUE_ADDRESS Promise2 promise2;
167
+ GPR_NO_UNIQUE_ADDRESS Result2 result2;
168
+ };
169
+ GPR_NO_UNIQUE_ADDRESS BitSet<3> ready;
170
+ JoinState(P0&& p0, P1&& p1, P2&& p2) {
171
+ Construct(&promise0, std::forward<P0>(p0));
172
+ Construct(&promise1, std::forward<P1>(p1));
173
+ Construct(&promise2, std::forward<P2>(p2));
174
+ }
175
+ JoinState(const JoinState& other) {
176
+ GPR_ASSERT(other.ready.none());
177
+ Construct(&promise0, other.promise0);
178
+ Construct(&promise1, other.promise1);
179
+ Construct(&promise2, other.promise2);
180
+ }
181
+ JoinState& operator=(const JoinState& other) = delete;
182
+ JoinState& operator=(JoinState&& other) = delete;
183
+ JoinState(JoinState&& other) noexcept : ready(other.ready) {
184
+ if (ready.is_set(0)) {
185
+ Construct(&result0, std::move(other.result0));
186
+ } else {
187
+ Construct(&promise0, std::move(other.promise0));
188
+ }
189
+ if (ready.is_set(1)) {
190
+ Construct(&result1, std::move(other.result1));
191
+ } else {
192
+ Construct(&promise1, std::move(other.promise1));
193
+ }
194
+ if (ready.is_set(2)) {
195
+ Construct(&result2, std::move(other.result2));
196
+ } else {
197
+ Construct(&promise2, std::move(other.promise2));
198
+ }
199
+ }
200
+ ~JoinState() {
201
+ if (ready.is_set(0)) {
202
+ Destruct(&result0);
203
+ } else {
204
+ Destruct(&promise0);
205
+ }
206
+ if (ready.is_set(1)) {
207
+ Destruct(&result1);
208
+ } else {
209
+ Destruct(&promise1);
210
+ }
211
+ if (ready.is_set(2)) {
212
+ Destruct(&result2);
213
+ } else {
214
+ Destruct(&promise2);
215
+ }
216
+ }
217
+ using Result = typename Traits::template ResultType<
218
+ std::tuple<Result0, Result1, Result2>>;
219
+ Poll<Result> PollOnce() {
220
+ if (!ready.is_set(0)) {
221
+ if (grpc_trace_promise_primitives.enabled()) {
222
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 1/3", this);
223
+ }
224
+ auto poll = promise0();
225
+ if (grpc_trace_promise_primitives.enabled()) {
226
+ auto* p = poll.value_if_ready();
227
+ gpr_log(GPR_DEBUG, "join[%p]: joint 1/3 %s", this,
228
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
229
+ : "pending");
230
+ }
231
+ if (auto* p = poll.value_if_ready()) {
232
+ if (Traits::IsOk(*p)) {
233
+ ready.set(0);
234
+ Destruct(&promise0);
235
+ Construct(&result0, Traits::Unwrapped(std::move(*p)));
236
+ } else {
237
+ return Traits::template EarlyReturn<Result>(std::move(*p));
238
+ }
239
+ }
240
+ } else if (grpc_trace_promise_primitives.enabled()) {
241
+ gpr_log(GPR_DEBUG, "join[%p]: joint 1/3 already ready", this);
242
+ }
243
+ if (!ready.is_set(1)) {
244
+ if (grpc_trace_promise_primitives.enabled()) {
245
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 2/3", this);
246
+ }
247
+ auto poll = promise1();
248
+ if (grpc_trace_promise_primitives.enabled()) {
249
+ auto* p = poll.value_if_ready();
250
+ gpr_log(GPR_DEBUG, "join[%p]: joint 2/3 %s", this,
251
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
252
+ : "pending");
253
+ }
254
+ if (auto* p = poll.value_if_ready()) {
255
+ if (Traits::IsOk(*p)) {
256
+ ready.set(1);
257
+ Destruct(&promise1);
258
+ Construct(&result1, Traits::Unwrapped(std::move(*p)));
259
+ } else {
260
+ return Traits::template EarlyReturn<Result>(std::move(*p));
261
+ }
262
+ }
263
+ } else if (grpc_trace_promise_primitives.enabled()) {
264
+ gpr_log(GPR_DEBUG, "join[%p]: joint 2/3 already ready", this);
265
+ }
266
+ if (!ready.is_set(2)) {
267
+ if (grpc_trace_promise_primitives.enabled()) {
268
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 3/3", this);
269
+ }
270
+ auto poll = promise2();
271
+ if (grpc_trace_promise_primitives.enabled()) {
272
+ auto* p = poll.value_if_ready();
273
+ gpr_log(GPR_DEBUG, "join[%p]: joint 3/3 %s", this,
274
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
275
+ : "pending");
276
+ }
277
+ if (auto* p = poll.value_if_ready()) {
278
+ if (Traits::IsOk(*p)) {
279
+ ready.set(2);
280
+ Destruct(&promise2);
281
+ Construct(&result2, Traits::Unwrapped(std::move(*p)));
282
+ } else {
283
+ return Traits::template EarlyReturn<Result>(std::move(*p));
284
+ }
285
+ }
286
+ } else if (grpc_trace_promise_primitives.enabled()) {
287
+ gpr_log(GPR_DEBUG, "join[%p]: joint 3/3 already ready", this);
288
+ }
289
+ if (ready.all()) {
290
+ return Traits::FinalReturn(std::move(result0), std::move(result1),
291
+ std::move(result2));
292
+ }
293
+ return Pending{};
294
+ }
295
+ };
296
+
297
+ template <class Traits, typename P0, typename P1, typename P2, typename P3>
298
+ struct JoinState<Traits, P0, P1, P2, P3> {
299
+ template <typename T>
300
+ using UnwrappedType = decltype(Traits::Unwrapped(std::declval<T>()));
301
+ using Promise0 = PromiseLike<P0>;
302
+ using Result0 = UnwrappedType<typename Promise0::Result>;
303
+ union {
304
+ GPR_NO_UNIQUE_ADDRESS Promise0 promise0;
305
+ GPR_NO_UNIQUE_ADDRESS Result0 result0;
306
+ };
307
+ using Promise1 = PromiseLike<P1>;
308
+ using Result1 = UnwrappedType<typename Promise1::Result>;
309
+ union {
310
+ GPR_NO_UNIQUE_ADDRESS Promise1 promise1;
311
+ GPR_NO_UNIQUE_ADDRESS Result1 result1;
312
+ };
313
+ using Promise2 = PromiseLike<P2>;
314
+ using Result2 = UnwrappedType<typename Promise2::Result>;
315
+ union {
316
+ GPR_NO_UNIQUE_ADDRESS Promise2 promise2;
317
+ GPR_NO_UNIQUE_ADDRESS Result2 result2;
318
+ };
319
+ using Promise3 = PromiseLike<P3>;
320
+ using Result3 = UnwrappedType<typename Promise3::Result>;
321
+ union {
322
+ GPR_NO_UNIQUE_ADDRESS Promise3 promise3;
323
+ GPR_NO_UNIQUE_ADDRESS Result3 result3;
324
+ };
325
+ GPR_NO_UNIQUE_ADDRESS BitSet<4> ready;
326
+ JoinState(P0&& p0, P1&& p1, P2&& p2, P3&& p3) {
327
+ Construct(&promise0, std::forward<P0>(p0));
328
+ Construct(&promise1, std::forward<P1>(p1));
329
+ Construct(&promise2, std::forward<P2>(p2));
330
+ Construct(&promise3, std::forward<P3>(p3));
331
+ }
332
+ JoinState(const JoinState& other) {
333
+ GPR_ASSERT(other.ready.none());
334
+ Construct(&promise0, other.promise0);
335
+ Construct(&promise1, other.promise1);
336
+ Construct(&promise2, other.promise2);
337
+ Construct(&promise3, other.promise3);
338
+ }
339
+ JoinState& operator=(const JoinState& other) = delete;
340
+ JoinState& operator=(JoinState&& other) = delete;
341
+ JoinState(JoinState&& other) noexcept : ready(other.ready) {
342
+ if (ready.is_set(0)) {
343
+ Construct(&result0, std::move(other.result0));
344
+ } else {
345
+ Construct(&promise0, std::move(other.promise0));
346
+ }
347
+ if (ready.is_set(1)) {
348
+ Construct(&result1, std::move(other.result1));
349
+ } else {
350
+ Construct(&promise1, std::move(other.promise1));
351
+ }
352
+ if (ready.is_set(2)) {
353
+ Construct(&result2, std::move(other.result2));
354
+ } else {
355
+ Construct(&promise2, std::move(other.promise2));
356
+ }
357
+ if (ready.is_set(3)) {
358
+ Construct(&result3, std::move(other.result3));
359
+ } else {
360
+ Construct(&promise3, std::move(other.promise3));
361
+ }
362
+ }
363
+ ~JoinState() {
364
+ if (ready.is_set(0)) {
365
+ Destruct(&result0);
366
+ } else {
367
+ Destruct(&promise0);
368
+ }
369
+ if (ready.is_set(1)) {
370
+ Destruct(&result1);
371
+ } else {
372
+ Destruct(&promise1);
373
+ }
374
+ if (ready.is_set(2)) {
375
+ Destruct(&result2);
376
+ } else {
377
+ Destruct(&promise2);
378
+ }
379
+ if (ready.is_set(3)) {
380
+ Destruct(&result3);
381
+ } else {
382
+ Destruct(&promise3);
383
+ }
384
+ }
385
+ using Result = typename Traits::template ResultType<
386
+ std::tuple<Result0, Result1, Result2, Result3>>;
387
+ Poll<Result> PollOnce() {
388
+ if (!ready.is_set(0)) {
389
+ if (grpc_trace_promise_primitives.enabled()) {
390
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 1/4", this);
391
+ }
392
+ auto poll = promise0();
393
+ if (grpc_trace_promise_primitives.enabled()) {
394
+ auto* p = poll.value_if_ready();
395
+ gpr_log(GPR_DEBUG, "join[%p]: joint 1/4 %s", this,
396
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
397
+ : "pending");
398
+ }
399
+ if (auto* p = poll.value_if_ready()) {
400
+ if (Traits::IsOk(*p)) {
401
+ ready.set(0);
402
+ Destruct(&promise0);
403
+ Construct(&result0, Traits::Unwrapped(std::move(*p)));
404
+ } else {
405
+ return Traits::template EarlyReturn<Result>(std::move(*p));
406
+ }
407
+ }
408
+ } else if (grpc_trace_promise_primitives.enabled()) {
409
+ gpr_log(GPR_DEBUG, "join[%p]: joint 1/4 already ready", this);
410
+ }
411
+ if (!ready.is_set(1)) {
412
+ if (grpc_trace_promise_primitives.enabled()) {
413
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 2/4", this);
414
+ }
415
+ auto poll = promise1();
416
+ if (grpc_trace_promise_primitives.enabled()) {
417
+ auto* p = poll.value_if_ready();
418
+ gpr_log(GPR_DEBUG, "join[%p]: joint 2/4 %s", this,
419
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
420
+ : "pending");
421
+ }
422
+ if (auto* p = poll.value_if_ready()) {
423
+ if (Traits::IsOk(*p)) {
424
+ ready.set(1);
425
+ Destruct(&promise1);
426
+ Construct(&result1, Traits::Unwrapped(std::move(*p)));
427
+ } else {
428
+ return Traits::template EarlyReturn<Result>(std::move(*p));
429
+ }
430
+ }
431
+ } else if (grpc_trace_promise_primitives.enabled()) {
432
+ gpr_log(GPR_DEBUG, "join[%p]: joint 2/4 already ready", this);
433
+ }
434
+ if (!ready.is_set(2)) {
435
+ if (grpc_trace_promise_primitives.enabled()) {
436
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 3/4", this);
437
+ }
438
+ auto poll = promise2();
439
+ if (grpc_trace_promise_primitives.enabled()) {
440
+ auto* p = poll.value_if_ready();
441
+ gpr_log(GPR_DEBUG, "join[%p]: joint 3/4 %s", this,
442
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
443
+ : "pending");
444
+ }
445
+ if (auto* p = poll.value_if_ready()) {
446
+ if (Traits::IsOk(*p)) {
447
+ ready.set(2);
448
+ Destruct(&promise2);
449
+ Construct(&result2, Traits::Unwrapped(std::move(*p)));
450
+ } else {
451
+ return Traits::template EarlyReturn<Result>(std::move(*p));
452
+ }
453
+ }
454
+ } else if (grpc_trace_promise_primitives.enabled()) {
455
+ gpr_log(GPR_DEBUG, "join[%p]: joint 3/4 already ready", this);
456
+ }
457
+ if (!ready.is_set(3)) {
458
+ if (grpc_trace_promise_primitives.enabled()) {
459
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 4/4", this);
460
+ }
461
+ auto poll = promise3();
462
+ if (grpc_trace_promise_primitives.enabled()) {
463
+ auto* p = poll.value_if_ready();
464
+ gpr_log(GPR_DEBUG, "join[%p]: joint 4/4 %s", this,
465
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
466
+ : "pending");
467
+ }
468
+ if (auto* p = poll.value_if_ready()) {
469
+ if (Traits::IsOk(*p)) {
470
+ ready.set(3);
471
+ Destruct(&promise3);
472
+ Construct(&result3, Traits::Unwrapped(std::move(*p)));
473
+ } else {
474
+ return Traits::template EarlyReturn<Result>(std::move(*p));
475
+ }
476
+ }
477
+ } else if (grpc_trace_promise_primitives.enabled()) {
478
+ gpr_log(GPR_DEBUG, "join[%p]: joint 4/4 already ready", this);
479
+ }
480
+ if (ready.all()) {
481
+ return Traits::FinalReturn(std::move(result0), std::move(result1),
482
+ std::move(result2), std::move(result3));
483
+ }
484
+ return Pending{};
485
+ }
486
+ };
487
+
488
+ template <class Traits, typename P0, typename P1, typename P2, typename P3,
489
+ typename P4>
490
+ struct JoinState<Traits, P0, P1, P2, P3, P4> {
491
+ template <typename T>
492
+ using UnwrappedType = decltype(Traits::Unwrapped(std::declval<T>()));
493
+ using Promise0 = PromiseLike<P0>;
494
+ using Result0 = UnwrappedType<typename Promise0::Result>;
495
+ union {
496
+ GPR_NO_UNIQUE_ADDRESS Promise0 promise0;
497
+ GPR_NO_UNIQUE_ADDRESS Result0 result0;
498
+ };
499
+ using Promise1 = PromiseLike<P1>;
500
+ using Result1 = UnwrappedType<typename Promise1::Result>;
501
+ union {
502
+ GPR_NO_UNIQUE_ADDRESS Promise1 promise1;
503
+ GPR_NO_UNIQUE_ADDRESS Result1 result1;
504
+ };
505
+ using Promise2 = PromiseLike<P2>;
506
+ using Result2 = UnwrappedType<typename Promise2::Result>;
507
+ union {
508
+ GPR_NO_UNIQUE_ADDRESS Promise2 promise2;
509
+ GPR_NO_UNIQUE_ADDRESS Result2 result2;
510
+ };
511
+ using Promise3 = PromiseLike<P3>;
512
+ using Result3 = UnwrappedType<typename Promise3::Result>;
513
+ union {
514
+ GPR_NO_UNIQUE_ADDRESS Promise3 promise3;
515
+ GPR_NO_UNIQUE_ADDRESS Result3 result3;
516
+ };
517
+ using Promise4 = PromiseLike<P4>;
518
+ using Result4 = UnwrappedType<typename Promise4::Result>;
519
+ union {
520
+ GPR_NO_UNIQUE_ADDRESS Promise4 promise4;
521
+ GPR_NO_UNIQUE_ADDRESS Result4 result4;
522
+ };
523
+ GPR_NO_UNIQUE_ADDRESS BitSet<5> ready;
524
+ JoinState(P0&& p0, P1&& p1, P2&& p2, P3&& p3, P4&& p4) {
525
+ Construct(&promise0, std::forward<P0>(p0));
526
+ Construct(&promise1, std::forward<P1>(p1));
527
+ Construct(&promise2, std::forward<P2>(p2));
528
+ Construct(&promise3, std::forward<P3>(p3));
529
+ Construct(&promise4, std::forward<P4>(p4));
530
+ }
531
+ JoinState(const JoinState& other) {
532
+ GPR_ASSERT(other.ready.none());
533
+ Construct(&promise0, other.promise0);
534
+ Construct(&promise1, other.promise1);
535
+ Construct(&promise2, other.promise2);
536
+ Construct(&promise3, other.promise3);
537
+ Construct(&promise4, other.promise4);
538
+ }
539
+ JoinState& operator=(const JoinState& other) = delete;
540
+ JoinState& operator=(JoinState&& other) = delete;
541
+ JoinState(JoinState&& other) noexcept : ready(other.ready) {
542
+ if (ready.is_set(0)) {
543
+ Construct(&result0, std::move(other.result0));
544
+ } else {
545
+ Construct(&promise0, std::move(other.promise0));
546
+ }
547
+ if (ready.is_set(1)) {
548
+ Construct(&result1, std::move(other.result1));
549
+ } else {
550
+ Construct(&promise1, std::move(other.promise1));
551
+ }
552
+ if (ready.is_set(2)) {
553
+ Construct(&result2, std::move(other.result2));
554
+ } else {
555
+ Construct(&promise2, std::move(other.promise2));
556
+ }
557
+ if (ready.is_set(3)) {
558
+ Construct(&result3, std::move(other.result3));
559
+ } else {
560
+ Construct(&promise3, std::move(other.promise3));
561
+ }
562
+ if (ready.is_set(4)) {
563
+ Construct(&result4, std::move(other.result4));
564
+ } else {
565
+ Construct(&promise4, std::move(other.promise4));
566
+ }
567
+ }
568
+ ~JoinState() {
569
+ if (ready.is_set(0)) {
570
+ Destruct(&result0);
571
+ } else {
572
+ Destruct(&promise0);
573
+ }
574
+ if (ready.is_set(1)) {
575
+ Destruct(&result1);
576
+ } else {
577
+ Destruct(&promise1);
578
+ }
579
+ if (ready.is_set(2)) {
580
+ Destruct(&result2);
581
+ } else {
582
+ Destruct(&promise2);
583
+ }
584
+ if (ready.is_set(3)) {
585
+ Destruct(&result3);
586
+ } else {
587
+ Destruct(&promise3);
588
+ }
589
+ if (ready.is_set(4)) {
590
+ Destruct(&result4);
591
+ } else {
592
+ Destruct(&promise4);
593
+ }
594
+ }
595
+ using Result = typename Traits::template ResultType<
596
+ std::tuple<Result0, Result1, Result2, Result3, Result4>>;
597
+ Poll<Result> PollOnce() {
598
+ if (!ready.is_set(0)) {
599
+ if (grpc_trace_promise_primitives.enabled()) {
600
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 1/5", this);
601
+ }
602
+ auto poll = promise0();
603
+ if (grpc_trace_promise_primitives.enabled()) {
604
+ auto* p = poll.value_if_ready();
605
+ gpr_log(GPR_DEBUG, "join[%p]: joint 1/5 %s", this,
606
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
607
+ : "pending");
608
+ }
609
+ if (auto* p = poll.value_if_ready()) {
610
+ if (Traits::IsOk(*p)) {
611
+ ready.set(0);
612
+ Destruct(&promise0);
613
+ Construct(&result0, Traits::Unwrapped(std::move(*p)));
614
+ } else {
615
+ return Traits::template EarlyReturn<Result>(std::move(*p));
616
+ }
617
+ }
618
+ } else if (grpc_trace_promise_primitives.enabled()) {
619
+ gpr_log(GPR_DEBUG, "join[%p]: joint 1/5 already ready", this);
620
+ }
621
+ if (!ready.is_set(1)) {
622
+ if (grpc_trace_promise_primitives.enabled()) {
623
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 2/5", this);
624
+ }
625
+ auto poll = promise1();
626
+ if (grpc_trace_promise_primitives.enabled()) {
627
+ auto* p = poll.value_if_ready();
628
+ gpr_log(GPR_DEBUG, "join[%p]: joint 2/5 %s", this,
629
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
630
+ : "pending");
631
+ }
632
+ if (auto* p = poll.value_if_ready()) {
633
+ if (Traits::IsOk(*p)) {
634
+ ready.set(1);
635
+ Destruct(&promise1);
636
+ Construct(&result1, Traits::Unwrapped(std::move(*p)));
637
+ } else {
638
+ return Traits::template EarlyReturn<Result>(std::move(*p));
639
+ }
640
+ }
641
+ } else if (grpc_trace_promise_primitives.enabled()) {
642
+ gpr_log(GPR_DEBUG, "join[%p]: joint 2/5 already ready", this);
643
+ }
644
+ if (!ready.is_set(2)) {
645
+ if (grpc_trace_promise_primitives.enabled()) {
646
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 3/5", this);
647
+ }
648
+ auto poll = promise2();
649
+ if (grpc_trace_promise_primitives.enabled()) {
650
+ auto* p = poll.value_if_ready();
651
+ gpr_log(GPR_DEBUG, "join[%p]: joint 3/5 %s", this,
652
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
653
+ : "pending");
654
+ }
655
+ if (auto* p = poll.value_if_ready()) {
656
+ if (Traits::IsOk(*p)) {
657
+ ready.set(2);
658
+ Destruct(&promise2);
659
+ Construct(&result2, Traits::Unwrapped(std::move(*p)));
660
+ } else {
661
+ return Traits::template EarlyReturn<Result>(std::move(*p));
662
+ }
663
+ }
664
+ } else if (grpc_trace_promise_primitives.enabled()) {
665
+ gpr_log(GPR_DEBUG, "join[%p]: joint 3/5 already ready", this);
666
+ }
667
+ if (!ready.is_set(3)) {
668
+ if (grpc_trace_promise_primitives.enabled()) {
669
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 4/5", this);
670
+ }
671
+ auto poll = promise3();
672
+ if (grpc_trace_promise_primitives.enabled()) {
673
+ auto* p = poll.value_if_ready();
674
+ gpr_log(GPR_DEBUG, "join[%p]: joint 4/5 %s", this,
675
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
676
+ : "pending");
677
+ }
678
+ if (auto* p = poll.value_if_ready()) {
679
+ if (Traits::IsOk(*p)) {
680
+ ready.set(3);
681
+ Destruct(&promise3);
682
+ Construct(&result3, Traits::Unwrapped(std::move(*p)));
683
+ } else {
684
+ return Traits::template EarlyReturn<Result>(std::move(*p));
685
+ }
686
+ }
687
+ } else if (grpc_trace_promise_primitives.enabled()) {
688
+ gpr_log(GPR_DEBUG, "join[%p]: joint 4/5 already ready", this);
689
+ }
690
+ if (!ready.is_set(4)) {
691
+ if (grpc_trace_promise_primitives.enabled()) {
692
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 5/5", this);
693
+ }
694
+ auto poll = promise4();
695
+ if (grpc_trace_promise_primitives.enabled()) {
696
+ auto* p = poll.value_if_ready();
697
+ gpr_log(GPR_DEBUG, "join[%p]: joint 5/5 %s", this,
698
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
699
+ : "pending");
700
+ }
701
+ if (auto* p = poll.value_if_ready()) {
702
+ if (Traits::IsOk(*p)) {
703
+ ready.set(4);
704
+ Destruct(&promise4);
705
+ Construct(&result4, Traits::Unwrapped(std::move(*p)));
706
+ } else {
707
+ return Traits::template EarlyReturn<Result>(std::move(*p));
708
+ }
709
+ }
710
+ } else if (grpc_trace_promise_primitives.enabled()) {
711
+ gpr_log(GPR_DEBUG, "join[%p]: joint 5/5 already ready", this);
712
+ }
713
+ if (ready.all()) {
714
+ return Traits::FinalReturn(std::move(result0), std::move(result1),
715
+ std::move(result2), std::move(result3),
716
+ std::move(result4));
717
+ }
718
+ return Pending{};
719
+ }
720
+ };
721
+
722
+ template <class Traits, typename P0, typename P1, typename P2, typename P3,
723
+ typename P4, typename P5>
724
+ struct JoinState<Traits, P0, P1, P2, P3, P4, P5> {
725
+ template <typename T>
726
+ using UnwrappedType = decltype(Traits::Unwrapped(std::declval<T>()));
727
+ using Promise0 = PromiseLike<P0>;
728
+ using Result0 = UnwrappedType<typename Promise0::Result>;
729
+ union {
730
+ GPR_NO_UNIQUE_ADDRESS Promise0 promise0;
731
+ GPR_NO_UNIQUE_ADDRESS Result0 result0;
732
+ };
733
+ using Promise1 = PromiseLike<P1>;
734
+ using Result1 = UnwrappedType<typename Promise1::Result>;
735
+ union {
736
+ GPR_NO_UNIQUE_ADDRESS Promise1 promise1;
737
+ GPR_NO_UNIQUE_ADDRESS Result1 result1;
738
+ };
739
+ using Promise2 = PromiseLike<P2>;
740
+ using Result2 = UnwrappedType<typename Promise2::Result>;
741
+ union {
742
+ GPR_NO_UNIQUE_ADDRESS Promise2 promise2;
743
+ GPR_NO_UNIQUE_ADDRESS Result2 result2;
744
+ };
745
+ using Promise3 = PromiseLike<P3>;
746
+ using Result3 = UnwrappedType<typename Promise3::Result>;
747
+ union {
748
+ GPR_NO_UNIQUE_ADDRESS Promise3 promise3;
749
+ GPR_NO_UNIQUE_ADDRESS Result3 result3;
750
+ };
751
+ using Promise4 = PromiseLike<P4>;
752
+ using Result4 = UnwrappedType<typename Promise4::Result>;
753
+ union {
754
+ GPR_NO_UNIQUE_ADDRESS Promise4 promise4;
755
+ GPR_NO_UNIQUE_ADDRESS Result4 result4;
756
+ };
757
+ using Promise5 = PromiseLike<P5>;
758
+ using Result5 = UnwrappedType<typename Promise5::Result>;
759
+ union {
760
+ GPR_NO_UNIQUE_ADDRESS Promise5 promise5;
761
+ GPR_NO_UNIQUE_ADDRESS Result5 result5;
762
+ };
763
+ GPR_NO_UNIQUE_ADDRESS BitSet<6> ready;
764
+ JoinState(P0&& p0, P1&& p1, P2&& p2, P3&& p3, P4&& p4, P5&& p5) {
765
+ Construct(&promise0, std::forward<P0>(p0));
766
+ Construct(&promise1, std::forward<P1>(p1));
767
+ Construct(&promise2, std::forward<P2>(p2));
768
+ Construct(&promise3, std::forward<P3>(p3));
769
+ Construct(&promise4, std::forward<P4>(p4));
770
+ Construct(&promise5, std::forward<P5>(p5));
771
+ }
772
+ JoinState(const JoinState& other) {
773
+ GPR_ASSERT(other.ready.none());
774
+ Construct(&promise0, other.promise0);
775
+ Construct(&promise1, other.promise1);
776
+ Construct(&promise2, other.promise2);
777
+ Construct(&promise3, other.promise3);
778
+ Construct(&promise4, other.promise4);
779
+ Construct(&promise5, other.promise5);
780
+ }
781
+ JoinState& operator=(const JoinState& other) = delete;
782
+ JoinState& operator=(JoinState&& other) = delete;
783
+ JoinState(JoinState&& other) noexcept : ready(other.ready) {
784
+ if (ready.is_set(0)) {
785
+ Construct(&result0, std::move(other.result0));
786
+ } else {
787
+ Construct(&promise0, std::move(other.promise0));
788
+ }
789
+ if (ready.is_set(1)) {
790
+ Construct(&result1, std::move(other.result1));
791
+ } else {
792
+ Construct(&promise1, std::move(other.promise1));
793
+ }
794
+ if (ready.is_set(2)) {
795
+ Construct(&result2, std::move(other.result2));
796
+ } else {
797
+ Construct(&promise2, std::move(other.promise2));
798
+ }
799
+ if (ready.is_set(3)) {
800
+ Construct(&result3, std::move(other.result3));
801
+ } else {
802
+ Construct(&promise3, std::move(other.promise3));
803
+ }
804
+ if (ready.is_set(4)) {
805
+ Construct(&result4, std::move(other.result4));
806
+ } else {
807
+ Construct(&promise4, std::move(other.promise4));
808
+ }
809
+ if (ready.is_set(5)) {
810
+ Construct(&result5, std::move(other.result5));
811
+ } else {
812
+ Construct(&promise5, std::move(other.promise5));
813
+ }
814
+ }
815
+ ~JoinState() {
816
+ if (ready.is_set(0)) {
817
+ Destruct(&result0);
818
+ } else {
819
+ Destruct(&promise0);
820
+ }
821
+ if (ready.is_set(1)) {
822
+ Destruct(&result1);
823
+ } else {
824
+ Destruct(&promise1);
825
+ }
826
+ if (ready.is_set(2)) {
827
+ Destruct(&result2);
828
+ } else {
829
+ Destruct(&promise2);
830
+ }
831
+ if (ready.is_set(3)) {
832
+ Destruct(&result3);
833
+ } else {
834
+ Destruct(&promise3);
835
+ }
836
+ if (ready.is_set(4)) {
837
+ Destruct(&result4);
838
+ } else {
839
+ Destruct(&promise4);
840
+ }
841
+ if (ready.is_set(5)) {
842
+ Destruct(&result5);
843
+ } else {
844
+ Destruct(&promise5);
845
+ }
846
+ }
847
+ using Result = typename Traits::template ResultType<
848
+ std::tuple<Result0, Result1, Result2, Result3, Result4, Result5>>;
849
+ Poll<Result> PollOnce() {
850
+ if (!ready.is_set(0)) {
851
+ if (grpc_trace_promise_primitives.enabled()) {
852
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 1/6", this);
853
+ }
854
+ auto poll = promise0();
855
+ if (grpc_trace_promise_primitives.enabled()) {
856
+ auto* p = poll.value_if_ready();
857
+ gpr_log(GPR_DEBUG, "join[%p]: joint 1/6 %s", this,
858
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
859
+ : "pending");
860
+ }
861
+ if (auto* p = poll.value_if_ready()) {
862
+ if (Traits::IsOk(*p)) {
863
+ ready.set(0);
864
+ Destruct(&promise0);
865
+ Construct(&result0, Traits::Unwrapped(std::move(*p)));
866
+ } else {
867
+ return Traits::template EarlyReturn<Result>(std::move(*p));
868
+ }
869
+ }
870
+ } else if (grpc_trace_promise_primitives.enabled()) {
871
+ gpr_log(GPR_DEBUG, "join[%p]: joint 1/6 already ready", this);
872
+ }
873
+ if (!ready.is_set(1)) {
874
+ if (grpc_trace_promise_primitives.enabled()) {
875
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 2/6", this);
876
+ }
877
+ auto poll = promise1();
878
+ if (grpc_trace_promise_primitives.enabled()) {
879
+ auto* p = poll.value_if_ready();
880
+ gpr_log(GPR_DEBUG, "join[%p]: joint 2/6 %s", this,
881
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
882
+ : "pending");
883
+ }
884
+ if (auto* p = poll.value_if_ready()) {
885
+ if (Traits::IsOk(*p)) {
886
+ ready.set(1);
887
+ Destruct(&promise1);
888
+ Construct(&result1, Traits::Unwrapped(std::move(*p)));
889
+ } else {
890
+ return Traits::template EarlyReturn<Result>(std::move(*p));
891
+ }
892
+ }
893
+ } else if (grpc_trace_promise_primitives.enabled()) {
894
+ gpr_log(GPR_DEBUG, "join[%p]: joint 2/6 already ready", this);
895
+ }
896
+ if (!ready.is_set(2)) {
897
+ if (grpc_trace_promise_primitives.enabled()) {
898
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 3/6", this);
899
+ }
900
+ auto poll = promise2();
901
+ if (grpc_trace_promise_primitives.enabled()) {
902
+ auto* p = poll.value_if_ready();
903
+ gpr_log(GPR_DEBUG, "join[%p]: joint 3/6 %s", this,
904
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
905
+ : "pending");
906
+ }
907
+ if (auto* p = poll.value_if_ready()) {
908
+ if (Traits::IsOk(*p)) {
909
+ ready.set(2);
910
+ Destruct(&promise2);
911
+ Construct(&result2, Traits::Unwrapped(std::move(*p)));
912
+ } else {
913
+ return Traits::template EarlyReturn<Result>(std::move(*p));
914
+ }
915
+ }
916
+ } else if (grpc_trace_promise_primitives.enabled()) {
917
+ gpr_log(GPR_DEBUG, "join[%p]: joint 3/6 already ready", this);
918
+ }
919
+ if (!ready.is_set(3)) {
920
+ if (grpc_trace_promise_primitives.enabled()) {
921
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 4/6", this);
922
+ }
923
+ auto poll = promise3();
924
+ if (grpc_trace_promise_primitives.enabled()) {
925
+ auto* p = poll.value_if_ready();
926
+ gpr_log(GPR_DEBUG, "join[%p]: joint 4/6 %s", this,
927
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
928
+ : "pending");
929
+ }
930
+ if (auto* p = poll.value_if_ready()) {
931
+ if (Traits::IsOk(*p)) {
932
+ ready.set(3);
933
+ Destruct(&promise3);
934
+ Construct(&result3, Traits::Unwrapped(std::move(*p)));
935
+ } else {
936
+ return Traits::template EarlyReturn<Result>(std::move(*p));
937
+ }
938
+ }
939
+ } else if (grpc_trace_promise_primitives.enabled()) {
940
+ gpr_log(GPR_DEBUG, "join[%p]: joint 4/6 already ready", this);
941
+ }
942
+ if (!ready.is_set(4)) {
943
+ if (grpc_trace_promise_primitives.enabled()) {
944
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 5/6", this);
945
+ }
946
+ auto poll = promise4();
947
+ if (grpc_trace_promise_primitives.enabled()) {
948
+ auto* p = poll.value_if_ready();
949
+ gpr_log(GPR_DEBUG, "join[%p]: joint 5/6 %s", this,
950
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
951
+ : "pending");
952
+ }
953
+ if (auto* p = poll.value_if_ready()) {
954
+ if (Traits::IsOk(*p)) {
955
+ ready.set(4);
956
+ Destruct(&promise4);
957
+ Construct(&result4, Traits::Unwrapped(std::move(*p)));
958
+ } else {
959
+ return Traits::template EarlyReturn<Result>(std::move(*p));
960
+ }
961
+ }
962
+ } else if (grpc_trace_promise_primitives.enabled()) {
963
+ gpr_log(GPR_DEBUG, "join[%p]: joint 5/6 already ready", this);
964
+ }
965
+ if (!ready.is_set(5)) {
966
+ if (grpc_trace_promise_primitives.enabled()) {
967
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 6/6", this);
968
+ }
969
+ auto poll = promise5();
970
+ if (grpc_trace_promise_primitives.enabled()) {
971
+ auto* p = poll.value_if_ready();
972
+ gpr_log(GPR_DEBUG, "join[%p]: joint 6/6 %s", this,
973
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
974
+ : "pending");
975
+ }
976
+ if (auto* p = poll.value_if_ready()) {
977
+ if (Traits::IsOk(*p)) {
978
+ ready.set(5);
979
+ Destruct(&promise5);
980
+ Construct(&result5, Traits::Unwrapped(std::move(*p)));
981
+ } else {
982
+ return Traits::template EarlyReturn<Result>(std::move(*p));
983
+ }
984
+ }
985
+ } else if (grpc_trace_promise_primitives.enabled()) {
986
+ gpr_log(GPR_DEBUG, "join[%p]: joint 6/6 already ready", this);
987
+ }
988
+ if (ready.all()) {
989
+ return Traits::FinalReturn(std::move(result0), std::move(result1),
990
+ std::move(result2), std::move(result3),
991
+ std::move(result4), std::move(result5));
992
+ }
993
+ return Pending{};
994
+ }
995
+ };
996
+
997
+ template <class Traits, typename P0, typename P1, typename P2, typename P3,
998
+ typename P4, typename P5, typename P6>
999
+ struct JoinState<Traits, P0, P1, P2, P3, P4, P5, P6> {
1000
+ template <typename T>
1001
+ using UnwrappedType = decltype(Traits::Unwrapped(std::declval<T>()));
1002
+ using Promise0 = PromiseLike<P0>;
1003
+ using Result0 = UnwrappedType<typename Promise0::Result>;
1004
+ union {
1005
+ GPR_NO_UNIQUE_ADDRESS Promise0 promise0;
1006
+ GPR_NO_UNIQUE_ADDRESS Result0 result0;
1007
+ };
1008
+ using Promise1 = PromiseLike<P1>;
1009
+ using Result1 = UnwrappedType<typename Promise1::Result>;
1010
+ union {
1011
+ GPR_NO_UNIQUE_ADDRESS Promise1 promise1;
1012
+ GPR_NO_UNIQUE_ADDRESS Result1 result1;
1013
+ };
1014
+ using Promise2 = PromiseLike<P2>;
1015
+ using Result2 = UnwrappedType<typename Promise2::Result>;
1016
+ union {
1017
+ GPR_NO_UNIQUE_ADDRESS Promise2 promise2;
1018
+ GPR_NO_UNIQUE_ADDRESS Result2 result2;
1019
+ };
1020
+ using Promise3 = PromiseLike<P3>;
1021
+ using Result3 = UnwrappedType<typename Promise3::Result>;
1022
+ union {
1023
+ GPR_NO_UNIQUE_ADDRESS Promise3 promise3;
1024
+ GPR_NO_UNIQUE_ADDRESS Result3 result3;
1025
+ };
1026
+ using Promise4 = PromiseLike<P4>;
1027
+ using Result4 = UnwrappedType<typename Promise4::Result>;
1028
+ union {
1029
+ GPR_NO_UNIQUE_ADDRESS Promise4 promise4;
1030
+ GPR_NO_UNIQUE_ADDRESS Result4 result4;
1031
+ };
1032
+ using Promise5 = PromiseLike<P5>;
1033
+ using Result5 = UnwrappedType<typename Promise5::Result>;
1034
+ union {
1035
+ GPR_NO_UNIQUE_ADDRESS Promise5 promise5;
1036
+ GPR_NO_UNIQUE_ADDRESS Result5 result5;
1037
+ };
1038
+ using Promise6 = PromiseLike<P6>;
1039
+ using Result6 = UnwrappedType<typename Promise6::Result>;
1040
+ union {
1041
+ GPR_NO_UNIQUE_ADDRESS Promise6 promise6;
1042
+ GPR_NO_UNIQUE_ADDRESS Result6 result6;
1043
+ };
1044
+ GPR_NO_UNIQUE_ADDRESS BitSet<7> ready;
1045
+ JoinState(P0&& p0, P1&& p1, P2&& p2, P3&& p3, P4&& p4, P5&& p5, P6&& p6) {
1046
+ Construct(&promise0, std::forward<P0>(p0));
1047
+ Construct(&promise1, std::forward<P1>(p1));
1048
+ Construct(&promise2, std::forward<P2>(p2));
1049
+ Construct(&promise3, std::forward<P3>(p3));
1050
+ Construct(&promise4, std::forward<P4>(p4));
1051
+ Construct(&promise5, std::forward<P5>(p5));
1052
+ Construct(&promise6, std::forward<P6>(p6));
1053
+ }
1054
+ JoinState(const JoinState& other) {
1055
+ GPR_ASSERT(other.ready.none());
1056
+ Construct(&promise0, other.promise0);
1057
+ Construct(&promise1, other.promise1);
1058
+ Construct(&promise2, other.promise2);
1059
+ Construct(&promise3, other.promise3);
1060
+ Construct(&promise4, other.promise4);
1061
+ Construct(&promise5, other.promise5);
1062
+ Construct(&promise6, other.promise6);
1063
+ }
1064
+ JoinState& operator=(const JoinState& other) = delete;
1065
+ JoinState& operator=(JoinState&& other) = delete;
1066
+ JoinState(JoinState&& other) noexcept : ready(other.ready) {
1067
+ if (ready.is_set(0)) {
1068
+ Construct(&result0, std::move(other.result0));
1069
+ } else {
1070
+ Construct(&promise0, std::move(other.promise0));
1071
+ }
1072
+ if (ready.is_set(1)) {
1073
+ Construct(&result1, std::move(other.result1));
1074
+ } else {
1075
+ Construct(&promise1, std::move(other.promise1));
1076
+ }
1077
+ if (ready.is_set(2)) {
1078
+ Construct(&result2, std::move(other.result2));
1079
+ } else {
1080
+ Construct(&promise2, std::move(other.promise2));
1081
+ }
1082
+ if (ready.is_set(3)) {
1083
+ Construct(&result3, std::move(other.result3));
1084
+ } else {
1085
+ Construct(&promise3, std::move(other.promise3));
1086
+ }
1087
+ if (ready.is_set(4)) {
1088
+ Construct(&result4, std::move(other.result4));
1089
+ } else {
1090
+ Construct(&promise4, std::move(other.promise4));
1091
+ }
1092
+ if (ready.is_set(5)) {
1093
+ Construct(&result5, std::move(other.result5));
1094
+ } else {
1095
+ Construct(&promise5, std::move(other.promise5));
1096
+ }
1097
+ if (ready.is_set(6)) {
1098
+ Construct(&result6, std::move(other.result6));
1099
+ } else {
1100
+ Construct(&promise6, std::move(other.promise6));
1101
+ }
1102
+ }
1103
+ ~JoinState() {
1104
+ if (ready.is_set(0)) {
1105
+ Destruct(&result0);
1106
+ } else {
1107
+ Destruct(&promise0);
1108
+ }
1109
+ if (ready.is_set(1)) {
1110
+ Destruct(&result1);
1111
+ } else {
1112
+ Destruct(&promise1);
1113
+ }
1114
+ if (ready.is_set(2)) {
1115
+ Destruct(&result2);
1116
+ } else {
1117
+ Destruct(&promise2);
1118
+ }
1119
+ if (ready.is_set(3)) {
1120
+ Destruct(&result3);
1121
+ } else {
1122
+ Destruct(&promise3);
1123
+ }
1124
+ if (ready.is_set(4)) {
1125
+ Destruct(&result4);
1126
+ } else {
1127
+ Destruct(&promise4);
1128
+ }
1129
+ if (ready.is_set(5)) {
1130
+ Destruct(&result5);
1131
+ } else {
1132
+ Destruct(&promise5);
1133
+ }
1134
+ if (ready.is_set(6)) {
1135
+ Destruct(&result6);
1136
+ } else {
1137
+ Destruct(&promise6);
1138
+ }
1139
+ }
1140
+ using Result = typename Traits::template ResultType<std::tuple<
1141
+ Result0, Result1, Result2, Result3, Result4, Result5, Result6>>;
1142
+ Poll<Result> PollOnce() {
1143
+ if (!ready.is_set(0)) {
1144
+ if (grpc_trace_promise_primitives.enabled()) {
1145
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 1/7", this);
1146
+ }
1147
+ auto poll = promise0();
1148
+ if (grpc_trace_promise_primitives.enabled()) {
1149
+ auto* p = poll.value_if_ready();
1150
+ gpr_log(GPR_DEBUG, "join[%p]: joint 1/7 %s", this,
1151
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1152
+ : "pending");
1153
+ }
1154
+ if (auto* p = poll.value_if_ready()) {
1155
+ if (Traits::IsOk(*p)) {
1156
+ ready.set(0);
1157
+ Destruct(&promise0);
1158
+ Construct(&result0, Traits::Unwrapped(std::move(*p)));
1159
+ } else {
1160
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1161
+ }
1162
+ }
1163
+ } else if (grpc_trace_promise_primitives.enabled()) {
1164
+ gpr_log(GPR_DEBUG, "join[%p]: joint 1/7 already ready", this);
1165
+ }
1166
+ if (!ready.is_set(1)) {
1167
+ if (grpc_trace_promise_primitives.enabled()) {
1168
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 2/7", this);
1169
+ }
1170
+ auto poll = promise1();
1171
+ if (grpc_trace_promise_primitives.enabled()) {
1172
+ auto* p = poll.value_if_ready();
1173
+ gpr_log(GPR_DEBUG, "join[%p]: joint 2/7 %s", this,
1174
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1175
+ : "pending");
1176
+ }
1177
+ if (auto* p = poll.value_if_ready()) {
1178
+ if (Traits::IsOk(*p)) {
1179
+ ready.set(1);
1180
+ Destruct(&promise1);
1181
+ Construct(&result1, Traits::Unwrapped(std::move(*p)));
1182
+ } else {
1183
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1184
+ }
1185
+ }
1186
+ } else if (grpc_trace_promise_primitives.enabled()) {
1187
+ gpr_log(GPR_DEBUG, "join[%p]: joint 2/7 already ready", this);
1188
+ }
1189
+ if (!ready.is_set(2)) {
1190
+ if (grpc_trace_promise_primitives.enabled()) {
1191
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 3/7", this);
1192
+ }
1193
+ auto poll = promise2();
1194
+ if (grpc_trace_promise_primitives.enabled()) {
1195
+ auto* p = poll.value_if_ready();
1196
+ gpr_log(GPR_DEBUG, "join[%p]: joint 3/7 %s", this,
1197
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1198
+ : "pending");
1199
+ }
1200
+ if (auto* p = poll.value_if_ready()) {
1201
+ if (Traits::IsOk(*p)) {
1202
+ ready.set(2);
1203
+ Destruct(&promise2);
1204
+ Construct(&result2, Traits::Unwrapped(std::move(*p)));
1205
+ } else {
1206
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1207
+ }
1208
+ }
1209
+ } else if (grpc_trace_promise_primitives.enabled()) {
1210
+ gpr_log(GPR_DEBUG, "join[%p]: joint 3/7 already ready", this);
1211
+ }
1212
+ if (!ready.is_set(3)) {
1213
+ if (grpc_trace_promise_primitives.enabled()) {
1214
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 4/7", this);
1215
+ }
1216
+ auto poll = promise3();
1217
+ if (grpc_trace_promise_primitives.enabled()) {
1218
+ auto* p = poll.value_if_ready();
1219
+ gpr_log(GPR_DEBUG, "join[%p]: joint 4/7 %s", this,
1220
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1221
+ : "pending");
1222
+ }
1223
+ if (auto* p = poll.value_if_ready()) {
1224
+ if (Traits::IsOk(*p)) {
1225
+ ready.set(3);
1226
+ Destruct(&promise3);
1227
+ Construct(&result3, Traits::Unwrapped(std::move(*p)));
1228
+ } else {
1229
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1230
+ }
1231
+ }
1232
+ } else if (grpc_trace_promise_primitives.enabled()) {
1233
+ gpr_log(GPR_DEBUG, "join[%p]: joint 4/7 already ready", this);
1234
+ }
1235
+ if (!ready.is_set(4)) {
1236
+ if (grpc_trace_promise_primitives.enabled()) {
1237
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 5/7", this);
1238
+ }
1239
+ auto poll = promise4();
1240
+ if (grpc_trace_promise_primitives.enabled()) {
1241
+ auto* p = poll.value_if_ready();
1242
+ gpr_log(GPR_DEBUG, "join[%p]: joint 5/7 %s", this,
1243
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1244
+ : "pending");
1245
+ }
1246
+ if (auto* p = poll.value_if_ready()) {
1247
+ if (Traits::IsOk(*p)) {
1248
+ ready.set(4);
1249
+ Destruct(&promise4);
1250
+ Construct(&result4, Traits::Unwrapped(std::move(*p)));
1251
+ } else {
1252
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1253
+ }
1254
+ }
1255
+ } else if (grpc_trace_promise_primitives.enabled()) {
1256
+ gpr_log(GPR_DEBUG, "join[%p]: joint 5/7 already ready", this);
1257
+ }
1258
+ if (!ready.is_set(5)) {
1259
+ if (grpc_trace_promise_primitives.enabled()) {
1260
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 6/7", this);
1261
+ }
1262
+ auto poll = promise5();
1263
+ if (grpc_trace_promise_primitives.enabled()) {
1264
+ auto* p = poll.value_if_ready();
1265
+ gpr_log(GPR_DEBUG, "join[%p]: joint 6/7 %s", this,
1266
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1267
+ : "pending");
1268
+ }
1269
+ if (auto* p = poll.value_if_ready()) {
1270
+ if (Traits::IsOk(*p)) {
1271
+ ready.set(5);
1272
+ Destruct(&promise5);
1273
+ Construct(&result5, Traits::Unwrapped(std::move(*p)));
1274
+ } else {
1275
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1276
+ }
1277
+ }
1278
+ } else if (grpc_trace_promise_primitives.enabled()) {
1279
+ gpr_log(GPR_DEBUG, "join[%p]: joint 6/7 already ready", this);
1280
+ }
1281
+ if (!ready.is_set(6)) {
1282
+ if (grpc_trace_promise_primitives.enabled()) {
1283
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 7/7", this);
1284
+ }
1285
+ auto poll = promise6();
1286
+ if (grpc_trace_promise_primitives.enabled()) {
1287
+ auto* p = poll.value_if_ready();
1288
+ gpr_log(GPR_DEBUG, "join[%p]: joint 7/7 %s", this,
1289
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1290
+ : "pending");
1291
+ }
1292
+ if (auto* p = poll.value_if_ready()) {
1293
+ if (Traits::IsOk(*p)) {
1294
+ ready.set(6);
1295
+ Destruct(&promise6);
1296
+ Construct(&result6, Traits::Unwrapped(std::move(*p)));
1297
+ } else {
1298
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1299
+ }
1300
+ }
1301
+ } else if (grpc_trace_promise_primitives.enabled()) {
1302
+ gpr_log(GPR_DEBUG, "join[%p]: joint 7/7 already ready", this);
1303
+ }
1304
+ if (ready.all()) {
1305
+ return Traits::FinalReturn(std::move(result0), std::move(result1),
1306
+ std::move(result2), std::move(result3),
1307
+ std::move(result4), std::move(result5),
1308
+ std::move(result6));
1309
+ }
1310
+ return Pending{};
1311
+ }
1312
+ };
1313
+
1314
+ template <class Traits, typename P0, typename P1, typename P2, typename P3,
1315
+ typename P4, typename P5, typename P6, typename P7>
1316
+ struct JoinState<Traits, P0, P1, P2, P3, P4, P5, P6, P7> {
1317
+ template <typename T>
1318
+ using UnwrappedType = decltype(Traits::Unwrapped(std::declval<T>()));
1319
+ using Promise0 = PromiseLike<P0>;
1320
+ using Result0 = UnwrappedType<typename Promise0::Result>;
1321
+ union {
1322
+ GPR_NO_UNIQUE_ADDRESS Promise0 promise0;
1323
+ GPR_NO_UNIQUE_ADDRESS Result0 result0;
1324
+ };
1325
+ using Promise1 = PromiseLike<P1>;
1326
+ using Result1 = UnwrappedType<typename Promise1::Result>;
1327
+ union {
1328
+ GPR_NO_UNIQUE_ADDRESS Promise1 promise1;
1329
+ GPR_NO_UNIQUE_ADDRESS Result1 result1;
1330
+ };
1331
+ using Promise2 = PromiseLike<P2>;
1332
+ using Result2 = UnwrappedType<typename Promise2::Result>;
1333
+ union {
1334
+ GPR_NO_UNIQUE_ADDRESS Promise2 promise2;
1335
+ GPR_NO_UNIQUE_ADDRESS Result2 result2;
1336
+ };
1337
+ using Promise3 = PromiseLike<P3>;
1338
+ using Result3 = UnwrappedType<typename Promise3::Result>;
1339
+ union {
1340
+ GPR_NO_UNIQUE_ADDRESS Promise3 promise3;
1341
+ GPR_NO_UNIQUE_ADDRESS Result3 result3;
1342
+ };
1343
+ using Promise4 = PromiseLike<P4>;
1344
+ using Result4 = UnwrappedType<typename Promise4::Result>;
1345
+ union {
1346
+ GPR_NO_UNIQUE_ADDRESS Promise4 promise4;
1347
+ GPR_NO_UNIQUE_ADDRESS Result4 result4;
1348
+ };
1349
+ using Promise5 = PromiseLike<P5>;
1350
+ using Result5 = UnwrappedType<typename Promise5::Result>;
1351
+ union {
1352
+ GPR_NO_UNIQUE_ADDRESS Promise5 promise5;
1353
+ GPR_NO_UNIQUE_ADDRESS Result5 result5;
1354
+ };
1355
+ using Promise6 = PromiseLike<P6>;
1356
+ using Result6 = UnwrappedType<typename Promise6::Result>;
1357
+ union {
1358
+ GPR_NO_UNIQUE_ADDRESS Promise6 promise6;
1359
+ GPR_NO_UNIQUE_ADDRESS Result6 result6;
1360
+ };
1361
+ using Promise7 = PromiseLike<P7>;
1362
+ using Result7 = UnwrappedType<typename Promise7::Result>;
1363
+ union {
1364
+ GPR_NO_UNIQUE_ADDRESS Promise7 promise7;
1365
+ GPR_NO_UNIQUE_ADDRESS Result7 result7;
1366
+ };
1367
+ GPR_NO_UNIQUE_ADDRESS BitSet<8> ready;
1368
+ JoinState(P0&& p0, P1&& p1, P2&& p2, P3&& p3, P4&& p4, P5&& p5, P6&& p6,
1369
+ P7&& p7) {
1370
+ Construct(&promise0, std::forward<P0>(p0));
1371
+ Construct(&promise1, std::forward<P1>(p1));
1372
+ Construct(&promise2, std::forward<P2>(p2));
1373
+ Construct(&promise3, std::forward<P3>(p3));
1374
+ Construct(&promise4, std::forward<P4>(p4));
1375
+ Construct(&promise5, std::forward<P5>(p5));
1376
+ Construct(&promise6, std::forward<P6>(p6));
1377
+ Construct(&promise7, std::forward<P7>(p7));
1378
+ }
1379
+ JoinState(const JoinState& other) {
1380
+ GPR_ASSERT(other.ready.none());
1381
+ Construct(&promise0, other.promise0);
1382
+ Construct(&promise1, other.promise1);
1383
+ Construct(&promise2, other.promise2);
1384
+ Construct(&promise3, other.promise3);
1385
+ Construct(&promise4, other.promise4);
1386
+ Construct(&promise5, other.promise5);
1387
+ Construct(&promise6, other.promise6);
1388
+ Construct(&promise7, other.promise7);
1389
+ }
1390
+ JoinState& operator=(const JoinState& other) = delete;
1391
+ JoinState& operator=(JoinState&& other) = delete;
1392
+ JoinState(JoinState&& other) noexcept : ready(other.ready) {
1393
+ if (ready.is_set(0)) {
1394
+ Construct(&result0, std::move(other.result0));
1395
+ } else {
1396
+ Construct(&promise0, std::move(other.promise0));
1397
+ }
1398
+ if (ready.is_set(1)) {
1399
+ Construct(&result1, std::move(other.result1));
1400
+ } else {
1401
+ Construct(&promise1, std::move(other.promise1));
1402
+ }
1403
+ if (ready.is_set(2)) {
1404
+ Construct(&result2, std::move(other.result2));
1405
+ } else {
1406
+ Construct(&promise2, std::move(other.promise2));
1407
+ }
1408
+ if (ready.is_set(3)) {
1409
+ Construct(&result3, std::move(other.result3));
1410
+ } else {
1411
+ Construct(&promise3, std::move(other.promise3));
1412
+ }
1413
+ if (ready.is_set(4)) {
1414
+ Construct(&result4, std::move(other.result4));
1415
+ } else {
1416
+ Construct(&promise4, std::move(other.promise4));
1417
+ }
1418
+ if (ready.is_set(5)) {
1419
+ Construct(&result5, std::move(other.result5));
1420
+ } else {
1421
+ Construct(&promise5, std::move(other.promise5));
1422
+ }
1423
+ if (ready.is_set(6)) {
1424
+ Construct(&result6, std::move(other.result6));
1425
+ } else {
1426
+ Construct(&promise6, std::move(other.promise6));
1427
+ }
1428
+ if (ready.is_set(7)) {
1429
+ Construct(&result7, std::move(other.result7));
1430
+ } else {
1431
+ Construct(&promise7, std::move(other.promise7));
1432
+ }
1433
+ }
1434
+ ~JoinState() {
1435
+ if (ready.is_set(0)) {
1436
+ Destruct(&result0);
1437
+ } else {
1438
+ Destruct(&promise0);
1439
+ }
1440
+ if (ready.is_set(1)) {
1441
+ Destruct(&result1);
1442
+ } else {
1443
+ Destruct(&promise1);
1444
+ }
1445
+ if (ready.is_set(2)) {
1446
+ Destruct(&result2);
1447
+ } else {
1448
+ Destruct(&promise2);
1449
+ }
1450
+ if (ready.is_set(3)) {
1451
+ Destruct(&result3);
1452
+ } else {
1453
+ Destruct(&promise3);
1454
+ }
1455
+ if (ready.is_set(4)) {
1456
+ Destruct(&result4);
1457
+ } else {
1458
+ Destruct(&promise4);
1459
+ }
1460
+ if (ready.is_set(5)) {
1461
+ Destruct(&result5);
1462
+ } else {
1463
+ Destruct(&promise5);
1464
+ }
1465
+ if (ready.is_set(6)) {
1466
+ Destruct(&result6);
1467
+ } else {
1468
+ Destruct(&promise6);
1469
+ }
1470
+ if (ready.is_set(7)) {
1471
+ Destruct(&result7);
1472
+ } else {
1473
+ Destruct(&promise7);
1474
+ }
1475
+ }
1476
+ using Result = typename Traits::template ResultType<std::tuple<
1477
+ Result0, Result1, Result2, Result3, Result4, Result5, Result6, Result7>>;
1478
+ Poll<Result> PollOnce() {
1479
+ if (!ready.is_set(0)) {
1480
+ if (grpc_trace_promise_primitives.enabled()) {
1481
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 1/8", this);
1482
+ }
1483
+ auto poll = promise0();
1484
+ if (grpc_trace_promise_primitives.enabled()) {
1485
+ auto* p = poll.value_if_ready();
1486
+ gpr_log(GPR_DEBUG, "join[%p]: joint 1/8 %s", this,
1487
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1488
+ : "pending");
1489
+ }
1490
+ if (auto* p = poll.value_if_ready()) {
1491
+ if (Traits::IsOk(*p)) {
1492
+ ready.set(0);
1493
+ Destruct(&promise0);
1494
+ Construct(&result0, Traits::Unwrapped(std::move(*p)));
1495
+ } else {
1496
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1497
+ }
1498
+ }
1499
+ } else if (grpc_trace_promise_primitives.enabled()) {
1500
+ gpr_log(GPR_DEBUG, "join[%p]: joint 1/8 already ready", this);
1501
+ }
1502
+ if (!ready.is_set(1)) {
1503
+ if (grpc_trace_promise_primitives.enabled()) {
1504
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 2/8", this);
1505
+ }
1506
+ auto poll = promise1();
1507
+ if (grpc_trace_promise_primitives.enabled()) {
1508
+ auto* p = poll.value_if_ready();
1509
+ gpr_log(GPR_DEBUG, "join[%p]: joint 2/8 %s", this,
1510
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1511
+ : "pending");
1512
+ }
1513
+ if (auto* p = poll.value_if_ready()) {
1514
+ if (Traits::IsOk(*p)) {
1515
+ ready.set(1);
1516
+ Destruct(&promise1);
1517
+ Construct(&result1, Traits::Unwrapped(std::move(*p)));
1518
+ } else {
1519
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1520
+ }
1521
+ }
1522
+ } else if (grpc_trace_promise_primitives.enabled()) {
1523
+ gpr_log(GPR_DEBUG, "join[%p]: joint 2/8 already ready", this);
1524
+ }
1525
+ if (!ready.is_set(2)) {
1526
+ if (grpc_trace_promise_primitives.enabled()) {
1527
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 3/8", this);
1528
+ }
1529
+ auto poll = promise2();
1530
+ if (grpc_trace_promise_primitives.enabled()) {
1531
+ auto* p = poll.value_if_ready();
1532
+ gpr_log(GPR_DEBUG, "join[%p]: joint 3/8 %s", this,
1533
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1534
+ : "pending");
1535
+ }
1536
+ if (auto* p = poll.value_if_ready()) {
1537
+ if (Traits::IsOk(*p)) {
1538
+ ready.set(2);
1539
+ Destruct(&promise2);
1540
+ Construct(&result2, Traits::Unwrapped(std::move(*p)));
1541
+ } else {
1542
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1543
+ }
1544
+ }
1545
+ } else if (grpc_trace_promise_primitives.enabled()) {
1546
+ gpr_log(GPR_DEBUG, "join[%p]: joint 3/8 already ready", this);
1547
+ }
1548
+ if (!ready.is_set(3)) {
1549
+ if (grpc_trace_promise_primitives.enabled()) {
1550
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 4/8", this);
1551
+ }
1552
+ auto poll = promise3();
1553
+ if (grpc_trace_promise_primitives.enabled()) {
1554
+ auto* p = poll.value_if_ready();
1555
+ gpr_log(GPR_DEBUG, "join[%p]: joint 4/8 %s", this,
1556
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1557
+ : "pending");
1558
+ }
1559
+ if (auto* p = poll.value_if_ready()) {
1560
+ if (Traits::IsOk(*p)) {
1561
+ ready.set(3);
1562
+ Destruct(&promise3);
1563
+ Construct(&result3, Traits::Unwrapped(std::move(*p)));
1564
+ } else {
1565
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1566
+ }
1567
+ }
1568
+ } else if (grpc_trace_promise_primitives.enabled()) {
1569
+ gpr_log(GPR_DEBUG, "join[%p]: joint 4/8 already ready", this);
1570
+ }
1571
+ if (!ready.is_set(4)) {
1572
+ if (grpc_trace_promise_primitives.enabled()) {
1573
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 5/8", this);
1574
+ }
1575
+ auto poll = promise4();
1576
+ if (grpc_trace_promise_primitives.enabled()) {
1577
+ auto* p = poll.value_if_ready();
1578
+ gpr_log(GPR_DEBUG, "join[%p]: joint 5/8 %s", this,
1579
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1580
+ : "pending");
1581
+ }
1582
+ if (auto* p = poll.value_if_ready()) {
1583
+ if (Traits::IsOk(*p)) {
1584
+ ready.set(4);
1585
+ Destruct(&promise4);
1586
+ Construct(&result4, Traits::Unwrapped(std::move(*p)));
1587
+ } else {
1588
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1589
+ }
1590
+ }
1591
+ } else if (grpc_trace_promise_primitives.enabled()) {
1592
+ gpr_log(GPR_DEBUG, "join[%p]: joint 5/8 already ready", this);
1593
+ }
1594
+ if (!ready.is_set(5)) {
1595
+ if (grpc_trace_promise_primitives.enabled()) {
1596
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 6/8", this);
1597
+ }
1598
+ auto poll = promise5();
1599
+ if (grpc_trace_promise_primitives.enabled()) {
1600
+ auto* p = poll.value_if_ready();
1601
+ gpr_log(GPR_DEBUG, "join[%p]: joint 6/8 %s", this,
1602
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1603
+ : "pending");
1604
+ }
1605
+ if (auto* p = poll.value_if_ready()) {
1606
+ if (Traits::IsOk(*p)) {
1607
+ ready.set(5);
1608
+ Destruct(&promise5);
1609
+ Construct(&result5, Traits::Unwrapped(std::move(*p)));
1610
+ } else {
1611
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1612
+ }
1613
+ }
1614
+ } else if (grpc_trace_promise_primitives.enabled()) {
1615
+ gpr_log(GPR_DEBUG, "join[%p]: joint 6/8 already ready", this);
1616
+ }
1617
+ if (!ready.is_set(6)) {
1618
+ if (grpc_trace_promise_primitives.enabled()) {
1619
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 7/8", this);
1620
+ }
1621
+ auto poll = promise6();
1622
+ if (grpc_trace_promise_primitives.enabled()) {
1623
+ auto* p = poll.value_if_ready();
1624
+ gpr_log(GPR_DEBUG, "join[%p]: joint 7/8 %s", this,
1625
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1626
+ : "pending");
1627
+ }
1628
+ if (auto* p = poll.value_if_ready()) {
1629
+ if (Traits::IsOk(*p)) {
1630
+ ready.set(6);
1631
+ Destruct(&promise6);
1632
+ Construct(&result6, Traits::Unwrapped(std::move(*p)));
1633
+ } else {
1634
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1635
+ }
1636
+ }
1637
+ } else if (grpc_trace_promise_primitives.enabled()) {
1638
+ gpr_log(GPR_DEBUG, "join[%p]: joint 7/8 already ready", this);
1639
+ }
1640
+ if (!ready.is_set(7)) {
1641
+ if (grpc_trace_promise_primitives.enabled()) {
1642
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 8/8", this);
1643
+ }
1644
+ auto poll = promise7();
1645
+ if (grpc_trace_promise_primitives.enabled()) {
1646
+ auto* p = poll.value_if_ready();
1647
+ gpr_log(GPR_DEBUG, "join[%p]: joint 8/8 %s", this,
1648
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1649
+ : "pending");
1650
+ }
1651
+ if (auto* p = poll.value_if_ready()) {
1652
+ if (Traits::IsOk(*p)) {
1653
+ ready.set(7);
1654
+ Destruct(&promise7);
1655
+ Construct(&result7, Traits::Unwrapped(std::move(*p)));
1656
+ } else {
1657
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1658
+ }
1659
+ }
1660
+ } else if (grpc_trace_promise_primitives.enabled()) {
1661
+ gpr_log(GPR_DEBUG, "join[%p]: joint 8/8 already ready", this);
1662
+ }
1663
+ if (ready.all()) {
1664
+ return Traits::FinalReturn(std::move(result0), std::move(result1),
1665
+ std::move(result2), std::move(result3),
1666
+ std::move(result4), std::move(result5),
1667
+ std::move(result6), std::move(result7));
1668
+ }
1669
+ return Pending{};
1670
+ }
1671
+ };
1672
+
1673
+ template <class Traits, typename P0, typename P1, typename P2, typename P3,
1674
+ typename P4, typename P5, typename P6, typename P7, typename P8>
1675
+ struct JoinState<Traits, P0, P1, P2, P3, P4, P5, P6, P7, P8> {
1676
+ template <typename T>
1677
+ using UnwrappedType = decltype(Traits::Unwrapped(std::declval<T>()));
1678
+ using Promise0 = PromiseLike<P0>;
1679
+ using Result0 = UnwrappedType<typename Promise0::Result>;
1680
+ union {
1681
+ GPR_NO_UNIQUE_ADDRESS Promise0 promise0;
1682
+ GPR_NO_UNIQUE_ADDRESS Result0 result0;
1683
+ };
1684
+ using Promise1 = PromiseLike<P1>;
1685
+ using Result1 = UnwrappedType<typename Promise1::Result>;
1686
+ union {
1687
+ GPR_NO_UNIQUE_ADDRESS Promise1 promise1;
1688
+ GPR_NO_UNIQUE_ADDRESS Result1 result1;
1689
+ };
1690
+ using Promise2 = PromiseLike<P2>;
1691
+ using Result2 = UnwrappedType<typename Promise2::Result>;
1692
+ union {
1693
+ GPR_NO_UNIQUE_ADDRESS Promise2 promise2;
1694
+ GPR_NO_UNIQUE_ADDRESS Result2 result2;
1695
+ };
1696
+ using Promise3 = PromiseLike<P3>;
1697
+ using Result3 = UnwrappedType<typename Promise3::Result>;
1698
+ union {
1699
+ GPR_NO_UNIQUE_ADDRESS Promise3 promise3;
1700
+ GPR_NO_UNIQUE_ADDRESS Result3 result3;
1701
+ };
1702
+ using Promise4 = PromiseLike<P4>;
1703
+ using Result4 = UnwrappedType<typename Promise4::Result>;
1704
+ union {
1705
+ GPR_NO_UNIQUE_ADDRESS Promise4 promise4;
1706
+ GPR_NO_UNIQUE_ADDRESS Result4 result4;
1707
+ };
1708
+ using Promise5 = PromiseLike<P5>;
1709
+ using Result5 = UnwrappedType<typename Promise5::Result>;
1710
+ union {
1711
+ GPR_NO_UNIQUE_ADDRESS Promise5 promise5;
1712
+ GPR_NO_UNIQUE_ADDRESS Result5 result5;
1713
+ };
1714
+ using Promise6 = PromiseLike<P6>;
1715
+ using Result6 = UnwrappedType<typename Promise6::Result>;
1716
+ union {
1717
+ GPR_NO_UNIQUE_ADDRESS Promise6 promise6;
1718
+ GPR_NO_UNIQUE_ADDRESS Result6 result6;
1719
+ };
1720
+ using Promise7 = PromiseLike<P7>;
1721
+ using Result7 = UnwrappedType<typename Promise7::Result>;
1722
+ union {
1723
+ GPR_NO_UNIQUE_ADDRESS Promise7 promise7;
1724
+ GPR_NO_UNIQUE_ADDRESS Result7 result7;
1725
+ };
1726
+ using Promise8 = PromiseLike<P8>;
1727
+ using Result8 = UnwrappedType<typename Promise8::Result>;
1728
+ union {
1729
+ GPR_NO_UNIQUE_ADDRESS Promise8 promise8;
1730
+ GPR_NO_UNIQUE_ADDRESS Result8 result8;
1731
+ };
1732
+ GPR_NO_UNIQUE_ADDRESS BitSet<9> ready;
1733
+ JoinState(P0&& p0, P1&& p1, P2&& p2, P3&& p3, P4&& p4, P5&& p5, P6&& p6,
1734
+ P7&& p7, P8&& p8) {
1735
+ Construct(&promise0, std::forward<P0>(p0));
1736
+ Construct(&promise1, std::forward<P1>(p1));
1737
+ Construct(&promise2, std::forward<P2>(p2));
1738
+ Construct(&promise3, std::forward<P3>(p3));
1739
+ Construct(&promise4, std::forward<P4>(p4));
1740
+ Construct(&promise5, std::forward<P5>(p5));
1741
+ Construct(&promise6, std::forward<P6>(p6));
1742
+ Construct(&promise7, std::forward<P7>(p7));
1743
+ Construct(&promise8, std::forward<P8>(p8));
1744
+ }
1745
+ JoinState(const JoinState& other) {
1746
+ GPR_ASSERT(other.ready.none());
1747
+ Construct(&promise0, other.promise0);
1748
+ Construct(&promise1, other.promise1);
1749
+ Construct(&promise2, other.promise2);
1750
+ Construct(&promise3, other.promise3);
1751
+ Construct(&promise4, other.promise4);
1752
+ Construct(&promise5, other.promise5);
1753
+ Construct(&promise6, other.promise6);
1754
+ Construct(&promise7, other.promise7);
1755
+ Construct(&promise8, other.promise8);
1756
+ }
1757
+ JoinState& operator=(const JoinState& other) = delete;
1758
+ JoinState& operator=(JoinState&& other) = delete;
1759
+ JoinState(JoinState&& other) noexcept : ready(other.ready) {
1760
+ if (ready.is_set(0)) {
1761
+ Construct(&result0, std::move(other.result0));
1762
+ } else {
1763
+ Construct(&promise0, std::move(other.promise0));
1764
+ }
1765
+ if (ready.is_set(1)) {
1766
+ Construct(&result1, std::move(other.result1));
1767
+ } else {
1768
+ Construct(&promise1, std::move(other.promise1));
1769
+ }
1770
+ if (ready.is_set(2)) {
1771
+ Construct(&result2, std::move(other.result2));
1772
+ } else {
1773
+ Construct(&promise2, std::move(other.promise2));
1774
+ }
1775
+ if (ready.is_set(3)) {
1776
+ Construct(&result3, std::move(other.result3));
1777
+ } else {
1778
+ Construct(&promise3, std::move(other.promise3));
1779
+ }
1780
+ if (ready.is_set(4)) {
1781
+ Construct(&result4, std::move(other.result4));
1782
+ } else {
1783
+ Construct(&promise4, std::move(other.promise4));
1784
+ }
1785
+ if (ready.is_set(5)) {
1786
+ Construct(&result5, std::move(other.result5));
1787
+ } else {
1788
+ Construct(&promise5, std::move(other.promise5));
1789
+ }
1790
+ if (ready.is_set(6)) {
1791
+ Construct(&result6, std::move(other.result6));
1792
+ } else {
1793
+ Construct(&promise6, std::move(other.promise6));
1794
+ }
1795
+ if (ready.is_set(7)) {
1796
+ Construct(&result7, std::move(other.result7));
1797
+ } else {
1798
+ Construct(&promise7, std::move(other.promise7));
1799
+ }
1800
+ if (ready.is_set(8)) {
1801
+ Construct(&result8, std::move(other.result8));
1802
+ } else {
1803
+ Construct(&promise8, std::move(other.promise8));
1804
+ }
1805
+ }
1806
+ ~JoinState() {
1807
+ if (ready.is_set(0)) {
1808
+ Destruct(&result0);
1809
+ } else {
1810
+ Destruct(&promise0);
1811
+ }
1812
+ if (ready.is_set(1)) {
1813
+ Destruct(&result1);
1814
+ } else {
1815
+ Destruct(&promise1);
1816
+ }
1817
+ if (ready.is_set(2)) {
1818
+ Destruct(&result2);
1819
+ } else {
1820
+ Destruct(&promise2);
1821
+ }
1822
+ if (ready.is_set(3)) {
1823
+ Destruct(&result3);
1824
+ } else {
1825
+ Destruct(&promise3);
1826
+ }
1827
+ if (ready.is_set(4)) {
1828
+ Destruct(&result4);
1829
+ } else {
1830
+ Destruct(&promise4);
1831
+ }
1832
+ if (ready.is_set(5)) {
1833
+ Destruct(&result5);
1834
+ } else {
1835
+ Destruct(&promise5);
1836
+ }
1837
+ if (ready.is_set(6)) {
1838
+ Destruct(&result6);
1839
+ } else {
1840
+ Destruct(&promise6);
1841
+ }
1842
+ if (ready.is_set(7)) {
1843
+ Destruct(&result7);
1844
+ } else {
1845
+ Destruct(&promise7);
1846
+ }
1847
+ if (ready.is_set(8)) {
1848
+ Destruct(&result8);
1849
+ } else {
1850
+ Destruct(&promise8);
1851
+ }
1852
+ }
1853
+ using Result = typename Traits::template ResultType<
1854
+ std::tuple<Result0, Result1, Result2, Result3, Result4, Result5, Result6,
1855
+ Result7, Result8>>;
1856
+ Poll<Result> PollOnce() {
1857
+ if (!ready.is_set(0)) {
1858
+ if (grpc_trace_promise_primitives.enabled()) {
1859
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 1/9", this);
1860
+ }
1861
+ auto poll = promise0();
1862
+ if (grpc_trace_promise_primitives.enabled()) {
1863
+ auto* p = poll.value_if_ready();
1864
+ gpr_log(GPR_DEBUG, "join[%p]: joint 1/9 %s", this,
1865
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1866
+ : "pending");
1867
+ }
1868
+ if (auto* p = poll.value_if_ready()) {
1869
+ if (Traits::IsOk(*p)) {
1870
+ ready.set(0);
1871
+ Destruct(&promise0);
1872
+ Construct(&result0, Traits::Unwrapped(std::move(*p)));
1873
+ } else {
1874
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1875
+ }
1876
+ }
1877
+ } else if (grpc_trace_promise_primitives.enabled()) {
1878
+ gpr_log(GPR_DEBUG, "join[%p]: joint 1/9 already ready", this);
1879
+ }
1880
+ if (!ready.is_set(1)) {
1881
+ if (grpc_trace_promise_primitives.enabled()) {
1882
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 2/9", this);
1883
+ }
1884
+ auto poll = promise1();
1885
+ if (grpc_trace_promise_primitives.enabled()) {
1886
+ auto* p = poll.value_if_ready();
1887
+ gpr_log(GPR_DEBUG, "join[%p]: joint 2/9 %s", this,
1888
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1889
+ : "pending");
1890
+ }
1891
+ if (auto* p = poll.value_if_ready()) {
1892
+ if (Traits::IsOk(*p)) {
1893
+ ready.set(1);
1894
+ Destruct(&promise1);
1895
+ Construct(&result1, Traits::Unwrapped(std::move(*p)));
1896
+ } else {
1897
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1898
+ }
1899
+ }
1900
+ } else if (grpc_trace_promise_primitives.enabled()) {
1901
+ gpr_log(GPR_DEBUG, "join[%p]: joint 2/9 already ready", this);
1902
+ }
1903
+ if (!ready.is_set(2)) {
1904
+ if (grpc_trace_promise_primitives.enabled()) {
1905
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 3/9", this);
1906
+ }
1907
+ auto poll = promise2();
1908
+ if (grpc_trace_promise_primitives.enabled()) {
1909
+ auto* p = poll.value_if_ready();
1910
+ gpr_log(GPR_DEBUG, "join[%p]: joint 3/9 %s", this,
1911
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1912
+ : "pending");
1913
+ }
1914
+ if (auto* p = poll.value_if_ready()) {
1915
+ if (Traits::IsOk(*p)) {
1916
+ ready.set(2);
1917
+ Destruct(&promise2);
1918
+ Construct(&result2, Traits::Unwrapped(std::move(*p)));
1919
+ } else {
1920
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1921
+ }
1922
+ }
1923
+ } else if (grpc_trace_promise_primitives.enabled()) {
1924
+ gpr_log(GPR_DEBUG, "join[%p]: joint 3/9 already ready", this);
1925
+ }
1926
+ if (!ready.is_set(3)) {
1927
+ if (grpc_trace_promise_primitives.enabled()) {
1928
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 4/9", this);
1929
+ }
1930
+ auto poll = promise3();
1931
+ if (grpc_trace_promise_primitives.enabled()) {
1932
+ auto* p = poll.value_if_ready();
1933
+ gpr_log(GPR_DEBUG, "join[%p]: joint 4/9 %s", this,
1934
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1935
+ : "pending");
1936
+ }
1937
+ if (auto* p = poll.value_if_ready()) {
1938
+ if (Traits::IsOk(*p)) {
1939
+ ready.set(3);
1940
+ Destruct(&promise3);
1941
+ Construct(&result3, Traits::Unwrapped(std::move(*p)));
1942
+ } else {
1943
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1944
+ }
1945
+ }
1946
+ } else if (grpc_trace_promise_primitives.enabled()) {
1947
+ gpr_log(GPR_DEBUG, "join[%p]: joint 4/9 already ready", this);
1948
+ }
1949
+ if (!ready.is_set(4)) {
1950
+ if (grpc_trace_promise_primitives.enabled()) {
1951
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 5/9", this);
1952
+ }
1953
+ auto poll = promise4();
1954
+ if (grpc_trace_promise_primitives.enabled()) {
1955
+ auto* p = poll.value_if_ready();
1956
+ gpr_log(GPR_DEBUG, "join[%p]: joint 5/9 %s", this,
1957
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1958
+ : "pending");
1959
+ }
1960
+ if (auto* p = poll.value_if_ready()) {
1961
+ if (Traits::IsOk(*p)) {
1962
+ ready.set(4);
1963
+ Destruct(&promise4);
1964
+ Construct(&result4, Traits::Unwrapped(std::move(*p)));
1965
+ } else {
1966
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1967
+ }
1968
+ }
1969
+ } else if (grpc_trace_promise_primitives.enabled()) {
1970
+ gpr_log(GPR_DEBUG, "join[%p]: joint 5/9 already ready", this);
1971
+ }
1972
+ if (!ready.is_set(5)) {
1973
+ if (grpc_trace_promise_primitives.enabled()) {
1974
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 6/9", this);
1975
+ }
1976
+ auto poll = promise5();
1977
+ if (grpc_trace_promise_primitives.enabled()) {
1978
+ auto* p = poll.value_if_ready();
1979
+ gpr_log(GPR_DEBUG, "join[%p]: joint 6/9 %s", this,
1980
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
1981
+ : "pending");
1982
+ }
1983
+ if (auto* p = poll.value_if_ready()) {
1984
+ if (Traits::IsOk(*p)) {
1985
+ ready.set(5);
1986
+ Destruct(&promise5);
1987
+ Construct(&result5, Traits::Unwrapped(std::move(*p)));
1988
+ } else {
1989
+ return Traits::template EarlyReturn<Result>(std::move(*p));
1990
+ }
1991
+ }
1992
+ } else if (grpc_trace_promise_primitives.enabled()) {
1993
+ gpr_log(GPR_DEBUG, "join[%p]: joint 6/9 already ready", this);
1994
+ }
1995
+ if (!ready.is_set(6)) {
1996
+ if (grpc_trace_promise_primitives.enabled()) {
1997
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 7/9", this);
1998
+ }
1999
+ auto poll = promise6();
2000
+ if (grpc_trace_promise_primitives.enabled()) {
2001
+ auto* p = poll.value_if_ready();
2002
+ gpr_log(GPR_DEBUG, "join[%p]: joint 7/9 %s", this,
2003
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
2004
+ : "pending");
2005
+ }
2006
+ if (auto* p = poll.value_if_ready()) {
2007
+ if (Traits::IsOk(*p)) {
2008
+ ready.set(6);
2009
+ Destruct(&promise6);
2010
+ Construct(&result6, Traits::Unwrapped(std::move(*p)));
2011
+ } else {
2012
+ return Traits::template EarlyReturn<Result>(std::move(*p));
2013
+ }
2014
+ }
2015
+ } else if (grpc_trace_promise_primitives.enabled()) {
2016
+ gpr_log(GPR_DEBUG, "join[%p]: joint 7/9 already ready", this);
2017
+ }
2018
+ if (!ready.is_set(7)) {
2019
+ if (grpc_trace_promise_primitives.enabled()) {
2020
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 8/9", this);
2021
+ }
2022
+ auto poll = promise7();
2023
+ if (grpc_trace_promise_primitives.enabled()) {
2024
+ auto* p = poll.value_if_ready();
2025
+ gpr_log(GPR_DEBUG, "join[%p]: joint 8/9 %s", this,
2026
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
2027
+ : "pending");
2028
+ }
2029
+ if (auto* p = poll.value_if_ready()) {
2030
+ if (Traits::IsOk(*p)) {
2031
+ ready.set(7);
2032
+ Destruct(&promise7);
2033
+ Construct(&result7, Traits::Unwrapped(std::move(*p)));
2034
+ } else {
2035
+ return Traits::template EarlyReturn<Result>(std::move(*p));
2036
+ }
2037
+ }
2038
+ } else if (grpc_trace_promise_primitives.enabled()) {
2039
+ gpr_log(GPR_DEBUG, "join[%p]: joint 8/9 already ready", this);
2040
+ }
2041
+ if (!ready.is_set(8)) {
2042
+ if (grpc_trace_promise_primitives.enabled()) {
2043
+ gpr_log(GPR_DEBUG, "join[%p]: begin poll joint 9/9", this);
2044
+ }
2045
+ auto poll = promise8();
2046
+ if (grpc_trace_promise_primitives.enabled()) {
2047
+ auto* p = poll.value_if_ready();
2048
+ gpr_log(GPR_DEBUG, "join[%p]: joint 9/9 %s", this,
2049
+ p != nullptr ? (Traits::IsOk(*p) ? "ready" : "early-error")
2050
+ : "pending");
2051
+ }
2052
+ if (auto* p = poll.value_if_ready()) {
2053
+ if (Traits::IsOk(*p)) {
2054
+ ready.set(8);
2055
+ Destruct(&promise8);
2056
+ Construct(&result8, Traits::Unwrapped(std::move(*p)));
2057
+ } else {
2058
+ return Traits::template EarlyReturn<Result>(std::move(*p));
2059
+ }
2060
+ }
2061
+ } else if (grpc_trace_promise_primitives.enabled()) {
2062
+ gpr_log(GPR_DEBUG, "join[%p]: joint 9/9 already ready", this);
2063
+ }
2064
+ if (ready.all()) {
2065
+ return Traits::FinalReturn(
2066
+ std::move(result0), std::move(result1), std::move(result2),
2067
+ std::move(result3), std::move(result4), std::move(result5),
2068
+ std::move(result6), std::move(result7), std::move(result8));
2069
+ }
2070
+ return Pending{};
2071
+ }
2072
+ };
2073
+
2074
+ } // namespace promise_detail
2075
+ } // namespace grpc_core
2076
+
2077
+ #endif // GRPC_SRC_CORE_LIB_PROMISE_DETAIL_JOIN_STATE_H