grpc 1.78.1 → 1.80.0

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 (426) 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/version.rb +1 -1
  423. data/src/ruby/pb/generate_proto_ruby.sh +1 -1
  424. metadata +42 -6
  425. data/src/core/ext/transport/chttp2/transport/security_frame.cc +0 -31
  426. data/src/core/handshaker/security/legacy_secure_endpoint.cc +0 -597
@@ -309,7 +309,7 @@ struct Operator {
309
309
  // Return the result of the poll.
310
310
  // If the promise finishes, also destroy the promise data!
311
311
  Poll<ResultOr<T>> (*promise_init)(void* promise_data, void* call_data,
312
- void* channel_data, T value);
312
+ void* channel_data, T&& value);
313
313
  // Poll the promise data for this filter.
314
314
  // If the promise finishes, also destroy the promise data!
315
315
  // Note that if the promise always finishes on the first poll, then supplying
@@ -505,18 +505,19 @@ template <typename FilterType, typename T,
505
505
  struct AddOpImpl<FilterType, T,
506
506
  void (FilterType::Call::*)(typename T::element_type&), impl> {
507
507
  static void Add(FilterType* channel_data, size_t call_offset, Layout<T>& to) {
508
- to.Add(0, 0,
509
- Operator<T>{
510
- channel_data,
511
- call_offset,
512
- [](void*, void* call_data, void*, T value) -> Poll<ResultOr<T>> {
513
- (static_cast<typename FilterType::Call*>(call_data)->*impl)(
514
- *value);
515
- return ResultOr<T>{std::move(value), nullptr};
516
- },
517
- nullptr,
518
- nullptr,
519
- });
508
+ to.Add(
509
+ 0, 0,
510
+ Operator<T>{
511
+ channel_data,
512
+ call_offset,
513
+ [](void*, void* call_data, void*, T&& value) -> Poll<ResultOr<T>> {
514
+ (static_cast<typename FilterType::Call*>(call_data)->*impl)(
515
+ *value);
516
+ return ResultOr<T>{std::forward<T>(value), nullptr};
517
+ },
518
+ nullptr,
519
+ nullptr,
520
+ });
520
521
  }
521
522
  };
522
523
 
@@ -527,18 +528,19 @@ struct AddOpImpl<FilterType, T,
527
528
  void (FilterType::Call::*)(const typename T::element_type&),
528
529
  impl> {
529
530
  static void Add(FilterType* channel_data, size_t call_offset, Layout<T>& to) {
530
- to.Add(0, 0,
531
- Operator<T>{
532
- channel_data,
533
- call_offset,
534
- [](void*, void* call_data, void*, T value) -> Poll<ResultOr<T>> {
535
- (static_cast<typename FilterType::Call*>(call_data)->*impl)(
536
- *value);
537
- return ResultOr<T>{std::move(value), nullptr};
538
- },
539
- nullptr,
540
- nullptr,
541
- });
531
+ to.Add(
532
+ 0, 0,
533
+ Operator<T>{
534
+ channel_data,
535
+ call_offset,
536
+ [](void*, void* call_data, void*, T&& value) -> Poll<ResultOr<T>> {
537
+ (static_cast<typename FilterType::Call*>(call_data)->*impl)(
538
+ *value);
539
+ return ResultOr<T>{std::forward<T>(value), nullptr};
540
+ },
541
+ nullptr,
542
+ nullptr,
543
+ });
542
544
  }
543
545
  };
544
546
 
@@ -555,10 +557,10 @@ struct AddOpImpl<
555
557
  channel_data,
556
558
  call_offset,
557
559
  [](void*, void* call_data, void* channel_data,
558
- T value) -> Poll<ResultOr<T>> {
560
+ T&& value) -> Poll<ResultOr<T>> {
559
561
  (static_cast<typename FilterType::Call*>(call_data)->*impl)(
560
562
  *value, static_cast<FilterType*>(channel_data));
561
- return ResultOr<T>{std::move(value), nullptr};
563
+ return ResultOr<T>{std::forward<T>(value), nullptr};
562
564
  },
563
565
  nullptr,
564
566
  nullptr,
@@ -580,10 +582,10 @@ struct AddOpImpl<FilterType, T,
580
582
  channel_data,
581
583
  call_offset,
582
584
  [](void*, void* call_data, void* channel_data,
583
- T value) -> Poll<ResultOr<T>> {
585
+ T&& value) -> Poll<ResultOr<T>> {
584
586
  (static_cast<typename FilterType::Call*>(call_data)->*impl)(
585
587
  *value, static_cast<FilterType*>(channel_data));
586
- return ResultOr<T>{std::move(value), nullptr};
588
+ return ResultOr<T>{std::forward<T>(value), nullptr};
587
589
  },
588
590
  nullptr,
589
591
  nullptr,
@@ -602,10 +604,11 @@ struct AddOpImpl<FilterType, T, T (FilterType::Call::*)(T, FilterType*), impl> {
602
604
  channel_data,
603
605
  call_offset,
604
606
  [](void*, void* call_data, void* channel_data,
605
- T value) -> Poll<ResultOr<T>> {
607
+ T&& value) -> Poll<ResultOr<T>> {
606
608
  return ResultOr<T>{
607
609
  (static_cast<typename FilterType::Call*>(call_data)->*impl)(
608
- std::move(value), static_cast<FilterType*>(channel_data)),
610
+ std::forward<T>(value),
611
+ static_cast<FilterType*>(channel_data)),
609
612
  nullptr};
610
613
  },
611
614
  nullptr,
@@ -626,11 +629,11 @@ struct AddOpImpl<FilterType, T,
626
629
  Operator<T>{
627
630
  channel_data,
628
631
  call_offset,
629
- [](void*, void* call_data, void*, T value) -> Poll<ResultOr<T>> {
632
+ [](void*, void* call_data, void*, T&& value) -> Poll<ResultOr<T>> {
630
633
  auto r =
631
634
  (static_cast<typename FilterType::Call*>(call_data)->*impl)(
632
635
  *value);
633
- if (r.ok()) return ResultOr<T>{std::move(value), nullptr};
636
+ if (r.ok()) return ResultOr<T>{std::forward<T>(value), nullptr};
634
637
  return ResultOr<T>{
635
638
  nullptr, StatusCast<ServerMetadataHandle>(std::move(r))};
636
639
  },
@@ -653,11 +656,11 @@ struct AddOpImpl<
653
656
  Operator<T>{
654
657
  channel_data,
655
658
  call_offset,
656
- [](void*, void* call_data, void*, T value) -> Poll<ResultOr<T>> {
659
+ [](void*, void* call_data, void*, T&& value) -> Poll<ResultOr<T>> {
657
660
  auto r =
658
661
  (static_cast<typename FilterType::Call*>(call_data)->*impl)(
659
662
  *value);
660
- if (r.ok()) return ResultOr<T>{std::move(value), nullptr};
663
+ if (r.ok()) return ResultOr<T>{std::forward<T>(value), nullptr};
661
664
  return ResultOr<T>{
662
665
  nullptr, StatusCast<ServerMetadataHandle>(std::move(r))};
663
666
  },
@@ -682,11 +685,13 @@ struct AddOpImpl<FilterType, T,
682
685
  channel_data,
683
686
  call_offset,
684
687
  [](void*, void* call_data, void* channel_data,
685
- T value) -> Poll<ResultOr<T>> {
688
+ T&& value) -> Poll<ResultOr<T>> {
686
689
  auto r =
687
690
  (static_cast<typename FilterType::Call*>(call_data)->*impl)(
688
691
  *value, static_cast<FilterType*>(channel_data));
689
- if (IsStatusOk(r)) return ResultOr<T>{std::move(value), nullptr};
692
+ if (IsStatusOk(r)) {
693
+ return ResultOr<T>{std::forward<T>(value), nullptr};
694
+ }
690
695
  return ResultOr<T>{
691
696
  nullptr, StatusCast<ServerMetadataHandle>(std::move(r))};
692
697
  },
@@ -711,11 +716,13 @@ struct AddOpImpl<FilterType, T,
711
716
  channel_data,
712
717
  call_offset,
713
718
  [](void*, void* call_data, void* channel_data,
714
- T value) -> Poll<ResultOr<T>> {
719
+ T&& value) -> Poll<ResultOr<T>> {
715
720
  auto r =
716
721
  (static_cast<typename FilterType::Call*>(call_data)->*impl)(
717
722
  *value, static_cast<FilterType*>(channel_data));
718
- if (IsStatusOk(r)) return ResultOr<T>{std::move(value), nullptr};
723
+ if (IsStatusOk(r)) {
724
+ return ResultOr<T>{std::forward<T>(value), nullptr};
725
+ }
719
726
  return ResultOr<T>{
720
727
  nullptr, StatusCast<ServerMetadataHandle>(std::move(r))};
721
728
  },
@@ -738,10 +745,11 @@ struct AddOpImpl<FilterType, T,
738
745
  channel_data,
739
746
  call_offset,
740
747
  [](void*, void* call_data, void* channel_data,
741
- T value) -> Poll<ResultOr<T>> {
748
+ T&& value) -> Poll<ResultOr<T>> {
742
749
  auto r =
743
750
  (static_cast<typename FilterType::Call*>(call_data)->*impl)(
744
- std::move(value), static_cast<FilterType*>(channel_data));
751
+ std::forward<T>(value),
752
+ static_cast<FilterType*>(channel_data));
745
753
  if (IsStatusOk(r)) return ResultOr<T>{std::move(*r), nullptr};
746
754
  return ResultOr<T>{
747
755
  nullptr, StatusCast<ServerMetadataHandle>(std::move(r))};
@@ -766,11 +774,13 @@ struct AddOpImpl<FilterType, T,
766
774
  Operator<T>{
767
775
  channel_data,
768
776
  call_offset,
769
- [](void*, void* call_data, void*, T value) -> Poll<ResultOr<T>> {
777
+ [](void*, void* call_data, void*, T&& value) -> Poll<ResultOr<T>> {
770
778
  auto r =
771
779
  (static_cast<typename FilterType::Call*>(call_data)->*impl)(
772
780
  *value);
773
- if (r == nullptr) return ResultOr<T>{std::move(value), nullptr};
781
+ if (r == nullptr) {
782
+ return ResultOr<T>{std::forward<T>(value), nullptr};
783
+ }
774
784
  return ResultOr<T>{
775
785
  nullptr, StatusCast<ServerMetadataHandle>(std::move(r))};
776
786
  },
@@ -794,11 +804,13 @@ struct AddOpImpl<FilterType, T,
794
804
  Operator<T>{
795
805
  channel_data,
796
806
  call_offset,
797
- [](void*, void* call_data, void*, T value) -> Poll<ResultOr<T>> {
807
+ [](void*, void* call_data, void*, T&& value) -> Poll<ResultOr<T>> {
798
808
  auto r =
799
809
  (static_cast<typename FilterType::Call*>(call_data)->*impl)(
800
810
  *value);
801
- if (r == nullptr) return ResultOr<T>{std::move(value), nullptr};
811
+ if (r == nullptr) {
812
+ return ResultOr<T>{std::forward<T>(value), nullptr};
813
+ }
802
814
  return ResultOr<T>{
803
815
  nullptr, StatusCast<ServerMetadataHandle>(std::move(r))};
804
816
  },
@@ -823,11 +835,13 @@ struct AddOpImpl<FilterType, T,
823
835
  channel_data,
824
836
  call_offset,
825
837
  [](void*, void* call_data, void* channel_data,
826
- T value) -> Poll<ResultOr<T>> {
838
+ T&& value) -> Poll<ResultOr<T>> {
827
839
  auto r =
828
840
  (static_cast<typename FilterType::Call*>(call_data)->*impl)(
829
841
  *value, static_cast<FilterType*>(channel_data));
830
- if (r == nullptr) return ResultOr<T>{std::move(value), nullptr};
842
+ if (r == nullptr) {
843
+ return ResultOr<T>{std::forward<T>(value), nullptr};
844
+ }
831
845
  return ResultOr<T>{
832
846
  nullptr, StatusCast<ServerMetadataHandle>(std::move(r))};
833
847
  },
@@ -852,11 +866,13 @@ struct AddOpImpl<FilterType, T,
852
866
  channel_data,
853
867
  call_offset,
854
868
  [](void*, void* call_data, void* channel_data,
855
- T value) -> Poll<ResultOr<T>> {
869
+ T&& value) -> Poll<ResultOr<T>> {
856
870
  auto r =
857
871
  (static_cast<typename FilterType::Call*>(call_data)->*impl)(
858
872
  *value, static_cast<FilterType*>(channel_data));
859
- if (r == nullptr) return ResultOr<T>{std::move(value), nullptr};
873
+ if (r == nullptr) {
874
+ return ResultOr<T>{std::forward<T>(value), nullptr};
875
+ }
860
876
  return ResultOr<T>{
861
877
  nullptr, StatusCast<ServerMetadataHandle>(std::move(r))};
862
878
  },
@@ -875,8 +891,9 @@ struct AddOpImpl<
875
891
  static void Add(FilterType* channel_data, size_t call_offset, Layout<T>& to) {
876
892
  class Promise {
877
893
  public:
878
- Promise(T value, typename FilterType::Call* call_data, FilterType*)
879
- : value_(std::move(value)), impl_((call_data->*impl)(*value_)) {}
894
+ Promise(T&& value, typename FilterType::Call* call_data, FilterType*)
895
+ : value_(std::forward<T>(value)),
896
+ impl_((call_data->*impl)(*value_)) {}
880
897
 
881
898
  Poll<ResultOr<T>> PollOnce() {
882
899
  auto p = impl_();
@@ -899,9 +916,9 @@ struct AddOpImpl<
899
916
  channel_data,
900
917
  call_offset,
901
918
  [](void* promise_data, void* call_data, void* channel_data,
902
- T value) -> Poll<ResultOr<T>> {
919
+ T&& value) -> Poll<ResultOr<T>> {
903
920
  auto* promise = new (promise_data)
904
- Promise(std::move(value),
921
+ Promise(std::forward<T>(value),
905
922
  static_cast<typename FilterType::Call*>(call_data),
906
923
  static_cast<FilterType*>(channel_data));
907
924
  return promise->PollOnce();
@@ -927,9 +944,9 @@ struct AddOpImpl<
927
944
  static void Add(FilterType* channel_data, size_t call_offset, Layout<T>& to) {
928
945
  class Promise {
929
946
  public:
930
- Promise(T value, typename FilterType::Call* call_data,
947
+ Promise(T&& value, typename FilterType::Call* call_data,
931
948
  FilterType* channel_data)
932
- : value_(std::move(value)),
949
+ : value_(std::forward<T>(value)),
933
950
  impl_((call_data->*impl)(*value_, channel_data)) {}
934
951
 
935
952
  Poll<ResultOr<T>> PollOnce() {
@@ -953,9 +970,9 @@ struct AddOpImpl<
953
970
  channel_data,
954
971
  call_offset,
955
972
  [](void* promise_data, void* call_data, void* channel_data,
956
- T value) -> Poll<ResultOr<T>> {
973
+ T&& value) -> Poll<ResultOr<T>> {
957
974
  auto* promise = new (promise_data)
958
- Promise(std::move(value),
975
+ Promise(std::forward<T>(value),
959
976
  static_cast<typename FilterType::Call*>(call_data),
960
977
  static_cast<FilterType*>(channel_data));
961
978
  return promise->PollOnce();
@@ -1004,9 +1021,9 @@ struct AddOpImpl<FilterType, T, R (FilterType::Call::*)(T, FilterType*), impl,
1004
1021
  #else
1005
1022
  class Promise {
1006
1023
  public:
1007
- Promise(T value, typename FilterType::Call* call_data,
1024
+ Promise(T&& value, typename FilterType::Call* call_data,
1008
1025
  FilterType* channel_data)
1009
- : impl_((call_data->*impl)(std::move(value), channel_data)) {}
1026
+ : impl_((call_data->*impl)(std::forward<T>(value), channel_data)) {}
1010
1027
 
1011
1028
  Poll<ResultOr<T>> PollOnce() {
1012
1029
  auto p = impl_();
@@ -1027,9 +1044,9 @@ struct AddOpImpl<FilterType, T, R (FilterType::Call::*)(T, FilterType*), impl,
1027
1044
  channel_data,
1028
1045
  call_offset,
1029
1046
  [](void* promise_data, void* call_data, void* channel_data,
1030
- T value) -> Poll<ResultOr<T>> {
1047
+ T&& value) -> Poll<ResultOr<T>> {
1031
1048
  auto* promise = new (promise_data)
1032
- Promise(std::move(value),
1049
+ Promise(std::forward<T>(value),
1033
1050
  static_cast<typename FilterType::Call*>(call_data),
1034
1051
  static_cast<FilterType*>(channel_data));
1035
1052
  return promise->PollOnce();
@@ -1437,7 +1454,7 @@ class OperationExecutor {
1437
1454
  // Start executing a layout. May allocate space to store the relevant promise.
1438
1455
  // Returns the result of the first poll.
1439
1456
  // If the promise finishes, also destroy the promise data.
1440
- Poll<ResultOr<T>> Start(const Layout<T>* layout, T input, void* call_data);
1457
+ Poll<ResultOr<T>> Start(const Layout<T>* layout, T&& input, void* call_data);
1441
1458
  // Continue executing a layout. Returns the result of the next poll.
1442
1459
  // If the promise finishes, also destroy the promise data.
1443
1460
  Poll<ResultOr<T>> Step(void* call_data);
@@ -1450,7 +1467,7 @@ class OperationExecutor {
1450
1467
  // If this op finishes immediately then we iterative move to the next step.
1451
1468
  // If we reach the end up the ops, we return the overall poll result,
1452
1469
  // otherwise we return Pending.
1453
- Poll<ResultOr<T>> InitStep(T input, void* call_data);
1470
+ Poll<ResultOr<T>> InitStep(T&& input, void* call_data);
1454
1471
  // Continue polling on the current step of the layout.
1455
1472
  // Called on the next poll after InitStep returns pending.
1456
1473
  // If the promise is still pending, returns this.
@@ -1474,31 +1491,32 @@ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline OperationExecutor<
1474
1491
 
1475
1492
  template <typename T>
1476
1493
  GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline Poll<ResultOr<T>>
1477
- OperationExecutor<T>::Start(const Layout<T>* layout, T input, void* call_data) {
1494
+ OperationExecutor<T>::Start(const Layout<T>* layout, T&& input,
1495
+ void* call_data) {
1478
1496
  ops_ = layout->ops.data();
1479
1497
  end_ops_ = ops_ + layout->ops.size();
1480
1498
  if (layout->promise_size == 0) {
1481
1499
  // No call state ==> instantaneously ready
1482
- auto r = InitStep(std::move(input), call_data);
1500
+ auto r = InitStep(std::forward<T>(input), call_data);
1483
1501
  GRPC_CHECK(r.ready());
1484
1502
  return r;
1485
1503
  }
1486
1504
  promise_data_ =
1487
1505
  gpr_malloc_aligned(layout->promise_size, layout->promise_alignment);
1488
- return InitStep(std::move(input), call_data);
1506
+ return InitStep(std::forward<T>(input), call_data);
1489
1507
  }
1490
1508
 
1491
1509
  template <typename T>
1492
1510
  GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline Poll<ResultOr<T>>
1493
- OperationExecutor<T>::InitStep(T input, void* call_data) {
1511
+ OperationExecutor<T>::InitStep(T&& input, void* call_data) {
1494
1512
  GRPC_CHECK(input != nullptr);
1495
1513
  while (true) {
1496
1514
  if (ops_ == end_ops_) {
1497
- return ResultOr<T>{std::move(input), nullptr};
1515
+ return ResultOr<T>{std::forward<T>(input), nullptr};
1498
1516
  }
1499
1517
  auto p =
1500
1518
  ops_->promise_init(promise_data_, Offset(call_data, ops_->call_offset),
1501
- ops_->channel_data, std::move(input));
1519
+ ops_->channel_data, std::forward<T>(input));
1502
1520
  if (auto* r = p.value_if_ready()) {
1503
1521
  if (r->ok == nullptr) {
1504
1522
  ops_ = end_ops_;
@@ -1556,7 +1574,8 @@ class ServerTrailingMetadataInterceptor {
1556
1574
  }
1557
1575
  };
1558
1576
 
1559
- explicit ServerTrailingMetadataInterceptor(Fn fn) : fn_(std::move(fn)) {}
1577
+ explicit ServerTrailingMetadataInterceptor(Fn&& fn)
1578
+ : fn_(std::forward<Fn>(fn)) {}
1560
1579
 
1561
1580
  private:
1562
1581
  GPR_NO_UNIQUE_ADDRESS Fn fn_;
@@ -1583,7 +1602,8 @@ class ClientInitialMetadataInterceptor {
1583
1602
  }
1584
1603
  };
1585
1604
 
1586
- explicit ClientInitialMetadataInterceptor(Fn fn) : fn_(std::move(fn)) {}
1605
+ explicit ClientInitialMetadataInterceptor(Fn&& fn)
1606
+ : fn_(std::forward<Fn>(fn)) {}
1587
1607
 
1588
1608
  private:
1589
1609
  GPR_NO_UNIQUE_ADDRESS Fn fn_;
@@ -1683,9 +1703,9 @@ struct TrySeqTraitsWithSfinae<filters_detail::NextMessage<on_progress>> {
1683
1703
  }
1684
1704
  template <typename Result, typename RunNext>
1685
1705
  GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION static Poll<Result>
1686
- CheckResultAndRunNext(WrappedType prior, RunNext run_next) {
1706
+ CheckResultAndRunNext(WrappedType&& prior, RunNext run_next) {
1687
1707
  if (!prior.ok()) return WrappedType(prior.status());
1688
- return run_next(std::move(prior));
1708
+ return run_next(std::forward<WrappedType>(prior));
1689
1709
  }
1690
1710
  };
1691
1711
  } // namespace promise_detail
@@ -1715,7 +1735,8 @@ class CallFilters {
1715
1735
  friend class CallFilters;
1716
1736
  friend class StackBuilder;
1717
1737
  friend class StackTestSpouse;
1718
- explicit Stack(filters_detail::StackData data) : data_(std::move(data)) {}
1738
+ explicit Stack(filters_detail::StackData&& data)
1739
+ : data_(std::forward<filters_detail::StackData>(data)) {}
1719
1740
  const filters_detail::StackData data_;
1720
1741
  };
1721
1742
 
@@ -1754,17 +1775,19 @@ class CallFilters {
1754
1775
  }
1755
1776
 
1756
1777
  template <typename Fn>
1757
- void AddOnClientInitialMetadata(Fn fn) {
1778
+ void AddOnClientInitialMetadata(Fn&& fn) {
1758
1779
  auto filter = std::make_unique<
1759
- filters_detail::ClientInitialMetadataInterceptor<Fn>>(std::move(fn));
1780
+ filters_detail::ClientInitialMetadataInterceptor<std::decay_t<Fn>>>(
1781
+ std::forward<Fn>(fn));
1760
1782
  Add(filter.get());
1761
1783
  AddOwnedObject(std::move(filter));
1762
1784
  }
1763
1785
 
1764
1786
  template <typename Fn>
1765
- void AddOnServerTrailingMetadata(Fn fn) {
1787
+ void AddOnServerTrailingMetadata(Fn&& fn) {
1766
1788
  auto filter = std::make_unique<
1767
- filters_detail::ServerTrailingMetadataInterceptor<Fn>>(std::move(fn));
1789
+ filters_detail::ServerTrailingMetadataInterceptor<std::decay_t<Fn>>>(
1790
+ std::forward<Fn>(fn));
1768
1791
  Add(filter.get());
1769
1792
  AddOwnedObject(std::move(filter));
1770
1793
  }