grpc 1.78.0 → 1.80.0.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +22 -8
  3. data/include/grpc/credentials.h +47 -37
  4. data/include/grpc/credentials_cpp.h +39 -0
  5. data/include/grpc/event_engine/event_engine.h +8 -3
  6. data/include/grpc/grpc.h +4 -0
  7. data/include/grpc/impl/call.h +9 -0
  8. data/include/grpc/impl/channel_arg_names.h +7 -0
  9. data/include/grpc/module.modulemap +2 -0
  10. data/include/grpc/private_key_signer.h +104 -0
  11. data/include/grpc/support/port_platform.h +6 -0
  12. data/src/core/call/call_filters.h +101 -78
  13. data/src/core/call/call_spine.h +91 -68
  14. data/src/core/call/call_state.h +60 -4
  15. data/src/core/call/client_call.cc +9 -9
  16. data/src/core/call/client_call.h +1 -1
  17. data/src/core/call/metadata_batch.cc +2 -0
  18. data/src/core/call/metadata_batch.h +48 -1
  19. data/src/core/call/metadata_info.cc +35 -0
  20. data/src/core/call/metadata_info.h +2 -0
  21. data/src/core/call/simple_slice_based_metadata.h +2 -1
  22. data/src/core/channelz/channelz.cc +9 -6
  23. data/src/core/channelz/channelz.h +7 -4
  24. data/src/core/channelz/property_list.h +5 -0
  25. data/src/core/channelz/v2tov1/convert.cc +1 -1
  26. data/src/core/channelz/v2tov1/legacy_api.cc +164 -307
  27. data/src/core/client_channel/buffered_call.cc +7 -3
  28. data/src/core/client_channel/buffered_call.h +11 -5
  29. data/src/core/client_channel/client_channel.cc +106 -44
  30. data/src/core/client_channel/client_channel.h +3 -6
  31. data/src/core/client_channel/client_channel_filter.cc +90 -64
  32. data/src/core/client_channel/client_channel_filter.h +3 -6
  33. data/src/core/client_channel/client_channel_internal.h +5 -0
  34. data/src/core/client_channel/config_selector.h +17 -12
  35. data/src/core/client_channel/dynamic_filters.cc +8 -7
  36. data/src/core/client_channel/dynamic_filters.h +7 -5
  37. data/src/core/client_channel/retry_filter.cc +1 -1
  38. data/src/core/client_channel/retry_filter.h +2 -2
  39. data/src/core/client_channel/subchannel.cc +1682 -266
  40. data/src/core/client_channel/subchannel.h +411 -134
  41. data/src/core/client_channel/subchannel_stream_client.cc +22 -18
  42. data/src/core/client_channel/subchannel_stream_client.h +8 -9
  43. data/src/core/client_channel/subchannel_stream_limiter.cc +76 -0
  44. data/src/core/client_channel/subchannel_stream_limiter.h +51 -0
  45. data/src/core/config/config_vars.cc +9 -1
  46. data/src/core/config/config_vars.h +6 -0
  47. data/src/core/credentials/call/call_creds_registry.h +51 -22
  48. data/src/core/credentials/call/call_creds_registry_init.cc +86 -2
  49. data/src/core/credentials/call/external/aws_external_account_credentials.cc +2 -2
  50. data/src/core/credentials/call/external/external_account_credentials.cc +11 -4
  51. data/src/core/credentials/call/external/file_external_account_credentials.cc +2 -2
  52. data/src/core/credentials/transport/channel_creds_registry.h +71 -20
  53. data/src/core/credentials/transport/channel_creds_registry_init.cc +338 -29
  54. data/src/core/credentials/transport/ssl/ssl_credentials.cc +43 -24
  55. data/src/core/credentials/transport/ssl/ssl_credentials.h +7 -1
  56. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +2 -8
  57. data/src/core/credentials/transport/ssl/ssl_security_connector.h +4 -3
  58. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +25 -5
  59. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +7 -5
  60. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +181 -109
  61. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +55 -42
  62. data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +28 -23
  63. data/src/core/credentials/transport/tls/grpc_tls_credentials_options.h +26 -23
  64. data/src/core/credentials/transport/tls/spiffe_utils.cc +2 -2
  65. data/src/core/credentials/transport/tls/ssl_utils.cc +18 -18
  66. data/src/core/credentials/transport/tls/ssl_utils.h +12 -10
  67. data/src/core/credentials/transport/tls/tls_security_connector.cc +106 -74
  68. data/src/core/credentials/transport/tls/tls_security_connector.h +12 -8
  69. data/src/core/credentials/transport/xds/xds_credentials.cc +76 -32
  70. data/src/core/credentials/transport/xds/xds_credentials.h +4 -2
  71. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +117 -35
  72. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +42 -4
  73. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +58 -29
  74. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +19 -11
  75. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +82 -25
  76. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +28 -3
  77. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +9 -7
  78. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +1 -1
  79. data/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h +7 -1
  80. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +117 -67
  81. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +2 -0
  82. data/src/core/ext/transport/chttp2/transport/flow_control.h +11 -1
  83. data/src/core/ext/transport/chttp2/transport/frame.cc +2 -15
  84. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  85. data/src/core/ext/transport/chttp2/transport/goaway.cc +17 -2
  86. data/src/core/ext/transport/chttp2/transport/goaway.h +27 -6
  87. data/src/core/ext/transport/chttp2/transport/header_assembler.h +8 -21
  88. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +101 -40
  89. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +95 -0
  90. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +923 -772
  91. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +406 -423
  92. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -0
  93. data/src/core/ext/transport/chttp2/transport/http2_settings.h +8 -1
  94. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +25 -13
  95. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +71 -24
  96. data/src/core/ext/transport/chttp2/transport/http2_transport.h +25 -49
  97. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +2 -2
  98. data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +29 -9
  99. data/src/core/ext/transport/chttp2/transport/internal.h +6 -2
  100. data/src/core/ext/transport/chttp2/transport/keepalive.cc +14 -20
  101. data/src/core/ext/transport/chttp2/transport/keepalive.h +9 -6
  102. data/src/core/ext/transport/chttp2/transport/parsing.cc +11 -0
  103. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +34 -74
  104. data/src/core/ext/transport/chttp2/transport/ping_promise.h +123 -79
  105. data/src/core/ext/transport/chttp2/transport/security_frame.h +233 -3
  106. data/src/core/ext/transport/chttp2/transport/stream.h +152 -73
  107. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +155 -85
  108. data/src/core/ext/transport/chttp2/transport/transport_common.h +0 -5
  109. data/src/core/ext/transport/chttp2/transport/writable_streams.h +8 -7
  110. data/src/core/ext/transport/chttp2/transport/write_cycle.cc +86 -0
  111. data/src/core/ext/transport/chttp2/transport/write_cycle.h +355 -0
  112. data/src/core/ext/transport/chttp2/transport/writing.cc +31 -29
  113. data/src/core/ext/upb-gen/cel/expr/checked.upb.h +1875 -0
  114. data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c +409 -0
  115. data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h +56 -0
  116. data/src/core/ext/upb-gen/cel/expr/syntax.upb.h +2223 -0
  117. data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c +489 -0
  118. data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h +60 -0
  119. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +2 -1
  120. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +130 -18
  121. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.c +18 -13
  122. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +70 -38
  123. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +20 -17
  124. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +26 -10
  125. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.c +8 -7
  126. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb.h +495 -0
  127. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.c +114 -0
  128. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.h +36 -0
  129. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +26 -10
  130. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.c +8 -7
  131. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb.h +121 -0
  132. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.c +54 -0
  133. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.h +32 -0
  134. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +143 -9
  135. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +18 -6
  136. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +112 -11
  137. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +22 -9
  138. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb.h +276 -0
  139. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.c +60 -5
  140. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.h +4 -0
  141. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +72 -0
  142. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.c +23 -2
  143. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.h +2 -0
  144. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +129 -13
  145. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.c +36 -10
  146. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.h +2 -0
  147. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +30 -0
  148. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +5 -3
  149. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb.h +16 -0
  150. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.c +4 -3
  151. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +31 -0
  152. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.c +5 -3
  153. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +2 -1
  154. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +63 -0
  155. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +12 -7
  156. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +97 -81
  157. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.c +40 -23
  158. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +604 -228
  159. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +146 -100
  160. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +30 -0
  161. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.c +5 -3
  162. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb.h +35 -3
  163. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.c +7 -4
  164. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb.h +66 -14
  165. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.c +22 -11
  166. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +87 -0
  167. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.c +29 -2
  168. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.h +2 -0
  169. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +0 -1
  170. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.c +0 -1
  171. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +20 -4
  172. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.c +5 -4
  173. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +239 -60
  174. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +59 -28
  175. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.h +2 -0
  176. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb.h +89 -0
  177. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.c +50 -0
  178. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.h +32 -0
  179. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb.h +135 -0
  180. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.c +53 -0
  181. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.h +32 -0
  182. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb.h +105 -0
  183. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.c +51 -0
  184. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.h +32 -0
  185. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +32 -0
  186. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb_minitable.c +6 -3
  187. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +206 -0
  188. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.c +41 -8
  189. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.h +2 -0
  190. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +64 -0
  191. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.c +4 -3
  192. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +64 -0
  193. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c +31 -5
  194. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.h +2 -0
  195. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +283 -14
  196. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +48 -11
  197. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +2 -0
  198. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb.h +144 -6
  199. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.c +35 -7
  200. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.h +2 -0
  201. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +42 -21
  202. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.c +9 -8
  203. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +164 -1
  204. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +37 -6
  205. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +2 -0
  206. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +0 -1
  207. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +0 -1
  208. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb.h +0 -1
  209. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.c +0 -1
  210. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +26 -11
  211. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c +8 -8
  212. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +33 -0
  213. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.c +14 -3
  214. data/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +90 -10
  215. data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c +18 -7
  216. data/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c +248 -0
  217. data/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h +97 -0
  218. data/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c +283 -0
  219. data/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h +107 -0
  220. data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.c +213 -211
  221. data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +635 -614
  222. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.c +1012 -1000
  223. data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.c +276 -273
  224. data/src/core/ext/upbdefs-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upbdefs.c +152 -0
  225. data/src/core/ext/upbdefs-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upbdefs.h +47 -0
  226. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.c +149 -144
  227. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.c +367 -370
  228. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/cel.upbdefs.c +63 -0
  229. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/cel.upbdefs.h +37 -0
  230. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_service.upbdefs.c +297 -284
  231. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.c +492 -469
  232. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.c +74 -43
  233. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.h +10 -0
  234. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.c +60 -59
  235. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +202 -184
  236. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +5 -0
  237. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.c +354 -339
  238. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  239. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.c +28 -19
  240. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/metrics_service.upbdefs.c +30 -27
  241. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/stats.upbdefs.c +71 -66
  242. data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.c +94 -91
  243. data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.c +386 -369
  244. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.c +60 -57
  245. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.c +1974 -1884
  246. data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.c +119 -112
  247. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.c +62 -51
  248. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/zipkin.upbdefs.c +109 -88
  249. data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +54 -36
  250. data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +5 -0
  251. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +78 -84
  252. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +48 -46
  253. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +1041 -984
  254. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
  255. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +304 -290
  256. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +94 -77
  257. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +5 -0
  258. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +246 -193
  259. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +5 -0
  260. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.c +37 -23
  261. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.h +5 -0
  262. data/src/core/ext/upbdefs-gen/envoy/type/tracing/v3/custom_tag.upbdefs.c +5 -3
  263. data/src/core/ext/upbdefs-gen/google/api/http.upbdefs.c +4 -4
  264. data/src/core/ext/upbdefs-gen/google/api/httpbody.upbdefs.c +4 -5
  265. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +113 -87
  266. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +5 -0
  267. data/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.c +5 -5
  268. data/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.c +6 -5
  269. data/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.c +5 -5
  270. data/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.c +5 -5
  271. data/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.c +5 -5
  272. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.c +25 -30
  273. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.c +14 -20
  274. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.c +180 -183
  275. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.c +56 -47
  276. data/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.c +69 -47
  277. data/src/core/filter/filter_chain.h +95 -0
  278. data/src/core/handshaker/http_connect/{http_connect_handshaker.cc → http_connect_client_handshaker.cc} +32 -31
  279. data/src/core/handshaker/http_connect/{http_connect_handshaker.h → http_connect_client_handshaker.h} +4 -4
  280. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +1 -1
  281. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +1 -1
  282. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +14 -13
  283. data/src/core/handshaker/security/secure_endpoint.cc +282 -68
  284. data/src/core/handshaker/security/secure_endpoint.h +0 -7
  285. data/src/core/lib/channel/channel_args.h +1 -1
  286. data/src/core/lib/channel/promise_based_filter.cc +17 -4
  287. data/src/core/lib/channel/promise_based_filter.h +3 -2
  288. data/src/core/lib/debug/trace_flags.cc +2 -0
  289. data/src/core/lib/debug/trace_flags.h +1 -0
  290. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +35 -8
  291. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +1 -2
  292. data/src/core/lib/event_engine/event_engine.cc +9 -0
  293. data/src/core/lib/event_engine/extensions/tcp_trace.h +0 -3
  294. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +2 -2
  295. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +1 -1
  296. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +34 -9
  297. data/src/core/lib/event_engine/posix_engine/posix_engine.h +24 -2
  298. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -3
  299. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +141 -14
  300. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +19 -2
  301. data/src/core/lib/event_engine/posix_engine/posix_interface.h +7 -0
  302. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +21 -3
  303. data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +16 -0
  304. data/src/core/lib/experiments/experiments.cc +309 -201
  305. data/src/core/lib/experiments/experiments.h +141 -80
  306. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
  307. data/src/core/lib/iomgr/resolve_address.h +0 -2
  308. data/src/core/lib/iomgr/resolved_address.h +0 -2
  309. data/src/core/lib/iomgr/tcp_posix.cc +13 -5
  310. data/src/core/lib/iomgr/tcp_server.cc +0 -5
  311. data/src/core/lib/iomgr/tcp_server.h +0 -7
  312. data/src/core/lib/iomgr/tcp_server_posix.cc +0 -17
  313. data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -3
  314. data/src/core/lib/iomgr/tcp_server_windows.cc +12 -51
  315. data/src/core/lib/promise/all_ok.h +17 -12
  316. data/src/core/lib/promise/cancel_callback.h +12 -13
  317. data/src/core/lib/promise/detail/join_state.h +626 -0
  318. data/src/core/lib/promise/detail/promise_factory.h +14 -14
  319. data/src/core/lib/promise/for_each.h +32 -8
  320. data/src/core/lib/promise/if.h +9 -7
  321. data/src/core/lib/promise/loop.h +18 -16
  322. data/src/core/lib/promise/map.h +54 -47
  323. data/src/core/lib/promise/mpsc.h +11 -10
  324. data/src/core/lib/promise/observable.h +6 -6
  325. data/src/core/lib/promise/party.h +25 -19
  326. data/src/core/lib/promise/poll.h +5 -5
  327. data/src/core/lib/promise/prioritized_race.h +10 -7
  328. data/src/core/lib/promise/promise.h +16 -11
  329. data/src/core/lib/promise/race.h +6 -5
  330. data/src/core/lib/promise/seq.h +109 -74
  331. data/src/core/lib/promise/try_join.h +14 -6
  332. data/src/core/lib/promise/try_seq.h +76 -60
  333. data/src/core/lib/resource_quota/api.cc +7 -0
  334. data/src/core/lib/resource_quota/arena.h +1 -1
  335. data/src/core/lib/resource_quota/memory_quota.cc +4 -1
  336. data/src/core/lib/resource_quota/resource_quota.cc +2 -1
  337. data/src/core/lib/resource_quota/resource_quota.h +3 -0
  338. data/src/core/lib/resource_quota/stream_quota.cc +77 -1
  339. data/src/core/lib/resource_quota/stream_quota.h +64 -1
  340. data/src/core/lib/resource_quota/telemetry.h +1 -1
  341. data/src/core/lib/surface/call.cc +13 -0
  342. data/src/core/lib/surface/call_utils.h +58 -43
  343. data/src/core/lib/surface/channel.h +1 -4
  344. data/src/core/lib/surface/completion_queue.cc +13 -6
  345. data/src/core/lib/surface/validate_metadata.cc +20 -15
  346. data/src/core/lib/surface/validate_metadata.h +3 -1
  347. data/src/core/lib/surface/version.cc +2 -2
  348. data/src/core/lib/transport/promise_endpoint.cc +1 -1
  349. data/src/core/lib/transport/promise_endpoint.h +1 -1
  350. data/src/core/lib/transport/transport.h +5 -0
  351. data/src/core/load_balancing/health_check_client.cc +1 -15
  352. data/src/core/load_balancing/health_check_client_internal.h +0 -2
  353. data/src/core/load_balancing/oob_backend_metric.cc +1 -5
  354. data/src/core/load_balancing/oob_backend_metric_internal.h +0 -1
  355. data/src/core/load_balancing/xds/xds_cluster_impl.cc +12 -9
  356. data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -2
  357. data/src/core/resolver/xds/xds_resolver.cc +162 -116
  358. data/src/core/server/server.cc +18 -1
  359. data/src/core/server/server.h +2 -0
  360. data/src/core/server/xds_server_config_fetcher.cc +4 -4
  361. data/src/core/telemetry/call_tracer.cc +87 -2
  362. data/src/core/telemetry/call_tracer.h +46 -8
  363. data/src/core/telemetry/instrument.cc +102 -40
  364. data/src/core/telemetry/instrument.h +246 -65
  365. data/src/core/tsi/fake_transport_security.cc +3 -1
  366. data/src/core/tsi/ssl_transport_security.cc +516 -137
  367. data/src/core/tsi/ssl_transport_security.h +28 -22
  368. data/src/core/tsi/ssl_transport_security_utils.cc +2 -2
  369. data/src/core/tsi/ssl_transport_security_utils.h +2 -2
  370. data/src/core/util/bitset.h +6 -0
  371. data/src/core/util/function_signature.h +3 -1
  372. data/src/core/util/http_client/httpcli_security_connector.cc +2 -1
  373. data/src/core/util/json/json_reader.cc +0 -4
  374. data/src/core/xds/grpc/certificate_provider_store.cc +2 -1
  375. data/src/core/xds/grpc/certificate_provider_store.h +3 -17
  376. data/src/core/xds/grpc/certificate_provider_store_interface.h +61 -0
  377. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +48 -0
  378. data/src/core/xds/grpc/xds_bootstrap_grpc.h +18 -0
  379. data/src/core/xds/grpc/xds_certificate_provider.cc +7 -2
  380. data/src/core/xds/grpc/xds_certificate_provider.h +13 -2
  381. data/src/core/xds/grpc/xds_client_grpc.cc +13 -6
  382. data/src/core/xds/grpc/xds_client_grpc.h +10 -7
  383. data/src/core/xds/grpc/xds_cluster.cc +18 -4
  384. data/src/core/xds/grpc/xds_cluster.h +17 -2
  385. data/src/core/xds/grpc/xds_cluster_parser.cc +36 -11
  386. data/src/core/xds/grpc/xds_common_types.cc +45 -0
  387. data/src/core/xds/grpc/xds_common_types.h +31 -0
  388. data/src/core/xds/grpc/xds_common_types_parser.cc +274 -16
  389. data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
  390. data/src/core/xds/grpc/xds_http_fault_filter.cc +128 -24
  391. data/src/core/xds/grpc/xds_http_fault_filter.h +19 -10
  392. data/src/core/xds/grpc/xds_http_filter.cc +38 -0
  393. data/src/core/xds/grpc/xds_http_filter.h +70 -47
  394. data/src/core/xds/grpc/xds_http_filter_registry.cc +48 -14
  395. data/src/core/xds/grpc/xds_http_filter_registry.h +29 -15
  396. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +88 -22
  397. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +22 -11
  398. data/src/core/xds/grpc/xds_http_rbac_filter.cc +36 -20
  399. data/src/core/xds/grpc/xds_http_rbac_filter.h +19 -10
  400. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +143 -26
  401. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +19 -10
  402. data/src/core/xds/grpc/xds_listener.cc +4 -1
  403. data/src/core/xds/grpc/xds_listener.h +10 -2
  404. data/src/core/xds/grpc/xds_listener_parser.cc +23 -18
  405. data/src/core/xds/grpc/xds_matcher.cc +40 -5
  406. data/src/core/xds/grpc/xds_matcher.h +13 -0
  407. data/src/core/xds/grpc/xds_matcher_action.h +1 -1
  408. data/src/core/xds/grpc/xds_matcher_parse.cc +60 -40
  409. data/src/core/xds/grpc/xds_matcher_parse.h +2 -1
  410. data/src/core/xds/grpc/xds_route_config.cc +12 -1
  411. data/src/core/xds/grpc/xds_route_config.h +15 -2
  412. data/src/core/xds/grpc/xds_route_config_parser.cc +11 -5
  413. data/src/core/xds/grpc/xds_routing.cc +181 -6
  414. data/src/core/xds/grpc/xds_routing.h +57 -0
  415. data/src/core/xds/grpc/xds_server_grpc.cc +55 -43
  416. data/src/core/xds/grpc/xds_server_grpc.h +13 -6
  417. data/src/core/xds/grpc/xds_server_grpc_interface.h +3 -2
  418. data/src/core/xds/grpc/xds_transport_grpc.cc +12 -6
  419. data/src/core/xds/grpc/xds_transport_grpc.h +5 -1
  420. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -8
  421. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +18 -12
  422. data/src/ruby/lib/grpc/grpc.rb +7 -9
  423. data/src/ruby/lib/grpc/version.rb +1 -1
  424. data/src/ruby/pb/generate_proto_ruby.sh +1 -1
  425. data/src/ruby/spec/client_server_spec.rb +1 -1
  426. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
  427. data/src/ruby/spec/generic/rpc_server_spec.rb +3 -4
  428. data/src/ruby/spec/spec_helper.rb +1 -1
  429. metadata +64 -14
  430. data/src/core/ext/transport/chttp2/transport/security_frame.cc +0 -31
  431. data/src/core/handshaker/security/legacy_secure_endpoint.cc +0 -597
@@ -28,8 +28,8 @@ class TwoPartyPrioritizedRace {
28
28
  public:
29
29
  using Result = decltype(std::declval<A>()());
30
30
 
31
- explicit TwoPartyPrioritizedRace(A a, B b)
32
- : a_(std::move(a)), b_(std::move(b)) {}
31
+ explicit TwoPartyPrioritizedRace(A&& a, B&& b)
32
+ : a_(std::forward<A>(a)), b_(std::forward<B>(b)) {}
33
33
 
34
34
  Result operator()() {
35
35
  // Check the priority promise.
@@ -63,17 +63,20 @@ class PrioritizedRace<Promise, Promises...>
63
63
  : public TwoPartyPrioritizedRace<Promise, PrioritizedRace<Promises...>> {
64
64
  public:
65
65
  using Result = decltype(std::declval<Promise>()());
66
- explicit PrioritizedRace(Promise promise, Promises... promises)
67
- : TwoPartyPrioritizedRace<Promise, PrioritizedRace<Promises...>>(
68
- std::move(promise),
69
- PrioritizedRace<Promises...>(std::move(promises)...)) {}
66
+ explicit PrioritizedRace(Promise&& promise, Promises&&... promises)
67
+ : TwoPartyPrioritizedRace<std::decay_t<Promise>,
68
+ std::decay_t<PrioritizedRace<Promises...>>>(
69
+ std::forward<Promise>(promise),
70
+ PrioritizedRace<std::decay_t<Promises>...>(
71
+ std::forward<Promises>(promises)...)) {}
70
72
  };
71
73
 
72
74
  template <typename Promise>
73
75
  class PrioritizedRace<Promise> {
74
76
  public:
75
77
  using Result = decltype(std::declval<Promise>()());
76
- explicit PrioritizedRace(Promise promise) : promise_(std::move(promise)) {}
78
+ explicit PrioritizedRace(Promise&& promise)
79
+ : promise_(std::forward<Promise>(promise)) {}
77
80
  Result operator()() { return promise_(); }
78
81
 
79
82
  private:
@@ -36,9 +36,10 @@ using Promise = absl::AnyInvocable<Poll<T>()>;
36
36
  // Helper to execute a promise immediately and return either the result or
37
37
  // nothing.
38
38
  template <typename Promise>
39
- auto NowOrNever(Promise promise)
40
- -> std::optional<typename promise_detail::PromiseLike<Promise>::Result> {
41
- auto r = promise_detail::PromiseLike<Promise>(std::move(promise))();
39
+ auto NowOrNever(Promise&& promise) -> std::optional<
40
+ typename promise_detail::PromiseLike<std::decay_t<Promise>>::Result> {
41
+ auto r = promise_detail::PromiseLike<std::decay_t<Promise>>(
42
+ std::forward<Promise>(promise))();
42
43
  if (auto* p = r.value_if_ready()) {
43
44
  return std::move(*p);
44
45
  }
@@ -56,9 +57,13 @@ namespace promise_detail {
56
57
  template <typename T>
57
58
  class Immediate {
58
59
  public:
59
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION explicit Immediate(T value)
60
+ template <typename U>
61
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION explicit Immediate(U value)
60
62
  : value_(std::move(value)) {}
61
63
 
64
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION explicit Immediate(T&& value)
65
+ : value_(std::forward<T>(value)) {}
66
+
62
67
  GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION Poll<T> operator()() {
63
68
  return std::move(value_);
64
69
  }
@@ -70,9 +75,10 @@ class Immediate {
70
75
 
71
76
  // Return \a value immediately
72
77
  template <typename T>
73
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline promise_detail::Immediate<T>
74
- Immediate(T value) {
75
- return promise_detail::Immediate<T>(std::move(value));
78
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline promise_detail::Immediate<
79
+ std::decay_t<T>>
80
+ Immediate(T&& value) {
81
+ return promise_detail::Immediate<std::decay_t<T>>(std::forward<T>(value));
76
82
  }
77
83
 
78
84
  // Return status Ok immediately
@@ -88,10 +94,9 @@ struct ImmediateOkStatus {
88
94
  // should fail to compile. When modifying this code these should be uncommented
89
95
  // and their miscompilation verified.
90
96
  template <typename T, typename F>
91
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline auto AssertResultType(F f) ->
92
- typename std::enable_if<std::is_same<decltype(f()), Poll<T>>::value,
93
- F>::type {
94
- return f;
97
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline auto AssertResultType(F&& f) ->
98
+ typename std::enable_if_t<std::is_same_v<decltype(f()), Poll<T>>, F> {
99
+ return std::forward<F>(f);
95
100
  }
96
101
 
97
102
  template <typename Promise>
@@ -35,9 +35,10 @@ class Race<Promise, Promises...> {
35
35
  public:
36
36
  using Result = decltype(std::declval<Promise>()());
37
37
 
38
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION explicit Race(Promise promise,
39
- Promises... promises)
40
- : promise_(std::move(promise)), next_(std::move(promises)...) {}
38
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION explicit Race(Promise&& promise,
39
+ Promises&&... promises)
40
+ : promise_(std::forward<Promise>(promise)),
41
+ next_(std::forward<Promises>(promises)...) {}
41
42
 
42
43
  GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION Result operator()() {
43
44
  // Check our own promise.
@@ -79,8 +80,8 @@ template <typename Promise>
79
80
  class Race<Promise> {
80
81
  public:
81
82
  using Result = decltype(std::declval<Promise>()());
82
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION explicit Race(Promise promise)
83
- : promise_(std::move(promise)) {}
83
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION explicit Race(Promise&& promise)
84
+ : promise_(std::forward<Promise>(promise)) {}
84
85
  GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION Result operator()() {
85
86
  return promise_();
86
87
  }
@@ -90,8 +90,8 @@ struct SeqTraits {
90
90
  }
91
91
  template <typename Result, typename PriorResult, typename RunNext>
92
92
  GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION static Poll<Result>
93
- CheckResultAndRunNext(PriorResult prior, RunNext run_next) {
94
- return run_next(std::move(prior));
93
+ CheckResultAndRunNext(PriorResult&& prior, RunNext run_next) {
94
+ return run_next(std::forward<PriorResult>(prior));
95
95
  }
96
96
  };
97
97
 
@@ -128,113 +128,146 @@ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline F Seq(F functor) {
128
128
  }
129
129
 
130
130
  template <typename F0, typename F1>
131
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline promise_detail::Seq<F0, F1> Seq(
132
- F0 f0, F1 f1, DebugLocation whence = {}) {
133
- return promise_detail::Seq<F0, F1>(std::move(f0), std::move(f1), whence);
131
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline auto Seq(
132
+ F0&& f0, F1&& f1, DebugLocation whence = {}) {
133
+ return promise_detail::Seq<std::decay_t<F0>, std::decay_t<F1>>(
134
+ std::forward<F0>(f0), std::forward<F1>(f1), whence);
134
135
  }
135
136
 
136
137
  template <typename F0, typename F1, typename F2>
137
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline promise_detail::Seq<F0, F1, F2> Seq(
138
- F0 f0, F1 f1, F2 f2, DebugLocation whence = {}) {
139
- return promise_detail::Seq<F0, F1, F2>(std::move(f0), std::move(f1),
140
- std::move(f2), whence);
138
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline auto Seq(
139
+ F0&& f0, F1&& f1, F2&& f2, DebugLocation whence = {}) {
140
+ return promise_detail::Seq<std::decay_t<F0>, std::decay_t<F1>,
141
+ std::decay_t<F2>>(
142
+ std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F2>(f2), whence);
141
143
  }
142
144
 
143
145
  template <typename F0, typename F1, typename F2, typename F3>
144
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline promise_detail::Seq<F0, F1, F2, F3>
145
- Seq(F0 f0, F1 f1, F2 f2, F3 f3, DebugLocation whence = {}) {
146
- return promise_detail::Seq<F0, F1, F2, F3>(
147
- std::move(f0), std::move(f1), std::move(f2), std::move(f3), whence);
146
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline auto Seq(
147
+ F0&& f0, F1&& f1, F2&& f2, F3&& f3, DebugLocation whence = {}) {
148
+ return promise_detail::Seq<std::decay_t<F0>, std::decay_t<F1>,
149
+ std::decay_t<F2>, std::decay_t<F3>>(
150
+ std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F2>(f2),
151
+ std::forward<F3>(f3), whence);
148
152
  }
149
153
 
150
154
  template <typename F0, typename F1, typename F2, typename F3, typename F4>
151
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline promise_detail::Seq<F0, F1, F2, F3,
152
- F4>
153
- Seq(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, DebugLocation whence = {}) {
154
- return promise_detail::Seq<F0, F1, F2, F3, F4>(std::move(f0), std::move(f1),
155
- std::move(f2), std::move(f3),
156
- std::move(f4), whence);
155
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline auto Seq(
156
+ F0&& f0, F1&& f1, F2&& f2, F3&& f3, F4&& f4, DebugLocation whence = {}) {
157
+ return promise_detail::Seq<std::decay_t<F0>, std::decay_t<F1>,
158
+ std::decay_t<F2>, std::decay_t<F3>,
159
+ std::decay_t<F4>>(
160
+ std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F2>(f2),
161
+ std::forward<F3>(f3), std::forward<F4>(f4), whence);
157
162
  }
158
163
 
159
164
  template <typename F0, typename F1, typename F2, typename F3, typename F4,
160
165
  typename F5>
161
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline promise_detail::Seq<F0, F1, F2, F3,
162
- F4, F5>
163
- Seq(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, DebugLocation whence = {}) {
164
- return promise_detail::Seq<F0, F1, F2, F3, F4, F5>(
165
- std::move(f0), std::move(f1), std::move(f2), std::move(f3), std::move(f4),
166
- std::move(f5), whence);
166
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline auto Seq(
167
+ F0&& f0, F1&& f1, F2&& f2, F3&& f3, F4&& f4, F5&& f5,
168
+ DebugLocation whence = {}) {
169
+ return promise_detail::Seq<std::decay_t<F0>, std::decay_t<F1>,
170
+ std::decay_t<F2>, std::decay_t<F3>,
171
+ std::decay_t<F4>, std::decay_t<F5>>(
172
+ std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F2>(f2),
173
+ std::forward<F3>(f3), std::forward<F4>(f4), std::forward<F5>(f5), whence);
167
174
  }
168
175
 
169
176
  template <typename F0, typename F1, typename F2, typename F3, typename F4,
170
177
  typename F5, typename F6>
171
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION
172
- promise_detail::Seq<F0, F1, F2, F3, F4, F5, F6>
173
- Seq(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6,
174
- DebugLocation whence = {}) {
175
- return promise_detail::Seq<F0, F1, F2, F3, F4, F5, F6>(
176
- std::move(f0), std::move(f1), std::move(f2), std::move(f3), std::move(f4),
177
- std::move(f5), std::move(f6), whence);
178
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION auto Seq(F0&& f0, F1&& f1, F2&& f2,
179
+ F3&& f3, F4&& f4, F5&& f5,
180
+ F6&& f6,
181
+ DebugLocation whence = {}) {
182
+ return promise_detail::Seq<
183
+ std::decay_t<F0>, std::decay_t<F1>, std::decay_t<F2>, std::decay_t<F3>,
184
+ std::decay_t<F4>, std::decay_t<F5>, std::decay_t<F6>>(
185
+ std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F2>(f2),
186
+ std::forward<F3>(f3), std::forward<F4>(f4), std::forward<F5>(f5),
187
+ std::forward<F6>(f6), whence);
178
188
  }
179
189
 
180
190
  template <typename F0, typename F1, typename F2, typename F3, typename F4,
181
191
  typename F5, typename F6, typename F7>
182
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION
183
- promise_detail::Seq<F0, F1, F2, F3, F4, F5, F6, F7>
184
- Seq(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
185
- DebugLocation whence = {}) {
186
- return promise_detail::Seq<F0, F1, F2, F3, F4, F5, F6, F7>(
187
- std::move(f0), std::move(f1), std::move(f2), std::move(f3), std::move(f4),
188
- std::move(f5), std::move(f6), std::move(f7), whence);
192
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION auto Seq(F0&& f0, F1&& f1, F2&& f2,
193
+ F3&& f3, F4&& f4, F5&& f5,
194
+ F6&& f6, F7&& f7,
195
+ DebugLocation whence = {}) {
196
+ return promise_detail::Seq<
197
+ std::decay_t<F0>, std::decay_t<F1>, std::decay_t<F2>, std::decay_t<F3>,
198
+ std::decay_t<F4>, std::decay_t<F5>, std::decay_t<F6>, std::decay_t<F7>>(
199
+ std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F2>(f2),
200
+ std::forward<F3>(f3), std::forward<F4>(f4), std::forward<F5>(f5),
201
+ std::forward<F6>(f6), std::forward<F7>(f7), whence);
189
202
  }
190
203
 
191
204
  template <typename F0, typename F1, typename F2, typename F3, typename F4,
192
205
  typename F5, typename F6, typename F7, typename F8>
193
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION
194
- promise_detail::Seq<F0, F1, F2, F3, F4, F5, F6, F7, F8>
195
- Seq(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8,
196
- DebugLocation whence = {}) {
197
- return promise_detail::Seq<F0, F1, F2, F3, F4, F5, F6, F7, F8>(
198
- std::move(f0), std::move(f1), std::move(f2), std::move(f3), std::move(f4),
199
- std::move(f5), std::move(f6), std::move(f7), std::move(f8), whence);
206
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION auto Seq(F0&& f0, F1&& f1, F2&& f2,
207
+ F3&& f3, F4&& f4, F5&& f5,
208
+ F6&& f6, F7&& f7, F8&& f8,
209
+ DebugLocation whence = {}) {
210
+ return promise_detail::Seq<
211
+ std::decay_t<F0>, std::decay_t<F1>, std::decay_t<F2>, std::decay_t<F3>,
212
+ std::decay_t<F4>, std::decay_t<F5>, std::decay_t<F6>, std::decay_t<F7>,
213
+ std::decay_t<F8>>(
214
+ std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F2>(f2),
215
+ std::forward<F3>(f3), std::forward<F4>(f4), std::forward<F5>(f5),
216
+ std::forward<F6>(f6), std::forward<F7>(f7), std::forward<F8>(f8), whence);
200
217
  }
201
218
 
202
219
  template <typename F0, typename F1, typename F2, typename F3, typename F4,
203
220
  typename F5, typename F6, typename F7, typename F8, typename F9>
204
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION
205
- promise_detail::Seq<F0, F1, F2, F3, F4, F5, F6, F7, F8, F9>
206
- Seq(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9,
207
- DebugLocation whence = {}) {
208
- return promise_detail::Seq<F0, F1, F2, F3, F4, F5, F6, F7, F8, F9>(
209
- std::move(f0), std::move(f1), std::move(f2), std::move(f3), std::move(f4),
210
- std::move(f5), std::move(f6), std::move(f7), std::move(f8), std::move(f9),
211
- whence);
221
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION auto Seq(F0&& f0, F1&& f1, F2&& f2,
222
+ F3&& f3, F4&& f4, F5&& f5,
223
+ F6&& f6, F7&& f7, F8&& f8,
224
+ F9&& f9,
225
+ DebugLocation whence = {}) {
226
+ return promise_detail::Seq<
227
+ std::decay_t<F0>, std::decay_t<F1>, std::decay_t<F2>, std::decay_t<F3>,
228
+ std::decay_t<F4>, std::decay_t<F5>, std::decay_t<F6>, std::decay_t<F7>,
229
+ std::decay_t<F8>, std::decay_t<F9>>(
230
+ std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F2>(f2),
231
+ std::forward<F3>(f3), std::forward<F4>(f4), std::forward<F5>(f5),
232
+ std::forward<F6>(f6), std::forward<F7>(f7), std::forward<F8>(f8),
233
+ std::forward<F9>(f9), whence);
212
234
  }
213
235
 
214
236
  template <typename F0, typename F1, typename F2, typename F3, typename F4,
215
237
  typename F5, typename F6, typename F7, typename F8, typename F9,
216
238
  typename F10>
217
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION
218
- promise_detail::Seq<F0, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10>
219
- Seq(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9,
220
- F10 f10, DebugLocation whence = {}) {
221
- return promise_detail::Seq<F0, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10>(
222
- std::move(f0), std::move(f1), std::move(f2), std::move(f3), std::move(f4),
223
- std::move(f5), std::move(f6), std::move(f7), std::move(f8), std::move(f9),
224
- std::move(f10), whence);
239
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION auto Seq(F0&& f0, F1&& f1, F2&& f2,
240
+ F3&& f3, F4&& f4, F5&& f5,
241
+ F6&& f6, F7&& f7, F8&& f8,
242
+ F9&& f9, F10&& f10,
243
+ DebugLocation whence = {}) {
244
+ return promise_detail::Seq<
245
+ std::decay_t<F0>, std::decay_t<F1>, std::decay_t<F2>, std::decay_t<F3>,
246
+ std::decay_t<F4>, std::decay_t<F5>, std::decay_t<F6>, std::decay_t<F7>,
247
+ std::decay_t<F8>, std::decay_t<F9>, std::decay_t<F10>>(
248
+ std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F2>(f2),
249
+ std::forward<F3>(f3), std::forward<F4>(f4), std::forward<F5>(f5),
250
+ std::forward<F6>(f6), std::forward<F7>(f7), std::forward<F8>(f8),
251
+ std::forward<F9>(f9), std::forward<F10>(f10), whence);
225
252
  }
226
253
 
227
254
  template <typename F0, typename F1, typename F2, typename F3, typename F4,
228
255
  typename F5, typename F6, typename F7, typename F8, typename F9,
229
256
  typename F10, typename F11>
230
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION
231
- promise_detail::Seq<F0, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11>
232
- Seq(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9,
233
- F10 f10, F11 f11, DebugLocation whence = {}) {
234
- return promise_detail::Seq<F0, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11>(
235
- std::move(f0), std::move(f1), std::move(f2), std::move(f3), std::move(f4),
236
- std::move(f5), std::move(f6), std::move(f7), std::move(f8), std::move(f9),
237
- std::move(f10), std::move(f11), whence);
257
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION auto Seq(F0&& f0, F1&& f1, F2&& f2,
258
+ F3&& f3, F4&& f4, F5&& f5,
259
+ F6&& f6, F7&& f7, F8&& f8,
260
+ F9&& f9, F10&& f10, F11&& f11,
261
+ DebugLocation whence = {}) {
262
+ return promise_detail::Seq<
263
+ std::decay_t<F0>, std::decay_t<F1>, std::decay_t<F2>, std::decay_t<F3>,
264
+ std::decay_t<F4>, std::decay_t<F5>, std::decay_t<F6>, std::decay_t<F7>,
265
+ std::decay_t<F8>, std::decay_t<F9>, std::decay_t<F10>, std::decay_t<F11>>(
266
+ std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F2>(f2),
267
+ std::forward<F3>(f3), std::forward<F4>(f4), std::forward<F5>(f5),
268
+ std::forward<F6>(f6), std::forward<F7>(f7), std::forward<F8>(f8),
269
+ std::forward<F9>(f9), std::forward<F10>(f10), std::forward<F11>(f11),
270
+ whence);
238
271
  }
239
272
 
240
273
  // Execute a sequence of operations of unknown length.
@@ -245,10 +278,12 @@ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION
245
278
  // return argument;
246
279
  template <typename Iter, typename Factory, typename Argument>
247
280
  GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION auto SeqIter(Iter begin, Iter end,
248
- Argument argument,
249
- Factory factory) {
250
- return promise_detail::SeqIter<Iter, Factory, Argument>(
251
- begin, end, std::move(factory), std::move(argument));
281
+ Argument&& argument,
282
+ Factory&& factory) {
283
+ return promise_detail::SeqIter<Iter, std::decay_t<Factory>,
284
+ std::decay_t<Argument>>(
285
+ begin, end, std::forward<Factory>(factory),
286
+ std::forward<Argument>(argument));
252
287
  }
253
288
 
254
289
  } // namespace grpc_core
@@ -18,6 +18,8 @@
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
20
  #include <tuple>
21
+ #include <type_traits>
22
+ #include <utility>
21
23
  #include <variant>
22
24
 
23
25
  #include "src/core/lib/promise/detail/join_state.h"
@@ -231,6 +233,11 @@ class TryJoin {
231
233
  return state_.PollOnce();
232
234
  }
233
235
 
236
+ void ToProto(grpc_channelz_v2_Promise* promise_proto,
237
+ upb_Arena* arena) const {
238
+ state_.ToProto(grpc_channelz_v2_Promise_TRY, promise_proto, arena);
239
+ }
240
+
234
241
  private:
235
242
  JoinState<TryJoinTraits<R>, Promises...> state_;
236
243
  };
@@ -247,15 +254,16 @@ struct WrapInStatusOrTuple {
247
254
  } // namespace promise_detail
248
255
 
249
256
  template <template <typename> class R, typename... Promises>
250
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline promise_detail::TryJoin<R,
251
- Promises...>
252
- TryJoin(Promises... promises) {
253
- return promise_detail::TryJoin<R, Promises...>(std::move(promises)...);
257
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline auto TryJoin(
258
+ Promises&&... promises) {
259
+ return promise_detail::TryJoin<R, std::decay_t<Promises>...>(
260
+ std::forward<Promises>(promises)...);
254
261
  }
255
262
 
256
263
  template <template <typename> class R, typename F>
257
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline auto TryJoin(F promise) {
258
- return Map(promise, promise_detail::WrapInStatusOrTuple<R>{});
264
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline auto TryJoin(F&& promise) {
265
+ return Map(std::forward<F>(promise),
266
+ promise_detail::WrapInStatusOrTuple<R>{});
259
267
  }
260
268
 
261
269
  } // namespace grpc_core
@@ -94,8 +94,8 @@ struct TrySeqTraitsWithSfinae {
94
94
  }
95
95
  template <typename Result, typename RunNext>
96
96
  GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION static Poll<Result>
97
- CheckResultAndRunNext(T prior, RunNext run_next) {
98
- return run_next(std::move(prior));
97
+ CheckResultAndRunNext(T&& prior, RunNext run_next) {
98
+ return run_next(std::forward<T>(prior));
99
99
  }
100
100
  };
101
101
 
@@ -122,9 +122,9 @@ struct TrySeqTraitsWithSfinae<absl::StatusOr<T>> {
122
122
  }
123
123
  template <typename Result, typename RunNext>
124
124
  GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION static Poll<Result>
125
- CheckResultAndRunNext(absl::StatusOr<T> prior, RunNext run_next) {
125
+ CheckResultAndRunNext(absl::StatusOr<T>&& prior, RunNext run_next) {
126
126
  if (!prior.ok()) return FailureStatusCast<Result>(prior.status());
127
- return run_next(std::move(prior));
127
+ return run_next(std::forward<absl::StatusOr<T>>(prior));
128
128
  }
129
129
  };
130
130
 
@@ -181,9 +181,9 @@ struct TrySeqTraitsWithSfinae<
181
181
  }
182
182
  template <typename Result, typename RunNext>
183
183
  GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION static Poll<Result>
184
- CheckResultAndRunNext(T prior, RunNext run_next) {
185
- if (!IsStatusOk(prior)) return Result(std::move(prior));
186
- return run_next(std::move(prior));
184
+ CheckResultAndRunNext(T&& prior, RunNext run_next) {
185
+ if (!IsStatusOk(prior)) return Result(std::forward<T>(prior));
186
+ return run_next(std::forward<T>(prior));
187
187
  }
188
188
  };
189
189
  template <typename T>
@@ -213,9 +213,9 @@ struct TrySeqTraitsWithSfinae<
213
213
  }
214
214
  template <typename Result, typename RunNext>
215
215
  GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION static Poll<Result>
216
- CheckResultAndRunNext(T prior, RunNext run_next) {
217
- if (!IsStatusOk(prior)) return Result(std::move(prior));
218
- return run_next(std::move(prior));
216
+ CheckResultAndRunNext(T&& prior, RunNext run_next) {
217
+ if (!IsStatusOk(prior)) return Result(std::forward<T>(prior));
218
+ return run_next(std::forward<T>(prior));
219
219
  }
220
220
  };
221
221
  template <>
@@ -241,9 +241,9 @@ struct TrySeqTraitsWithSfinae<absl::Status> {
241
241
  }
242
242
  template <typename Result, typename RunNext>
243
243
  GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION static Poll<Result>
244
- CheckResultAndRunNext(absl::Status prior, RunNext run_next) {
244
+ CheckResultAndRunNext(absl::Status&& prior, RunNext run_next) {
245
245
  if (!prior.ok()) return StatusCast<Result>(std::move(prior));
246
- return run_next(std::move(prior));
246
+ return run_next(std::forward<absl::Status>(prior));
247
247
  }
248
248
  };
249
249
 
@@ -306,66 +306,77 @@ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline F TrySeq(F functor) {
306
306
  }
307
307
 
308
308
  template <typename F0, typename F1>
309
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline promise_detail::TrySeq<F0, F1>
310
- TrySeq(F0 f0, F1 f1, DebugLocation whence = {}) {
311
- return promise_detail::TrySeq<F0, F1>(std::move(f0), std::move(f1), whence);
309
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline auto TrySeq(
310
+ F0&& f0, F1&& f1, DebugLocation whence = {}) {
311
+ return promise_detail::TrySeq<std::decay_t<F0>, std::decay_t<F1>>(
312
+ std::forward<F0>(f0), std::forward<F1>(f1), whence);
312
313
  }
313
314
 
314
315
  template <typename F0, typename F1, typename F2>
315
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline promise_detail::TrySeq<F0, F1, F2>
316
- TrySeq(F0 f0, F1 f1, F2 f2, DebugLocation whence = {}) {
317
- return promise_detail::TrySeq<F0, F1, F2>(std::move(f0), std::move(f1),
318
- std::move(f2), whence);
316
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline auto TrySeq(
317
+ F0&& f0, F1&& f1, F2&& f2, DebugLocation whence = {}) {
318
+ return promise_detail::TrySeq<std::decay_t<F0>, std::decay_t<F1>,
319
+ std::decay_t<F2>>(
320
+ std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F2>(f2), whence);
319
321
  }
320
322
 
321
323
  template <typename F0, typename F1, typename F2, typename F3>
322
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline promise_detail::TrySeq<F0, F1, F2,
323
- F3>
324
- TrySeq(F0 f0, F1 f1, F2 f2, F3 f3, DebugLocation whence = {}) {
325
- return promise_detail::TrySeq<F0, F1, F2, F3>(
326
- std::move(f0), std::move(f1), std::move(f2), std::move(f3), whence);
324
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline auto TrySeq(
325
+ F0&& f0, F1&& f1, F2&& f2, F3&& f3, DebugLocation whence = {}) {
326
+ return promise_detail::TrySeq<std::decay_t<F0>, std::decay_t<F1>,
327
+ std::decay_t<F2>, std::decay_t<F3>>(
328
+ std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F2>(f2),
329
+ std::forward<F3>(f3), whence);
327
330
  }
328
331
 
329
332
  template <typename F0, typename F1, typename F2, typename F3, typename F4>
330
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline promise_detail::TrySeq<F0, F1, F2,
331
- F3, F4>
332
- TrySeq(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, DebugLocation whence = {}) {
333
- return promise_detail::TrySeq<F0, F1, F2, F3, F4>(
334
- std::move(f0), std::move(f1), std::move(f2), std::move(f3), std::move(f4),
335
- whence);
333
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline auto TrySeq(
334
+ F0&& f0, F1&& f1, F2&& f2, F3&& f3, F4&& f4, DebugLocation whence = {}) {
335
+ return promise_detail::TrySeq<std::decay_t<F0>, std::decay_t<F1>,
336
+ std::decay_t<F2>, std::decay_t<F3>,
337
+ std::decay_t<F4>>(
338
+ std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F2>(f2),
339
+ std::forward<F3>(f3), std::forward<F4>(f4), whence);
336
340
  }
337
341
 
338
342
  template <typename F0, typename F1, typename F2, typename F3, typename F4,
339
343
  typename F5>
340
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION
341
- promise_detail::TrySeq<F0, F1, F2, F3, F4, F5>
342
- TrySeq(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5,
343
- DebugLocation whence = {}) {
344
- return promise_detail::TrySeq<F0, F1, F2, F3, F4, F5>(
345
- std::move(f0), std::move(f1), std::move(f2), std::move(f3), std::move(f4),
346
- std::move(f5), whence);
344
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION auto TrySeq(F0&& f0, F1&& f1, F2&& f2,
345
+ F3&& f3, F4&& f4, F5&& f5,
346
+ DebugLocation whence = {}) {
347
+ return promise_detail::TrySeq<std::decay_t<F0>, std::decay_t<F1>,
348
+ std::decay_t<F2>, std::decay_t<F3>,
349
+ std::decay_t<F4>, std::decay_t<F5>>(
350
+ std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F2>(f2),
351
+ std::forward<F3>(f3), std::forward<F4>(f4), std::forward<F5>(f5), whence);
347
352
  }
348
353
 
349
354
  template <typename F0, typename F1, typename F2, typename F3, typename F4,
350
355
  typename F5, typename F6>
351
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION
352
- promise_detail::TrySeq<F0, F1, F2, F3, F4, F5, F6>
353
- TrySeq(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6,
354
- DebugLocation whence = {}) {
355
- return promise_detail::TrySeq<F0, F1, F2, F3, F4, F5, F6>(
356
- std::move(f0), std::move(f1), std::move(f2), std::move(f3), std::move(f4),
357
- std::move(f5), std::move(f6), whence);
356
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION auto TrySeq(F0&& f0, F1&& f1, F2&& f2,
357
+ F3&& f3, F4&& f4, F5&& f5,
358
+ F6&& f6,
359
+ DebugLocation whence = {}) {
360
+ return promise_detail::TrySeq<
361
+ std::decay_t<F0>, std::decay_t<F1>, std::decay_t<F2>, std::decay_t<F3>,
362
+ std::decay_t<F4>, std::decay_t<F5>, std::decay_t<F6>>(
363
+ std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F2>(f2),
364
+ std::forward<F3>(f3), std::forward<F4>(f4), std::forward<F5>(f5),
365
+ std::forward<F6>(f6), whence);
358
366
  }
359
367
 
360
368
  template <typename F0, typename F1, typename F2, typename F3, typename F4,
361
369
  typename F5, typename F6, typename F7>
362
- GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION
363
- promise_detail::TrySeq<F0, F1, F2, F3, F4, F5, F6, F7>
364
- TrySeq(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
365
- DebugLocation whence = {}) {
366
- return promise_detail::TrySeq<F0, F1, F2, F3, F4, F5, F6, F7>(
367
- std::move(f0), std::move(f1), std::move(f2), std::move(f3), std::move(f4),
368
- std::move(f5), std::move(f6), std::move(f7), whence);
370
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION auto TrySeq(F0&& f0, F1&& f1, F2&& f2,
371
+ F3&& f3, F4&& f4, F5&& f5,
372
+ F6&& f6, F7&& f7,
373
+ DebugLocation whence = {}) {
374
+ return promise_detail::TrySeq<
375
+ std::decay_t<F0>, std::decay_t<F1>, std::decay_t<F2>, std::decay_t<F3>,
376
+ std::decay_t<F4>, std::decay_t<F5>, std::decay_t<F6>, std::decay_t<F7>>(
377
+ std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F2>(f2),
378
+ std::forward<F3>(f3), std::forward<F4>(f4), std::forward<F5>(f5),
379
+ std::forward<F6>(f6), std::forward<F7>(f7), whence);
369
380
  }
370
381
 
371
382
  // Try a sequence of operations of unknown length.
@@ -378,18 +389,23 @@ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION
378
389
  // return argument;
379
390
  template <typename Iter, typename Factory, typename Argument>
380
391
  GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION auto TrySeqIter(Iter begin, Iter end,
381
- Argument argument,
382
- Factory factory) {
383
- return promise_detail::TrySeqIter<Iter, Factory, Argument>(
384
- begin, end, std::move(factory), std::move(argument));
392
+ Argument&& argument,
393
+ Factory&& factory) {
394
+ return promise_detail::TrySeqIter<Iter, std::decay_t<Factory>,
395
+ std::decay_t<Argument>>(
396
+ begin, end, std::forward<Factory>(factory),
397
+ std::forward<Argument>(argument));
385
398
  }
386
399
 
387
400
  template <typename Container, typename Factory, typename Argument>
388
- auto TrySeqContainer(Container container, Argument argument, Factory factory) {
389
- using Result =
390
- typename promise_detail::TrySeqContainerResultTraits<Container, Factory,
391
- Argument>::Result;
392
- return Result(std::move(container), std::move(factory), std::move(argument));
401
+ auto TrySeqContainer(Container&& container, Argument&& argument,
402
+ Factory&& factory) {
403
+ using Result = typename promise_detail::TrySeqContainerResultTraits<
404
+ std::decay_t<Container>, std::decay_t<Factory>,
405
+ std::decay_t<Argument>>::Result;
406
+ return Result(std::forward<Container>(container),
407
+ std::forward<Factory>(factory),
408
+ std::forward<Argument>(argument));
393
409
  }
394
410
 
395
411
  } // namespace grpc_core
@@ -100,3 +100,10 @@ extern "C" void grpc_resource_quota_set_max_threads(
100
100
  ->thread_quota()
101
101
  ->SetMax(new_max_threads);
102
102
  }
103
+
104
+ extern "C" void grpc_resource_quota_set_max_outstanding_streams(
105
+ grpc_resource_quota* resource_quota, int new_max_outstanding_streams) {
106
+ grpc_core::ResourceQuota::FromC(resource_quota)
107
+ ->stream_quota()
108
+ ->SetMaxOutstandingStreams(new_max_outstanding_streams);
109
+ }