grpc 1.48.0-x86_64-linux → 1.49.1-x86_64-linux

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (721) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +104 -41
  3. data/include/grpc/event_engine/event_engine.h +19 -16
  4. data/include/grpc/impl/codegen/grpc_types.h +3 -8
  5. data/include/grpc/impl/codegen/port_platform.h +0 -8
  6. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +3 -3
  7. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +2 -2
  8. data/src/core/ext/filters/client_channel/client_channel.cc +125 -200
  9. data/src/core/ext/filters/client_channel/client_channel.h +15 -8
  10. data/src/core/ext/filters/client_channel/client_channel_factory.cc +0 -29
  11. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -10
  12. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  13. data/src/core/ext/filters/client_channel/config_selector.h +12 -4
  14. data/src/core/ext/filters/client_channel/connector.h +4 -5
  15. data/src/core/ext/filters/client_channel/http_proxy.cc +53 -65
  16. data/src/core/ext/filters/client_channel/http_proxy.h +12 -9
  17. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +14 -12
  18. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +6 -6
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +102 -131
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -3
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +5 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -2
  24. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +169 -63
  26. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +25 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +15 -19
  28. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +66 -78
  29. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +44 -44
  30. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +6 -5
  31. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +65 -77
  32. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +15 -14
  33. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +19 -14
  34. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +63 -67
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +40 -49
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +81 -97
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +53 -61
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +171 -102
  39. data/src/core/ext/filters/client_channel/proxy_mapper.h +13 -14
  40. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +19 -16
  41. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -7
  42. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +4 -8
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +431 -145
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +170 -99
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -7
  46. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -15
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +7 -17
  48. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +11 -0
  49. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +38 -17
  50. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
  51. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +5 -6
  52. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -13
  53. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +162 -165
  54. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +37 -30
  55. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -10
  56. data/src/core/ext/filters/client_channel/retry_filter.cc +0 -7
  57. data/src/core/ext/filters/client_channel/retry_service_config.cc +30 -19
  58. data/src/core/ext/filters/client_channel/retry_service_config.h +6 -9
  59. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +6 -7
  60. data/src/core/ext/filters/client_channel/subchannel.cc +49 -89
  61. data/src/core/ext/filters/client_channel/subchannel.h +8 -8
  62. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +1 -1
  63. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
  64. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -25
  65. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +3 -4
  66. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -6
  67. data/src/core/ext/filters/deadline/deadline_filter.h +2 -3
  68. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -3
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +1 -1
  70. data/src/core/ext/filters/fault_injection/service_config_parser.cc +17 -12
  71. data/src/core/ext/filters/fault_injection/service_config_parser.h +4 -5
  72. data/src/core/ext/filters/http/client/http_client_filter.cc +2 -3
  73. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  74. data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
  75. data/src/core/ext/filters/http/client_authority_filter.h +1 -1
  76. data/src/core/ext/filters/http/server/http_server_filter.cc +2 -3
  77. data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
  78. data/src/core/ext/filters/message_size/message_size_filter.cc +13 -7
  79. data/src/core/ext/filters/message_size/message_size_filter.h +3 -6
  80. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +16 -12
  81. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -6
  82. data/src/core/ext/filters/server_config_selector/server_config_selector.h +5 -0
  83. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +3 -5
  84. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +35 -62
  85. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +62 -89
  86. data/src/core/ext/transport/chttp2/server/chttp2_server.h +4 -6
  87. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +130 -165
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -2
  89. data/src/core/ext/transport/chttp2/transport/flow_control.cc +67 -2
  90. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
  91. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  92. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +25 -8
  93. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -0
  94. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -1
  95. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +8 -2
  96. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -10
  97. data/src/core/ext/transport/chttp2/transport/internal.h +2 -1
  98. data/src/core/ext/transport/inproc/inproc_transport.cc +40 -74
  99. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  100. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  101. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +4 -4
  102. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +24 -8
  103. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  104. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  105. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  106. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  107. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  108. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  109. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  110. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  111. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  112. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  113. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  114. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  115. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  116. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  117. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  118. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  119. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  120. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
  121. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  122. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  123. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +21 -19
  124. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +124 -34
  125. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  126. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  127. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +23 -22
  128. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +153 -48
  129. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  130. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  131. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  132. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  133. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  134. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  135. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +7 -7
  136. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +42 -14
  137. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  138. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  139. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  140. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  141. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  142. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  143. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  144. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  145. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  146. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  149. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  150. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  151. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +9 -9
  152. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +54 -18
  153. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  154. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  155. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +21 -20
  156. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +117 -44
  157. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  158. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  159. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  160. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  161. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +6 -2
  162. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  163. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  164. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  165. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  166. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  167. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  168. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +5 -5
  169. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +36 -12
  170. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  171. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  172. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  173. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  174. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +37 -13
  175. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +170 -15
  176. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  177. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  178. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +1 -1
  179. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +6 -2
  180. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  181. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  182. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  183. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  184. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  185. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  186. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  187. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  188. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -9
  189. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +100 -14
  190. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -22
  191. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +36 -77
  192. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +121 -76
  193. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +647 -163
  194. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  195. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  196. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  197. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  198. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +1 -1
  199. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -2
  200. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  201. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  202. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  203. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  204. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  205. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  206. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  207. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  208. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  209. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  210. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  211. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  212. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  213. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  214. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  215. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  216. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  217. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  218. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +1 -1
  219. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +6 -2
  220. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  221. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  222. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  223. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  224. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  225. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  226. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  227. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  228. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +1 -1
  229. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +6 -2
  230. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +35 -27
  231. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +177 -52
  232. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +6 -2
  233. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +1 -1
  234. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +6 -2
  235. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  236. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  237. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  238. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  239. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +5 -5
  240. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +42 -14
  241. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  242. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  243. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  244. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  245. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +131 -16
  246. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +632 -12
  247. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  248. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  249. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  250. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  251. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  252. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  253. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  254. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  255. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  256. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  257. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  258. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  259. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  260. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  261. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  262. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  263. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  264. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  265. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  266. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  267. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  268. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  269. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  270. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  271. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  272. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  273. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  274. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  275. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  276. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  277. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  278. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  279. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  280. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  281. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  282. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  283. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  284. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  285. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  286. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  287. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  288. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  289. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  290. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  291. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  292. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  293. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  294. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  295. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  296. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  297. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  298. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  299. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  300. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  301. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  302. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  303. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  304. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  305. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  306. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  307. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  308. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  309. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  310. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  311. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  312. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  313. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  314. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  315. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  316. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  317. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  318. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  319. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  320. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  321. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  322. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  323. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  324. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  325. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  326. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  327. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  328. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  329. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  330. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  331. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  332. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  333. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  334. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  335. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  336. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  337. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  338. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  339. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  340. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  341. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  342. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  343. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  344. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  345. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  346. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  347. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  348. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  349. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  350. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  351. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  352. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  353. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  354. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  355. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  356. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  357. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  358. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  359. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  360. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +6 -2
  361. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -1
  362. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
  363. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  364. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  365. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  366. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  367. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  368. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  369. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -1
  370. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  371. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  372. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  373. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  374. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  375. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  376. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  377. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  378. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +156 -154
  379. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +186 -183
  380. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +136 -134
  381. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  382. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +162 -139
  383. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  384. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  385. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +12 -8
  386. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  387. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +72 -75
  388. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +0 -5
  389. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +713 -670
  390. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  391. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  392. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  393. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  394. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  395. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  396. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  397. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +477 -466
  398. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  399. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +153 -84
  400. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  401. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  402. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  403. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  404. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  405. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  406. data/src/core/ext/xds/upb_utils.h +0 -21
  407. data/src/core/ext/xds/xds_api.cc +53 -86
  408. data/src/core/ext/xds/xds_api.h +19 -28
  409. data/src/core/ext/xds/xds_bootstrap.cc +39 -52
  410. data/src/core/ext/xds/xds_bootstrap.h +28 -8
  411. data/src/core/ext/xds/xds_certificate_provider.h +9 -0
  412. data/src/core/ext/xds/xds_channel_stack_modifier.cc +6 -4
  413. data/src/core/ext/xds/xds_channel_stack_modifier.h +8 -0
  414. data/src/core/ext/xds/xds_client.cc +555 -1214
  415. data/src/core/ext/xds/xds_client.h +16 -44
  416. data/src/core/ext/xds/xds_client_grpc.cc +291 -0
  417. data/src/core/ext/xds/xds_client_grpc.h +102 -0
  418. data/src/core/ext/xds/xds_cluster.cc +92 -103
  419. data/src/core/ext/xds/xds_cluster.h +6 -5
  420. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +10 -14
  421. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -0
  422. data/src/core/ext/xds/xds_common_types.cc +134 -110
  423. data/src/core/ext/xds/xds_common_types.h +6 -7
  424. data/src/core/ext/xds/xds_endpoint.cc +80 -80
  425. data/src/core/ext/xds/xds_endpoint.h +4 -4
  426. data/src/core/ext/xds/xds_http_fault_filter.cc +4 -11
  427. data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
  428. data/src/core/ext/xds/xds_http_filters.h +3 -3
  429. data/src/core/ext/xds/xds_http_rbac_filter.cc +39 -58
  430. data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
  431. data/src/core/ext/xds/xds_lb_policy_registry.cc +17 -20
  432. data/src/core/ext/xds/xds_lb_policy_registry.h +4 -4
  433. data/src/core/ext/xds/xds_listener.cc +329 -299
  434. data/src/core/ext/xds/xds_listener.h +4 -4
  435. data/src/core/ext/xds/xds_resource_type.h +13 -2
  436. data/src/core/ext/xds/xds_route_config.cc +180 -177
  437. data/src/core/ext/xds/xds_route_config.h +31 -17
  438. data/src/core/ext/xds/xds_routing.cc +3 -6
  439. data/src/core/ext/xds/xds_routing.h +7 -9
  440. data/src/core/ext/xds/xds_server_config_fetcher.cc +76 -81
  441. data/src/core/ext/xds/xds_transport.h +86 -0
  442. data/src/core/ext/xds/xds_transport_grpc.cc +349 -0
  443. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  444. data/src/core/lib/address_utils/parse_address.cc +19 -17
  445. data/src/core/lib/address_utils/parse_address.h +8 -5
  446. data/src/core/lib/avl/avl.h +47 -25
  447. data/src/core/lib/channel/call_tracer.h +1 -1
  448. data/src/core/lib/channel/channel_args.cc +88 -19
  449. data/src/core/lib/channel/channel_args.h +113 -62
  450. data/src/core/lib/channel/channel_stack.cc +0 -1
  451. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  452. data/src/core/lib/channel/channel_stack_builder.h +2 -2
  453. data/src/core/lib/channel/channel_stack_builder_impl.cc +2 -4
  454. data/src/core/lib/channel/channelz.cc +27 -37
  455. data/src/core/lib/channel/channelz.h +9 -0
  456. data/src/core/lib/channel/promise_based_filter.h +0 -1
  457. data/src/core/lib/config/core_configuration.h +48 -35
  458. data/src/core/lib/debug/stats.cc +12 -15
  459. data/src/core/lib/debug/stats.h +11 -3
  460. data/src/core/lib/event_engine/{event_engine.cc → default_event_engine.cc} +9 -5
  461. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine.h} +4 -8
  462. data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -3
  463. data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
  464. data/src/core/lib/event_engine/executor/executor.h +38 -0
  465. data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
  466. data/src/core/lib/event_engine/executor/threaded_executor.h +44 -0
  467. data/src/core/lib/event_engine/forkable.cc +101 -0
  468. data/src/core/lib/event_engine/forkable.h +61 -0
  469. data/src/core/lib/event_engine/poller.h +54 -0
  470. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.cc → posix_engine/posix_engine.cc} +30 -47
  471. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.h → posix_engine/posix_engine.h} +27 -28
  472. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.cc +4 -5
  473. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.h +8 -8
  474. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.cc +4 -4
  475. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.h +5 -5
  476. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.cc +46 -10
  477. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.h +17 -8
  478. data/src/core/lib/event_engine/promise.h +11 -2
  479. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  480. data/src/core/lib/event_engine/{iomgr_engine/thread_pool.cc → thread_pool.cc} +49 -14
  481. data/src/core/lib/event_engine/{iomgr_engine/thread_pool.h → thread_pool.h} +21 -10
  482. data/src/core/lib/event_engine/utils.cc +49 -0
  483. data/src/core/lib/event_engine/utils.h +40 -0
  484. data/src/core/lib/event_engine/windows/iocp.cc +149 -0
  485. data/src/core/lib/event_engine/windows/iocp.h +68 -0
  486. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  487. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  488. data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
  489. data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
  490. data/src/core/lib/gpr/time.cc +11 -9
  491. data/src/core/lib/gpr/useful.h +29 -0
  492. data/src/core/lib/gprpp/bitset.h +3 -13
  493. data/src/core/lib/gprpp/debug_location.h +39 -7
  494. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  495. data/src/core/lib/gprpp/no_destruct.h +94 -0
  496. data/src/core/lib/gprpp/ref_counted_ptr.h +0 -1
  497. data/src/core/lib/gprpp/status_helper.cc +1 -0
  498. data/src/core/lib/gprpp/table.h +0 -1
  499. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.cc +3 -5
  500. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.h +5 -7
  501. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  502. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -27
  503. data/src/core/lib/http/httpcli.cc +12 -24
  504. data/src/core/lib/http/httpcli_security_connector.cc +11 -11
  505. data/src/core/lib/iomgr/call_combiner.cc +0 -26
  506. data/src/core/lib/iomgr/closure.h +0 -9
  507. data/src/core/lib/iomgr/combiner.cc +0 -20
  508. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  509. data/src/core/lib/iomgr/error.cc +0 -773
  510. data/src/core/lib/iomgr/error.h +0 -145
  511. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  512. data/src/core/lib/iomgr/ev_poll_posix.cc +17 -9
  513. data/src/core/lib/iomgr/exec_ctx.cc +0 -12
  514. data/src/core/lib/iomgr/executor.cc +0 -10
  515. data/src/core/lib/iomgr/executor.h +0 -3
  516. data/src/core/lib/iomgr/lockfree_event.cc +0 -17
  517. data/src/core/lib/iomgr/port.h +3 -0
  518. data/src/core/lib/iomgr/resolve_address.h +29 -6
  519. data/src/core/lib/iomgr/resolve_address_posix.cc +42 -8
  520. data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
  521. data/src/core/lib/iomgr/resolve_address_windows.cc +44 -10
  522. data/src/core/lib/iomgr/resolve_address_windows.h +19 -5
  523. data/src/core/lib/iomgr/socket_windows.h +0 -2
  524. data/src/core/lib/iomgr/tcp_posix.cc +118 -6
  525. data/src/core/lib/iomgr/timer_generic.cc +6 -8
  526. data/src/core/lib/json/json.h +19 -22
  527. data/src/core/lib/json/json_args.h +34 -0
  528. data/src/core/lib/json/json_object_loader.cc +233 -0
  529. data/src/core/lib/json/json_object_loader.h +618 -0
  530. data/src/core/lib/json/json_reader.cc +86 -62
  531. data/src/core/lib/json/json_util.cc +8 -36
  532. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +3 -44
  533. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +15 -24
  534. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  535. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.cc +49 -72
  536. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.h +27 -27
  537. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +6 -6
  538. data/src/core/lib/promise/activity.h +56 -8
  539. data/src/core/lib/promise/arena_promise.h +84 -81
  540. data/src/core/lib/promise/context.h +0 -1
  541. data/src/core/lib/promise/detail/basic_seq.h +43 -23
  542. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  543. data/src/core/lib/promise/map.h +0 -1
  544. data/src/core/lib/promise/seq.h +25 -4
  545. data/src/core/lib/promise/sleep.cc +38 -42
  546. data/src/core/lib/promise/sleep.h +27 -24
  547. data/src/core/lib/promise/try_seq.h +26 -6
  548. data/src/core/lib/resolver/resolver.cc +0 -47
  549. data/src/core/lib/resolver/resolver.h +2 -12
  550. data/src/core/lib/resolver/resolver_factory.h +2 -3
  551. data/src/core/lib/resolver/resolver_registry.cc +1 -1
  552. data/src/core/lib/resolver/resolver_registry.h +2 -3
  553. data/src/core/lib/resolver/server_address.cc +11 -15
  554. data/src/core/lib/resolver/server_address.h +4 -8
  555. data/src/core/lib/resource_quota/api.cc +1 -1
  556. data/src/core/lib/resource_quota/arena.cc +21 -1
  557. data/src/core/lib/resource_quota/arena.h +24 -2
  558. data/src/core/lib/resource_quota/memory_quota.cc +157 -17
  559. data/src/core/lib/resource_quota/memory_quota.h +98 -17
  560. data/src/core/lib/resource_quota/periodic_update.cc +79 -0
  561. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  562. data/src/core/lib/security/authorization/evaluate_args.cc +10 -7
  563. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
  564. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  565. data/src/core/lib/security/authorization/matchers.cc +13 -10
  566. data/src/core/lib/security/authorization/rbac_policy.cc +0 -1
  567. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -3
  568. data/src/core/lib/security/credentials/alts/alts_credentials.h +3 -4
  569. data/src/core/lib/security/credentials/composite/composite_credentials.cc +3 -7
  570. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -4
  571. data/src/core/lib/security/credentials/credentials.h +16 -12
  572. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +18 -11
  573. data/src/core/lib/security/credentials/external/external_account_credentials.cc +32 -23
  574. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
  575. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -6
  576. data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -12
  577. data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -4
  578. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +29 -26
  579. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -3
  580. data/src/core/lib/security/credentials/iam/iam_credentials.cc +0 -1
  581. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +3 -3
  582. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -4
  583. data/src/core/lib/security/credentials/jwt/json_token.cc +12 -3
  584. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -8
  585. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +11 -13
  586. data/src/core/lib/security/credentials/local/local_credentials.cc +3 -4
  587. data/src/core/lib/security/credentials/local/local_credentials.h +3 -4
  588. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +17 -18
  589. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +0 -1
  590. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -21
  591. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +3 -4
  592. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +6 -0
  593. data/src/core/lib/security/credentials/tls/tls_credentials.cc +13 -25
  594. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -4
  595. data/src/core/lib/security/credentials/xds/xds_credentials.cc +13 -30
  596. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  597. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -18
  598. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +26 -38
  599. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  600. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
  601. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +6 -5
  602. data/src/core/lib/security/security_connector/local/local_security_connector.cc +13 -11
  603. data/src/core/lib/security/security_connector/local/local_security_connector.h +2 -2
  604. data/src/core/lib/security/security_connector/security_connector.h +5 -3
  605. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +5 -4
  606. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +5 -5
  607. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +5 -5
  608. data/src/core/lib/security/transport/auth_filters.h +1 -1
  609. data/src/core/lib/security/transport/client_auth_filter.cc +3 -4
  610. data/src/core/lib/security/transport/security_handshaker.cc +32 -44
  611. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  612. data/src/core/lib/service_config/service_config.h +11 -0
  613. data/src/core/lib/service_config/service_config_impl.cc +98 -97
  614. data/src/core/lib/service_config/service_config_impl.h +11 -13
  615. data/src/core/lib/service_config/service_config_parser.cc +26 -27
  616. data/src/core/lib/service_config/service_config_parser.h +10 -22
  617. data/src/core/lib/slice/percent_encoding.cc +4 -13
  618. data/src/core/lib/slice/slice.cc +10 -4
  619. data/src/core/lib/surface/call.cc +8 -2
  620. data/src/core/lib/surface/channel.cc +6 -6
  621. data/src/core/lib/surface/channel.h +1 -1
  622. data/src/core/lib/surface/completion_queue.cc +0 -2
  623. data/src/core/lib/surface/completion_queue.h +0 -3
  624. data/src/core/lib/surface/init.cc +2 -6
  625. data/src/core/lib/surface/lame_client.cc +2 -3
  626. data/src/core/lib/surface/lame_client.h +1 -1
  627. data/src/core/lib/surface/server.cc +7 -12
  628. data/src/core/lib/surface/server.h +7 -7
  629. data/src/core/lib/surface/validate_metadata.cc +4 -14
  630. data/src/core/lib/surface/version.cc +2 -2
  631. data/src/core/lib/transport/connectivity_state.cc +0 -1
  632. data/src/core/lib/transport/connectivity_state.h +1 -1
  633. data/src/core/lib/transport/error_utils.cc +0 -36
  634. data/src/core/lib/transport/handshaker.cc +7 -9
  635. data/src/core/lib/transport/handshaker.h +4 -5
  636. data/src/core/lib/transport/handshaker_factory.h +2 -3
  637. data/src/core/lib/transport/handshaker_registry.cc +2 -1
  638. data/src/core/lib/transport/handshaker_registry.h +2 -4
  639. data/src/core/lib/transport/http_connect_handshaker.cc +16 -16
  640. data/src/core/lib/transport/metadata_batch.cc +5 -0
  641. data/src/core/lib/transport/metadata_batch.h +52 -7
  642. data/src/core/lib/transport/parsed_metadata.h +0 -1
  643. data/src/core/lib/transport/tcp_connect_handshaker.cc +12 -18
  644. data/src/core/lib/transport/transport.h +0 -7
  645. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +40 -21
  646. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  647. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +14 -7
  648. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  649. data/src/core/tsi/fake_transport_security.cc +53 -30
  650. data/src/core/tsi/local_transport_security.cc +9 -5
  651. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +10 -1
  652. data/src/core/tsi/ssl_transport_security.cc +47 -23
  653. data/src/core/tsi/transport_security.cc +18 -6
  654. data/src/core/tsi/transport_security.h +2 -1
  655. data/src/core/tsi/transport_security_interface.h +17 -5
  656. data/src/ruby/ext/grpc/extconf.rb +2 -0
  657. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  658. data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
  659. data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
  660. data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
  661. data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
  662. data/src/ruby/lib/grpc/grpc_c.so +0 -0
  663. data/src/ruby/lib/grpc/version.rb +1 -1
  664. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  665. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  666. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  667. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  668. data/third_party/upb/upb/arena.c +277 -0
  669. data/third_party/upb/upb/arena.h +225 -0
  670. data/third_party/upb/upb/array.c +114 -0
  671. data/third_party/upb/upb/array.h +83 -0
  672. data/third_party/upb/upb/collections.h +36 -0
  673. data/third_party/upb/upb/decode.c +161 -65
  674. data/third_party/upb/upb/decode.h +1 -0
  675. data/third_party/upb/upb/decode_fast.c +1 -1
  676. data/third_party/upb/upb/def.c +10 -2
  677. data/third_party/upb/upb/def.h +8 -1
  678. data/third_party/upb/upb/def.hpp +7 -4
  679. data/third_party/upb/upb/encode.c +29 -20
  680. data/third_party/upb/upb/encode.h +16 -6
  681. data/third_party/upb/upb/extension_registry.c +93 -0
  682. data/third_party/upb/upb/extension_registry.h +84 -0
  683. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  684. data/third_party/upb/upb/internal/table.h +385 -0
  685. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  686. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  687. data/third_party/upb/upb/json_decode.c +1512 -0
  688. data/third_party/upb/upb/json_decode.h +47 -0
  689. data/third_party/upb/upb/json_encode.c +7 -3
  690. data/third_party/upb/upb/json_encode.h +6 -3
  691. data/third_party/upb/upb/map.c +108 -0
  692. data/third_party/upb/upb/map.h +117 -0
  693. data/third_party/upb/upb/message_value.h +66 -0
  694. data/third_party/upb/upb/mini_table.c +1147 -0
  695. data/third_party/upb/upb/mini_table.h +189 -0
  696. data/third_party/upb/upb/mini_table.hpp +112 -0
  697. data/third_party/upb/upb/msg.c +2 -62
  698. data/third_party/upb/upb/msg.h +2 -45
  699. data/third_party/upb/upb/msg_internal.h +28 -22
  700. data/third_party/upb/upb/port_def.inc +2 -1
  701. data/third_party/upb/upb/port_undef.inc +1 -0
  702. data/third_party/upb/upb/reflection.c +2 -159
  703. data/third_party/upb/upb/reflection.h +2 -112
  704. data/third_party/upb/upb/status.c +86 -0
  705. data/third_party/upb/upb/status.h +66 -0
  706. data/third_party/upb/upb/table.c +2 -2
  707. data/third_party/upb/upb/table_internal.h +3 -352
  708. data/third_party/upb/upb/text_encode.c +3 -2
  709. data/third_party/upb/upb/upb.c +4 -290
  710. data/third_party/upb/upb/upb.h +7 -196
  711. metadata +89 -38
  712. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
  713. data/src/core/lib/iomgr/error_internal.h +0 -66
  714. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  715. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  716. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  717. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  718. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  719. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  720. data/src/core/lib/promise/detail/switch.h +0 -1455
  721. data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
@@ -19,7 +19,7 @@
19
19
 
20
20
  #include <stdlib.h>
21
21
 
22
- #include <type_traits>
22
+ #include <new>
23
23
  #include <utility>
24
24
 
25
25
  #include "absl/meta/type_traits.h"
@@ -32,59 +32,58 @@ namespace grpc_core {
32
32
 
33
33
  namespace arena_promise_detail {
34
34
 
35
- // Type erased promise stored in the arena.
36
35
  template <typename T>
37
- class ImplInterface {
38
- public:
36
+ struct Vtable {
39
37
  // Poll the promise, once.
40
- virtual Poll<T> PollOnce() = 0;
38
+ Poll<T> (*poll_once)(void** arg);
41
39
  // Destroy the underlying callable object if there is one.
42
40
  // Since we don't delete (the arena owns the memory) but we may need to call a
43
41
  // destructor, we expose this for when the ArenaPromise object is destroyed.
44
- virtual void Destroy() = 0;
42
+ void (*destroy)(void** arg);
43
+ };
45
44
 
46
- protected:
47
- ~ImplInterface() = default;
45
+ template <typename T>
46
+ struct VtableAndArg {
47
+ const Vtable<T>* vtable;
48
+ void* arg;
48
49
  };
49
50
 
50
- // Implementation of ImplInterface for an empty object.
51
+ // Implementation of Vtable for an empty object.
51
52
  // Used when an empty ArenaPromise is created, or when the ArenaPromise is moved
52
53
  // from. Since in either case these objects should not be polled, we simply
53
54
  // crash if it is.
54
55
  template <typename T>
55
- class NullImpl final : public ImplInterface<T> {
56
- public:
57
- Poll<T> PollOnce() override {
58
- abort();
59
- GPR_UNREACHABLE_CODE(return Pending{});
60
- }
61
- void Destroy() override {}
62
-
63
- static ImplInterface<T>* Get() {
64
- static NullImpl<T> instance;
65
- return &instance;
66
- }
67
-
68
- private:
69
- ~NullImpl() = default;
70
- };
56
+ inline const Vtable<T>* null_impl() {
57
+ static const Vtable<T> vtable = {[](void**) -> Poll<T> {
58
+ abort();
59
+ GPR_UNREACHABLE_CODE(return Pending{});
60
+ },
61
+ [](void**) {}};
62
+ return &vtable;
63
+ }
71
64
 
72
65
  // Implementation of ImplInterface for a callable object.
73
66
  template <typename T, typename Callable>
74
- class CallableImpl final : public ImplInterface<T> {
75
- public:
76
- explicit CallableImpl(Callable&& callable) : callable_(std::move(callable)) {}
77
- // Forward polls to the callable object.
78
- Poll<T> PollOnce() override { return poll_cast<T>(callable_()); }
79
- // Destroy destructs the callable object.
80
- void Destroy() override { this->~CallableImpl(); }
81
-
82
- private:
83
- // Should only be called by Destroy().
84
- ~CallableImpl() = default;
67
+ inline const Vtable<T>* allocated_callable_impl() {
68
+ static const Vtable<T> vtable = {
69
+ [](void** arg) -> Poll<T> {
70
+ return poll_cast<T>((*static_cast<Callable*>(*arg))());
71
+ },
72
+ [](void** arg) { static_cast<Callable*>(*arg)->~Callable(); }};
73
+ return &vtable;
74
+ }
85
75
 
86
- Callable callable_;
87
- };
76
+ // Implementation of ImplInterface for a small callable object (one that fits
77
+ // within the void* arg)
78
+ template <typename T, typename Callable>
79
+ inline const Vtable<T>* inlined_callable_impl() {
80
+ static const Vtable<T> vtable = {
81
+ [](void** arg) -> Poll<T> {
82
+ return poll_cast<T>((*reinterpret_cast<Callable*>(arg))());
83
+ },
84
+ [](void** arg) { reinterpret_cast<Callable*>(arg)->~Callable(); }};
85
+ return &vtable;
86
+ }
88
87
 
89
88
  // If a callable object is empty we can substitute any instance of that callable
90
89
  // for the one we call (for how could we tell the difference)?
@@ -94,27 +93,12 @@ class CallableImpl final : public ImplInterface<T> {
94
93
  // (this comes up often when the promise only accesses context data from the
95
94
  // containing activity).
96
95
  template <typename T, typename Callable>
97
- class SharedImpl final : public ImplInterface<T>, private Callable {
98
- public:
99
- // Call the callable, or at least an exact duplicate of it - if you have no
100
- // members, all your instances look the same.
101
- Poll<T> PollOnce() override { return Callable::operator()(); }
102
- // Nothing to destroy.
103
- void Destroy() override {}
104
- // Return a pointer to the shared instance - these are singletons, and are
105
- // needed just to get the vtable in place.
106
- static SharedImpl* Get(Callable&& callable) {
107
- static_assert(sizeof(SharedImpl) == sizeof(void*),
108
- "SharedImpl should be pointer sized");
109
- static SharedImpl impl(std::forward<Callable>(callable));
110
- return &impl;
111
- }
112
-
113
- private:
114
- explicit SharedImpl(Callable&& callable)
115
- : Callable(std::forward<Callable>(callable)) {}
116
- ~SharedImpl() = default;
117
- };
96
+ inline const Vtable<T>* shared_callable_impl(Callable&& callable) {
97
+ static Callable instance = std::forward<Callable>(callable);
98
+ static const Vtable<T> vtable = {[](void**) -> Poll<T> { return instance(); },
99
+ [](void**) {}};
100
+ return &vtable;
101
+ }
118
102
 
119
103
  // Redirector type: given a callable type, expose a Make() function that creates
120
104
  // the appropriate underlying implementation.
@@ -123,26 +107,41 @@ struct ChooseImplForCallable;
123
107
 
124
108
  template <typename T, typename Callable>
125
109
  struct ChooseImplForCallable<
126
- T, Callable, absl::enable_if_t<!std::is_empty<Callable>::value>> {
127
- static ImplInterface<T>* Make(Callable&& callable) {
128
- return GetContext<Arena>()->template New<CallableImpl<T, Callable>>(
129
- std::forward<Callable>(callable));
110
+ T, Callable,
111
+ absl::enable_if_t<!std::is_empty<Callable>::value &&
112
+ (sizeof(Callable) > sizeof(void*))>> {
113
+ static void Make(Callable&& callable, VtableAndArg<T>* out) {
114
+ *out = {allocated_callable_impl<T, Callable>(),
115
+ GetContext<Arena>()->template New<Callable>(
116
+ std::forward<Callable>(callable))};
117
+ }
118
+ };
119
+
120
+ template <typename T, typename Callable>
121
+ struct ChooseImplForCallable<
122
+ T, Callable,
123
+ absl::enable_if_t<!std::is_empty<Callable>::value &&
124
+ (sizeof(Callable) <= sizeof(void*))>> {
125
+ static void Make(Callable&& callable, VtableAndArg<T>* out) {
126
+ out->vtable = inlined_callable_impl<T, Callable>();
127
+ new (&out->arg) Callable(std::forward<Callable>(callable));
130
128
  }
131
129
  };
132
130
 
133
131
  template <typename T, typename Callable>
134
132
  struct ChooseImplForCallable<
135
133
  T, Callable, absl::enable_if_t<std::is_empty<Callable>::value>> {
136
- static ImplInterface<T>* Make(Callable&& callable) {
137
- return SharedImpl<T, Callable>::Get(std::forward<Callable>(callable));
134
+ static void Make(Callable&& callable, VtableAndArg<T>* out) {
135
+ out->vtable =
136
+ shared_callable_impl<T, Callable>(std::forward<Callable>(callable));
138
137
  }
139
138
  };
140
139
 
141
140
  // Wrap ChooseImplForCallable with a friend approachable syntax.
142
141
  template <typename T, typename Callable>
143
- ImplInterface<T>* MakeImplForCallable(Callable&& callable) {
144
- return ChooseImplForCallable<T, Callable>::Make(
145
- std::forward<Callable>(callable));
142
+ void MakeImplForCallable(Callable&& callable, VtableAndArg<T>* out) {
143
+ ChooseImplForCallable<T, Callable>::Make(std::forward<Callable>(callable),
144
+ out);
146
145
  }
147
146
 
148
147
  } // namespace arena_promise_detail
@@ -159,38 +158,42 @@ class ArenaPromise {
159
158
  typename Ignored =
160
159
  absl::enable_if_t<!std::is_same<Callable, ArenaPromise>::value>>
161
160
  // NOLINTNEXTLINE(google-explicit-constructor)
162
- ArenaPromise(Callable&& callable)
163
- : impl_(arena_promise_detail::MakeImplForCallable<T>(
164
- std::forward<Callable>(callable))) {}
161
+ ArenaPromise(Callable&& callable) {
162
+ arena_promise_detail::MakeImplForCallable<T>(
163
+ std::forward<Callable>(callable), &vtable_and_arg_);
164
+ }
165
165
 
166
166
  // ArenaPromise is not copyable.
167
167
  ArenaPromise(const ArenaPromise&) = delete;
168
168
  ArenaPromise& operator=(const ArenaPromise&) = delete;
169
169
  // ArenaPromise is movable.
170
- ArenaPromise(ArenaPromise&& other) noexcept : impl_(other.impl_) {
171
- other.impl_ = arena_promise_detail::NullImpl<T>::Get();
170
+ ArenaPromise(ArenaPromise&& other) noexcept
171
+ : vtable_and_arg_(other.vtable_and_arg_) {
172
+ other.vtable_and_arg_.vtable = arena_promise_detail::null_impl<T>();
172
173
  }
173
174
  ArenaPromise& operator=(ArenaPromise&& other) noexcept {
174
- impl_->Destroy();
175
- impl_ = other.impl_;
176
- other.impl_ = arena_promise_detail::NullImpl<T>::Get();
175
+ vtable_and_arg_.vtable->destroy(&vtable_and_arg_.arg);
176
+ vtable_and_arg_ = other.vtable_and_arg_;
177
+ other.vtable_and_arg_.vtable = arena_promise_detail::null_impl<T>();
177
178
  return *this;
178
179
  }
179
180
 
180
181
  // Destruction => call Destroy on the underlying impl object.
181
- ~ArenaPromise() { impl_->Destroy(); }
182
+ ~ArenaPromise() { vtable_and_arg_.vtable->destroy(&vtable_and_arg_.arg); }
182
183
 
183
184
  // Expose the promise interface: a call operator that returns Poll<T>.
184
- Poll<T> operator()() { return impl_->PollOnce(); }
185
+ Poll<T> operator()() {
186
+ return vtable_and_arg_.vtable->poll_once(&vtable_and_arg_.arg);
187
+ }
185
188
 
186
189
  bool has_value() const {
187
- return impl_ != arena_promise_detail::NullImpl<T>::Get();
190
+ return vtable_and_arg_.vtable != arena_promise_detail::null_impl<T>();
188
191
  }
189
192
 
190
193
  private:
191
194
  // Underlying impl object.
192
- arena_promise_detail::ImplInterface<T>* impl_ =
193
- arena_promise_detail::NullImpl<T>::Get();
195
+ arena_promise_detail::VtableAndArg<T> vtable_and_arg_ = {
196
+ arena_promise_detail::null_impl<T>(), nullptr};
194
197
  };
195
198
 
196
199
  } // namespace grpc_core
@@ -17,7 +17,6 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
- #include <type_traits>
21
20
  #include <utility>
22
21
 
23
22
  #include "src/core/lib/gpr/tls.h"
@@ -17,11 +17,12 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
+ #include <stddef.h>
21
+
20
22
  #include <array>
21
23
  #include <cassert>
22
24
  #include <new>
23
25
  #include <tuple>
24
- #include <type_traits>
25
26
  #include <utility>
26
27
 
27
28
  #include "absl/meta/type_traits.h"
@@ -31,12 +32,29 @@
31
32
  #include "src/core/lib/gprpp/construct_destruct.h"
32
33
  #include "src/core/lib/promise/detail/promise_factory.h"
33
34
  #include "src/core/lib/promise/detail/promise_like.h"
34
- #include "src/core/lib/promise/detail/switch.h"
35
35
  #include "src/core/lib/promise/poll.h"
36
36
 
37
37
  namespace grpc_core {
38
38
  namespace promise_detail {
39
39
 
40
+ // Given f0, ..., fn, call function idx and return the result.
41
+ template <typename R, typename A, R (*... f)(A* arg)>
42
+ class JumpTable {
43
+ public:
44
+ JumpTable() = delete;
45
+ JumpTable(const JumpTable&) = delete;
46
+
47
+ static R Run(size_t idx, A* arg) { return fs_[idx](arg); }
48
+
49
+ private:
50
+ using Fn = R (*)(A* arg);
51
+ static const Fn fs_[sizeof...(f)];
52
+ };
53
+
54
+ template <typename R, typename A, R (*... f)(A* arg)>
55
+ const typename JumpTable<R, A, f...>::Fn
56
+ JumpTable<R, A, f...>::fs_[sizeof...(f)] = {f...};
57
+
40
58
  // Helper for SeqState to evaluate some common types to all partial
41
59
  // specializations.
42
60
  template <template <typename> class Traits, typename FPromise, typename FNext>
@@ -335,16 +353,14 @@ class BasicSeq {
335
353
  // parameter unpacking can work.
336
354
  template <char I>
337
355
  struct RunStateStruct {
338
- BasicSeq* s;
339
- Poll<Result> operator()() { return s->RunState<I>(); }
356
+ static Poll<Result> Run(BasicSeq* s) { return s->RunState<I>(); }
340
357
  };
341
358
 
342
359
  // Similarly placate those compilers for
343
360
  // DestructCurrentPromiseAndSubsequentFactories
344
361
  template <char I>
345
362
  struct DestructCurrentPromiseAndSubsequentFactoriesStruct {
346
- BasicSeq* s;
347
- void operator()() {
363
+ static void Run(BasicSeq* s) {
348
364
  return s->DestructCurrentPromiseAndSubsequentFactories<I>();
349
365
  }
350
366
  };
@@ -357,7 +373,8 @@ class BasicSeq {
357
373
  // Duff's device like mechanic for evaluating sequences.
358
374
  template <char... I>
359
375
  Poll<Result> Run(absl::integer_sequence<char, I...>) {
360
- return Switch<Poll<Result>>(state_, RunStateStruct<I>{this}...);
376
+ return JumpTable<Poll<Result>, BasicSeq, RunStateStruct<I>::Run...>::Run(
377
+ state_, this);
361
378
  }
362
379
 
363
380
  // Run the appropriate destructors for a given state.
@@ -367,8 +384,9 @@ class BasicSeq {
367
384
  // which can choose the correct instance at runtime to destroy everything.
368
385
  template <char... I>
369
386
  void RunDestruct(absl::integer_sequence<char, I...>) {
370
- Switch<void>(
371
- state_, DestructCurrentPromiseAndSubsequentFactoriesStruct<I>{this}...);
387
+ JumpTable<void, BasicSeq,
388
+ DestructCurrentPromiseAndSubsequentFactoriesStruct<I>::Run...>::
389
+ Run(state_, this);
372
390
  }
373
391
 
374
392
  public:
@@ -403,20 +421,22 @@ class BasicSeq {
403
421
 
404
422
  // As above, but models a sequence of unknown size
405
423
  // At each element, the accumulator A and the current value V is passed to some
406
- // function of type F as f(V, A); f is expected to return a promise that
407
- // resolves to Traits::WrappedType.
408
- template <template <typename Wrapped> class Traits, typename F, typename Arg,
409
- typename Iter>
424
+ // function of type IterTraits::Factory as f(V, IterTraits::Argument); f is
425
+ // expected to return a promise that resolves to IterTraits::Wrapped.
426
+ template <class IterTraits>
410
427
  class BasicSeqIter {
411
428
  private:
412
- using IterValue = decltype(*std::declval<Iter>());
413
- using StateCreated = decltype(std::declval<F>()(std::declval<IterValue>(),
414
- std::declval<Arg>()));
415
- using State = PromiseLike<StateCreated>;
416
- using Wrapped = typename State::Result;
429
+ using Traits = typename IterTraits::Traits;
430
+ using Iter = typename IterTraits::Iter;
431
+ using Factory = typename IterTraits::Factory;
432
+ using Argument = typename IterTraits::Argument;
433
+ using IterValue = typename IterTraits::IterValue;
434
+ using StateCreated = typename IterTraits::StateCreated;
435
+ using State = typename IterTraits::State;
436
+ using Wrapped = typename IterTraits::Wrapped;
417
437
 
418
438
  public:
419
- BasicSeqIter(Iter begin, Iter end, F f, Arg arg)
439
+ BasicSeqIter(Iter begin, Iter end, Factory f, Argument arg)
420
440
  : cur_(begin), end_(end), f_(std::move(f)) {
421
441
  if (cur_ == end_) {
422
442
  Construct(&result_, std::move(arg));
@@ -466,7 +486,7 @@ class BasicSeqIter {
466
486
  Poll<Wrapped> PollNonEmpty() {
467
487
  Poll<Wrapped> r = state_();
468
488
  if (absl::holds_alternative<Pending>(r)) return r;
469
- return Traits<Wrapped>::template CheckResultAndRunNext<Wrapped>(
489
+ return Traits::template CheckResultAndRunNext<Wrapped>(
470
490
  std::move(absl::get<Wrapped>(r)), [this](Wrapped arg) -> Poll<Wrapped> {
471
491
  auto next = cur_;
472
492
  ++next;
@@ -476,17 +496,17 @@ class BasicSeqIter {
476
496
  cur_ = next;
477
497
  state_.~State();
478
498
  Construct(&state_,
479
- Traits<Wrapped>::CallSeqFactory(f_, *cur_, std::move(arg)));
499
+ Traits::template CallSeqFactory(f_, *cur_, std::move(arg)));
480
500
  return PollNonEmpty();
481
501
  });
482
502
  }
483
503
 
484
504
  Iter cur_;
485
505
  const Iter end_;
486
- GPR_NO_UNIQUE_ADDRESS F f_;
506
+ GPR_NO_UNIQUE_ADDRESS Factory f_;
487
507
  union {
488
508
  GPR_NO_UNIQUE_ADDRESS State state_;
489
- GPR_NO_UNIQUE_ADDRESS Arg result_;
509
+ GPR_NO_UNIQUE_ADDRESS Argument result_;
490
510
  };
491
511
  };
492
512
 
@@ -17,7 +17,6 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
- #include <type_traits>
21
20
  #include <utility>
22
21
 
23
22
  #include "absl/meta/type_traits.h"
@@ -20,7 +20,6 @@
20
20
  #include <stddef.h>
21
21
 
22
22
  #include <tuple>
23
- #include <type_traits>
24
23
  #include <utility>
25
24
 
26
25
  #include "absl/types/variant.h"
@@ -20,6 +20,7 @@
20
20
  #include <utility>
21
21
 
22
22
  #include "src/core/lib/promise/detail/basic_seq.h"
23
+ #include "src/core/lib/promise/detail/promise_like.h"
23
24
  #include "src/core/lib/promise/poll.h"
24
25
 
25
26
  namespace grpc_core {
@@ -50,6 +51,26 @@ struct SeqTraits {
50
51
  template <typename... Fs>
51
52
  using Seq = BasicSeq<SeqTraits, Fs...>;
52
53
 
54
+ template <typename I, typename F, typename Arg>
55
+ struct SeqIterTraits {
56
+ using Iter = I;
57
+ using Factory = F;
58
+ using Argument = Arg;
59
+ using IterValue = decltype(*std::declval<Iter>());
60
+ using StateCreated = decltype(std::declval<F>()(std::declval<IterValue>(),
61
+ std::declval<Arg>()));
62
+ using State = PromiseLike<StateCreated>;
63
+ using Wrapped = typename State::Result;
64
+
65
+ using Traits = SeqTraits<Wrapped>;
66
+ };
67
+
68
+ template <typename Iter, typename Factory, typename Argument>
69
+ struct SeqIterResultTraits {
70
+ using IterTraits = SeqIterTraits<Iter, Factory, Argument>;
71
+ using Result = BasicSeqIter<IterTraits>;
72
+ };
73
+
53
74
  } // namespace promise_detail
54
75
 
55
76
  // Sequencing combinator.
@@ -75,11 +96,11 @@ F Seq(F functor) {
75
96
  // }
76
97
  // return argument;
77
98
  template <typename Iter, typename Factory, typename Argument>
78
- promise_detail::BasicSeqIter<promise_detail::SeqTraits, Factory, Argument, Iter>
99
+ typename promise_detail::SeqIterResultTraits<Iter, Factory, Argument>::Result
79
100
  SeqIter(Iter begin, Iter end, Argument argument, Factory factory) {
80
- return promise_detail::BasicSeqIter<promise_detail::SeqTraits, Factory,
81
- Argument, Iter>(
82
- begin, end, std::move(factory), std::move(argument));
101
+ using Result = typename promise_detail::SeqIterResultTraits<Iter, Factory,
102
+ Argument>::Result;
103
+ return Result(begin, end, std::move(factory), std::move(argument));
83
104
  }
84
105
 
85
106
  } // namespace grpc_core
@@ -16,10 +16,14 @@
16
16
 
17
17
  #include "src/core/lib/promise/sleep.h"
18
18
 
19
+ #include <utility>
20
+
19
21
  #include <grpc/event_engine/event_engine.h>
20
22
 
21
- #include "src/core/lib/event_engine/event_engine_factory.h"
23
+ #include "src/core/lib/event_engine/default_event_engine.h"
24
+ #include "src/core/lib/gprpp/time.h"
22
25
  #include "src/core/lib/iomgr/exec_ctx.h"
26
+ #include "src/core/lib/promise/activity.h"
23
27
 
24
28
  namespace grpc_core {
25
29
 
@@ -28,54 +32,46 @@ using ::grpc_event_engine::experimental::GetDefaultEventEngine;
28
32
  Sleep::Sleep(Timestamp deadline) : deadline_(deadline) {}
29
33
 
30
34
  Sleep::~Sleep() {
31
- if (deadline_ == Timestamp::InfPast()) return;
32
- ReleasableMutexLock lock(&mu_);
33
- switch (stage_) {
34
- case Stage::kInitial:
35
- break;
36
- case Stage::kStarted:
37
- if (GetDefaultEventEngine()->Cancel(timer_handle_)) {
38
- lock.Release();
39
- OnTimer();
40
- }
41
- break;
42
- case Stage::kDone:
43
- break;
35
+ if (closure_ != nullptr) closure_->Cancel();
36
+ }
37
+
38
+ Poll<absl::Status> Sleep::operator()() {
39
+ // Invalidate now so that we see a fresh version of the time.
40
+ // TODO(ctiller): the following can be safely removed when we remove ExecCtx.
41
+ ExecCtx::Get()->InvalidateNow();
42
+ // If the deadline is earlier than now we can just return.
43
+ if (deadline_ <= ExecCtx::Get()->Now()) return absl::OkStatus();
44
+ if (closure_ == nullptr) {
45
+ // TODO(ctiller): it's likely we'll want a pool of closures - probably per
46
+ // cpu? - to avoid allocating/deallocating on fast paths.
47
+ closure_ = new ActiveClosure(deadline_);
44
48
  }
49
+ return Pending{};
45
50
  }
46
51
 
47
- void Sleep::OnTimer() {
48
- Waker tmp_waker;
49
- {
50
- MutexLock lock(&mu_);
51
- stage_ = Stage::kDone;
52
- tmp_waker = std::move(waker_);
52
+ Sleep::ActiveClosure::ActiveClosure(Timestamp deadline)
53
+ : waker_(Activity::current()->MakeOwningWaker()),
54
+ timer_handle_(GetDefaultEventEngine()->RunAfter(
55
+ deadline - ExecCtx::Get()->Now(), this)) {}
56
+
57
+ void Sleep::ActiveClosure::Run() {
58
+ ApplicationCallbackExecCtx callback_exec_ctx;
59
+ ExecCtx exec_ctx;
60
+ auto waker = std::move(waker_);
61
+ if (refs_.Unref()) {
62
+ delete this;
63
+ } else {
64
+ waker.Wakeup();
53
65
  }
54
- tmp_waker.Wakeup();
55
66
  }
56
67
 
57
- Poll<absl::Status> Sleep::operator()() {
58
- MutexLock lock(&mu_);
59
- switch (stage_) {
60
- case Stage::kInitial:
61
- if (deadline_ <= ExecCtx::Get()->Now()) {
62
- return absl::OkStatus();
63
- }
64
- stage_ = Stage::kStarted;
65
- timer_handle_ = GetDefaultEventEngine()->RunAfter(
66
- deadline_ - ExecCtx::Get()->Now(), [this] {
67
- ApplicationCallbackExecCtx callback_exec_ctx;
68
- ExecCtx exec_ctx;
69
- OnTimer();
70
- });
71
- break;
72
- case Stage::kStarted:
73
- break;
74
- case Stage::kDone:
75
- return absl::OkStatus();
68
+ void Sleep::ActiveClosure::Cancel() {
69
+ // If we cancel correctly then we must own both refs still and can simply
70
+ // delete without unreffing twice, otherwise try unreffing since this may be
71
+ // the last owned ref.
72
+ if (GetDefaultEventEngine()->Cancel(timer_handle_) || refs_.Unref()) {
73
+ delete this;
76
74
  }
77
- waker_ = Activity::current()->MakeNonOwningWaker();
78
- return Pending{};
79
75
  }
80
76
 
81
77
  } // namespace grpc_core
@@ -17,14 +17,12 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
- #include <utility>
21
-
22
- #include "absl/base/thread_annotations.h"
23
20
  #include "absl/status/status.h"
24
21
 
25
22
  #include <grpc/event_engine/event_engine.h>
23
+ #include <grpc/support/log.h>
26
24
 
27
- #include "src/core/lib/gprpp/sync.h"
25
+ #include "src/core/lib/gprpp/ref_counted.h"
28
26
  #include "src/core/lib/gprpp/time.h"
29
27
  #include "src/core/lib/promise/activity.h"
30
28
  #include "src/core/lib/promise/poll.h"
@@ -32,43 +30,48 @@
32
30
  namespace grpc_core {
33
31
 
34
32
  // Promise that sleeps until a deadline and then finishes.
35
- class Sleep {
33
+ class Sleep final {
36
34
  public:
37
35
  explicit Sleep(Timestamp deadline);
38
36
  ~Sleep();
39
37
 
40
38
  Sleep(const Sleep&) = delete;
41
39
  Sleep& operator=(const Sleep&) = delete;
42
- Sleep(Sleep&& other) noexcept
43
- : deadline_(other.deadline_), timer_handle_(other.timer_handle_) {
44
- MutexLock lock2(&other.mu_);
45
- stage_ = other.stage_;
46
- waker_ = std::move(other.waker_);
47
- other.deadline_ = Timestamp::InfPast();
40
+ Sleep(Sleep&& other) noexcept : deadline_(other.deadline_) {
41
+ // Promises can be moved only until they're polled, and since we only create
42
+ // the closure when first polled we can assume it's nullptr here.
43
+ GPR_DEBUG_ASSERT(other.closure_ == nullptr);
48
44
  };
49
45
  Sleep& operator=(Sleep&& other) noexcept {
50
- if (&other == this) return *this;
51
- MutexLock lock1(&mu_);
52
- MutexLock lock2(&other.mu_);
46
+ // Promises can be moved only until they're polled, and since we only create
47
+ // the closure when first polled we can assume it's nullptr here.
48
+ GPR_DEBUG_ASSERT(closure_ == nullptr);
49
+ GPR_DEBUG_ASSERT(other.closure_ == nullptr);
53
50
  deadline_ = other.deadline_;
54
- timer_handle_ = other.timer_handle_;
55
- stage_ = other.stage_;
56
- waker_ = std::move(other.waker_);
57
- other.deadline_ = Timestamp::InfPast();
58
51
  return *this;
59
52
  };
60
53
 
61
54
  Poll<absl::Status> operator()();
62
55
 
63
56
  private:
64
- enum class Stage { kInitial, kStarted, kDone };
65
- void OnTimer();
57
+ class ActiveClosure final
58
+ : public grpc_event_engine::experimental::EventEngine::Closure {
59
+ public:
60
+ explicit ActiveClosure(Timestamp deadline);
61
+
62
+ void Run() override;
63
+ void Cancel();
64
+
65
+ private:
66
+ Waker waker_;
67
+ // One ref dropped by Run(), the other by Cancel().
68
+ RefCount refs_{2};
69
+ const grpc_event_engine::experimental::EventEngine::TaskHandle
70
+ timer_handle_;
71
+ };
66
72
 
67
73
  Timestamp deadline_;
68
- grpc_event_engine::experimental::EventEngine::TaskHandle timer_handle_;
69
- Mutex mu_;
70
- Stage stage_ ABSL_GUARDED_BY(mu_) = Stage::kInitial;
71
- Waker waker_ ABSL_GUARDED_BY(mu_);
74
+ ActiveClosure* closure_{nullptr};
72
75
  };
73
76
 
74
77
  } // namespace grpc_core