grpc 1.46.3 → 1.47.0

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

Potentially problematic release.


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

Files changed (481) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +49 -97
  3. data/include/grpc/event_engine/event_engine.h +42 -7
  4. data/include/grpc/event_engine/memory_allocator.h +0 -15
  5. data/include/grpc/event_engine/port.h +1 -1
  6. data/include/grpc/event_engine/slice.h +286 -0
  7. data/include/grpc/event_engine/slice_buffer.h +112 -0
  8. data/include/grpc/grpc_security.h +11 -0
  9. data/include/grpc/impl/codegen/port_platform.h +100 -36
  10. data/include/grpc/impl/codegen/slice.h +1 -1
  11. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +18 -30
  12. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +4 -1
  13. data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
  14. data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +5 -5
  16. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +42 -20
  18. data/src/core/ext/filters/client_channel/client_channel.cc +60 -17
  19. data/src/core/ext/filters/client_channel/client_channel.h +26 -6
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  22. data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
  23. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
  24. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
  25. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  26. data/src/core/ext/filters/client_channel/config_selector.h +7 -5
  27. data/src/core/ext/filters/client_channel/connector.h +8 -2
  28. data/src/core/ext/filters/client_channel/dynamic_filters.cc +13 -2
  29. data/src/core/ext/filters/client_channel/dynamic_filters.h +11 -1
  30. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  31. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
  32. data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
  33. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
  34. data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
  35. data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
  37. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  39. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +9 -3
  42. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -19
  43. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
  45. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
  46. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
  47. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
  51. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +60 -52
  52. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -60
  53. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +157 -96
  54. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +2 -0
  55. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +45 -10
  56. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -171
  57. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +39 -36
  58. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +30 -5
  59. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +99 -23
  60. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
  61. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -4
  62. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +23 -3
  63. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +75 -11
  64. data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
  65. data/src/core/ext/filters/client_channel/lb_policy.h +18 -24
  66. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
  67. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  68. data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
  69. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  70. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  71. data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
  72. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
  73. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
  74. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +23 -5
  75. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +134 -43
  76. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
  77. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +26 -9
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
  82. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  83. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  84. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +30 -7
  85. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -14
  86. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
  87. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +59 -13
  88. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +13 -1
  89. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
  90. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +15 -11
  91. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +89 -33
  92. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -11
  93. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
  94. data/src/core/ext/filters/client_channel/retry_filter.cc +42 -2
  95. data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -9
  96. data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
  97. data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
  98. data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
  99. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -5
  100. data/src/core/ext/filters/client_channel/subchannel.cc +156 -160
  101. data/src/core/ext/filters/client_channel/subchannel.h +80 -20
  102. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
  103. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  104. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
  105. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
  106. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +16 -2
  107. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +12 -0
  108. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -2
  109. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -4
  110. data/src/core/ext/filters/http/client/http_client_filter.cc +14 -5
  111. data/src/core/ext/filters/http/client/http_client_filter.h +7 -1
  112. data/src/core/ext/filters/http/client_authority_filter.cc +5 -10
  113. data/src/core/ext/filters/http/http_filters_plugin.cc +7 -8
  114. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +1 -0
  115. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +3 -1
  116. data/src/core/ext/filters/http/server/http_server_filter.cc +80 -247
  117. data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
  118. data/src/core/ext/filters/message_size/message_size_filter.cc +20 -26
  119. data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
  120. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -0
  121. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +101 -135
  122. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
  123. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -15
  124. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
  125. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
  126. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  127. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  128. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +69 -20
  129. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +5 -0
  130. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
  131. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
  132. data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -2
  133. data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -2
  134. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  135. data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -1
  136. data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -1
  137. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
  138. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  139. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
  140. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  141. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
  142. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  143. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -3
  144. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  145. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -1
  146. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  147. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
  148. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
  149. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
  150. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
  151. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -7
  152. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
  153. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +55 -37
  154. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
  155. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  156. data/src/core/ext/transport/chttp2/transport/internal.h +24 -3
  157. data/src/core/ext/transport/chttp2/transport/parsing.cc +27 -6
  158. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -9
  159. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  160. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  161. data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
  162. data/src/core/ext/transport/chttp2/transport/writing.cc +38 -2
  163. data/src/core/ext/transport/inproc/inproc_transport.cc +8 -5
  164. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  165. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
  166. data/src/core/ext/xds/certificate_provider_store.cc +4 -2
  167. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  168. data/src/core/ext/xds/xds_certificate_provider.cc +4 -1
  169. data/src/core/ext/xds/xds_certificate_provider.h +1 -1
  170. data/src/core/ext/xds/xds_channel_stack_modifier.cc +5 -5
  171. data/src/core/ext/xds/xds_client.cc +46 -22
  172. data/src/core/ext/xds/xds_cluster.cc +106 -16
  173. data/src/core/ext/xds/xds_cluster.h +3 -0
  174. data/src/core/ext/xds/xds_http_fault_filter.cc +3 -3
  175. data/src/core/ext/xds/xds_listener.cc +19 -9
  176. data/src/core/ext/xds/xds_server_config_fetcher.cc +2 -1
  177. data/src/core/lib/address_utils/sockaddr_utils.cc +56 -23
  178. data/src/core/lib/address_utils/sockaddr_utils.h +7 -4
  179. data/src/core/lib/avl/avl.h +3 -1
  180. data/src/core/lib/channel/call_finalization.h +4 -0
  181. data/src/core/lib/channel/call_tracer.h +8 -2
  182. data/src/core/lib/channel/channel_args.cc +41 -22
  183. data/src/core/lib/channel/channel_args.h +33 -3
  184. data/src/core/lib/channel/channel_args_preconditioning.cc +3 -3
  185. data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
  186. data/src/core/lib/channel/channel_stack.cc +41 -3
  187. data/src/core/lib/channel/channel_stack.h +49 -3
  188. data/src/core/lib/channel/channel_stack_builder.cc +9 -19
  189. data/src/core/lib/channel/channel_stack_builder.h +15 -27
  190. data/src/core/lib/channel/channel_stack_builder_impl.cc +36 -41
  191. data/src/core/lib/channel/channel_stack_builder_impl.h +3 -6
  192. data/src/core/lib/channel/channel_trace.cc +8 -13
  193. data/src/core/lib/channel/channel_trace.h +6 -3
  194. data/src/core/lib/channel/channelz.cc +8 -13
  195. data/src/core/lib/channel/channelz.h +13 -4
  196. data/src/core/lib/channel/channelz_registry.cc +7 -14
  197. data/src/core/lib/channel/channelz_registry.h +10 -9
  198. data/src/core/lib/channel/connected_channel.cc +21 -31
  199. data/src/core/lib/channel/connected_channel.h +1 -0
  200. data/src/core/lib/channel/promise_based_filter.cc +444 -189
  201. data/src/core/lib/channel/promise_based_filter.h +160 -27
  202. data/src/core/lib/channel/status_util.cc +2 -0
  203. data/src/core/lib/channel/status_util.h +0 -3
  204. data/src/core/lib/compression/compression_internal.cc +45 -10
  205. data/src/core/lib/compression/compression_internal.h +1 -1
  206. data/src/core/lib/config/core_configuration.cc +3 -0
  207. data/src/core/lib/config/core_configuration.h +2 -1
  208. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
  209. data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
  210. data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
  211. data/src/core/lib/event_engine/event_engine.cc +12 -2
  212. data/src/core/lib/event_engine/event_engine_factory.h +5 -0
  213. data/src/core/lib/event_engine/handle_containers.h +67 -0
  214. data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
  215. data/src/core/lib/event_engine/iomgr_engine.h +118 -0
  216. data/src/core/lib/event_engine/memory_allocator.cc +12 -4
  217. data/src/core/lib/event_engine/resolved_address.cc +4 -2
  218. data/src/core/lib/event_engine/slice.cc +102 -0
  219. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  220. data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
  221. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
  222. data/src/core/lib/gpr/log.cc +5 -0
  223. data/src/core/lib/gpr/tls.h +3 -5
  224. data/src/core/lib/gprpp/bitset.h +5 -1
  225. data/src/core/lib/gprpp/chunked_vector.h +4 -0
  226. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  227. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  228. data/src/core/lib/gprpp/examine_stack.h +0 -1
  229. data/src/core/lib/gprpp/fork.cc +3 -6
  230. data/src/core/lib/gprpp/global_config.h +2 -4
  231. data/src/core/lib/gprpp/global_config_env.cc +3 -2
  232. data/src/core/lib/gprpp/global_config_env.h +3 -1
  233. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  234. data/src/core/lib/gprpp/host_port.cc +2 -0
  235. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  236. data/src/core/lib/gprpp/match.h +2 -0
  237. data/src/core/lib/gprpp/memory.h +1 -5
  238. data/src/core/lib/gprpp/orphanable.h +1 -4
  239. data/src/core/lib/gprpp/ref_counted.h +1 -3
  240. data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
  241. data/src/core/lib/gprpp/stat.h +0 -2
  242. data/src/core/lib/gprpp/stat_posix.cc +7 -2
  243. data/src/core/lib/gprpp/status_helper.cc +8 -4
  244. data/src/core/lib/gprpp/status_helper.h +4 -0
  245. data/src/core/lib/gprpp/sync.h +3 -1
  246. data/src/core/lib/gprpp/table.h +10 -0
  247. data/src/core/lib/gprpp/thd.h +2 -5
  248. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  249. data/src/core/lib/gprpp/thd_windows.cc +2 -0
  250. data/src/core/lib/gprpp/time.cc +8 -0
  251. data/src/core/lib/gprpp/time.h +6 -1
  252. data/src/core/lib/gprpp/time_util.cc +4 -0
  253. data/src/core/lib/gprpp/time_util.h +1 -1
  254. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  255. data/src/core/lib/http/format_request.cc +29 -0
  256. data/src/core/lib/http/format_request.h +2 -0
  257. data/src/core/lib/http/httpcli.cc +88 -81
  258. data/src/core/lib/http/httpcli.h +39 -7
  259. data/src/core/lib/http/httpcli_security_connector.cc +3 -4
  260. data/src/core/lib/iomgr/endpoint.cc +4 -4
  261. data/src/core/lib/iomgr/endpoint.h +6 -4
  262. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -4
  263. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  264. data/src/core/lib/iomgr/ev_posix.cc +1 -4
  265. data/src/core/lib/iomgr/exec_ctx.h +1 -2
  266. data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
  267. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  268. data/src/core/lib/iomgr/iomgr.cc +0 -1
  269. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
  270. data/src/core/lib/iomgr/pollset_set.h +1 -2
  271. data/src/core/lib/iomgr/port.h +25 -6
  272. data/src/core/lib/iomgr/resolve_address.cc +8 -0
  273. data/src/core/lib/iomgr/resolve_address.h +21 -14
  274. data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
  275. data/src/core/lib/iomgr/resolve_address_posix.cc +8 -14
  276. data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
  277. data/src/core/lib/iomgr/resolve_address_windows.cc +7 -14
  278. data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
  279. data/src/core/lib/iomgr/sockaddr.h +2 -3
  280. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  281. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  282. data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
  283. data/src/core/lib/iomgr/tcp_client_cfstream.cc +10 -2
  284. data/src/core/lib/iomgr/tcp_client_posix.cc +12 -5
  285. data/src/core/lib/iomgr/tcp_client_windows.cc +13 -6
  286. data/src/core/lib/iomgr/tcp_posix.cc +9 -27
  287. data/src/core/lib/iomgr/tcp_server_posix.cc +26 -12
  288. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +30 -27
  289. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -4
  290. data/src/core/lib/iomgr/tcp_server_windows.cc +13 -5
  291. data/src/core/lib/iomgr/tcp_windows.cc +7 -4
  292. data/src/core/lib/json/json.h +1 -2
  293. data/src/core/lib/json/json_reader.cc +9 -1
  294. data/src/core/lib/json/json_util.cc +7 -0
  295. data/src/core/lib/json/json_util.h +10 -1
  296. data/src/core/lib/json/json_writer.cc +6 -1
  297. data/src/core/lib/promise/activity.cc +1 -1
  298. data/src/core/lib/promise/activity.h +6 -6
  299. data/src/core/lib/promise/arena_promise.h +11 -1
  300. data/src/core/lib/promise/call_push_pull.h +4 -0
  301. data/src/core/lib/promise/context.h +1 -1
  302. data/src/core/lib/promise/detail/basic_seq.h +2 -2
  303. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  304. data/src/core/lib/promise/latch.h +0 -1
  305. data/src/core/lib/promise/loop.h +1 -0
  306. data/src/core/lib/promise/race.h +0 -1
  307. data/src/core/lib/promise/seq.h +0 -2
  308. data/src/core/lib/promise/sleep.cc +2 -0
  309. data/src/core/lib/promise/sleep.h +10 -0
  310. data/src/core/lib/promise/try_seq.h +2 -2
  311. data/src/core/lib/resolver/resolver_factory.h +1 -2
  312. data/src/core/lib/resolver/server_address.cc +9 -3
  313. data/src/core/lib/resolver/server_address.h +4 -4
  314. data/src/core/lib/resource_quota/api.cc +14 -1
  315. data/src/core/lib/resource_quota/api.h +4 -1
  316. data/src/core/lib/resource_quota/arena.cc +0 -6
  317. data/src/core/lib/resource_quota/arena.h +1 -2
  318. data/src/core/lib/resource_quota/memory_quota.cc +47 -5
  319. data/src/core/lib/resource_quota/memory_quota.h +24 -5
  320. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  321. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  322. data/src/core/lib/resource_quota/thread_quota.h +4 -0
  323. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -0
  324. data/src/core/lib/security/credentials/alts/alts_credentials.cc +8 -2
  325. data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
  326. data/src/core/lib/security/credentials/call_creds_util.cc +2 -0
  327. data/src/core/lib/security/credentials/channel_creds_registry.h +1 -0
  328. data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -3
  329. data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -4
  330. data/src/core/lib/security/credentials/credentials.h +17 -10
  331. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +81 -0
  332. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +8 -0
  333. data/src/core/lib/security/credentials/external/external_account_credentials.cc +3 -0
  334. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -0
  335. data/src/core/lib/security/credentials/fake/fake_credentials.cc +13 -3
  336. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  337. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -15
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
  339. data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -1
  340. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  341. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +8 -2
  342. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +4 -4
  343. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -2
  344. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  345. data/src/core/lib/security/credentials/local/local_credentials.cc +8 -2
  346. data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
  347. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -6
  348. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
  349. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +4 -1
  350. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -1
  351. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -2
  352. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +4 -4
  353. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +10 -0
  354. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -7
  355. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +26 -1
  356. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +28 -4
  357. data/src/core/lib/security/credentials/tls/tls_credentials.cc +10 -0
  358. data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
  359. data/src/core/lib/security/credentials/xds/xds_credentials.cc +12 -3
  360. data/src/core/lib/security/credentials/xds/xds_credentials.h +5 -5
  361. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
  362. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
  363. data/src/core/lib/security/security_connector/security_connector.cc +1 -1
  364. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  365. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -1
  366. data/src/core/lib/security/transport/client_auth_filter.cc +6 -8
  367. data/src/core/lib/security/transport/secure_endpoint.cc +23 -12
  368. data/src/core/lib/security/transport/security_handshaker.cc +5 -5
  369. data/src/core/lib/security/transport/security_handshaker.h +1 -1
  370. data/src/core/lib/security/transport/server_auth_filter.cc +3 -2
  371. data/src/core/lib/service_config/service_config.h +4 -8
  372. data/src/core/lib/service_config/service_config_call_data.h +4 -1
  373. data/src/core/lib/service_config/service_config_impl.cc +7 -0
  374. data/src/core/lib/service_config/service_config_impl.h +9 -2
  375. data/src/core/lib/service_config/service_config_parser.cc +8 -0
  376. data/src/core/lib/service_config/service_config_parser.h +7 -0
  377. data/src/core/lib/slice/b64.cc +1 -1
  378. data/src/core/lib/slice/b64.h +2 -0
  379. data/src/core/lib/slice/percent_encoding.cc +4 -1
  380. data/src/core/lib/slice/percent_encoding.h +0 -6
  381. data/src/core/lib/slice/slice.cc +2 -1
  382. data/src/core/lib/slice/slice.h +10 -5
  383. data/src/core/lib/slice/slice_api.cc +1 -1
  384. data/src/core/lib/slice/slice_buffer.cc +50 -23
  385. data/src/core/lib/slice/slice_buffer.h +106 -0
  386. data/src/core/lib/slice/slice_buffer_api.cc +35 -0
  387. data/src/core/lib/slice/slice_internal.h +4 -3
  388. data/src/core/lib/slice/slice_refcount.h +2 -3
  389. data/src/core/lib/slice/slice_refcount_base.h +2 -3
  390. data/src/core/lib/slice/slice_split.cc +3 -0
  391. data/src/core/lib/slice/slice_split.h +0 -4
  392. data/src/core/lib/slice/slice_string_helpers.cc +4 -0
  393. data/src/core/lib/slice/slice_string_helpers.h +1 -4
  394. data/src/core/lib/surface/builtins.cc +7 -2
  395. data/src/core/lib/surface/byte_buffer.cc +7 -1
  396. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  397. data/src/core/lib/surface/call.cc +41 -26
  398. data/src/core/lib/surface/call.h +16 -2
  399. data/src/core/lib/surface/call_details.cc +4 -4
  400. data/src/core/lib/surface/call_log_batch.cc +7 -1
  401. data/src/core/lib/surface/call_test_only.h +4 -1
  402. data/src/core/lib/surface/channel.cc +179 -242
  403. data/src/core/lib/surface/channel.h +94 -57
  404. data/src/core/lib/surface/channel_init.h +2 -0
  405. data/src/core/lib/surface/channel_ping.cc +8 -2
  406. data/src/core/lib/surface/channel_stack_type.cc +0 -2
  407. data/src/core/lib/surface/channel_stack_type.h +0 -2
  408. data/src/core/lib/surface/completion_queue.cc +14 -6
  409. data/src/core/lib/surface/completion_queue.h +5 -1
  410. data/src/core/lib/surface/completion_queue_factory.cc +1 -0
  411. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  412. data/src/core/lib/surface/event_string.cc +1 -7
  413. data/src/core/lib/surface/event_string.h +1 -1
  414. data/src/core/lib/surface/init.cc +17 -45
  415. data/src/core/lib/surface/init.h +0 -8
  416. data/src/core/lib/surface/lame_client.cc +64 -110
  417. data/src/core/lib/surface/lame_client.h +40 -2
  418. data/src/core/lib/surface/metadata_array.cc +2 -0
  419. data/src/core/lib/surface/server.cc +69 -56
  420. data/src/core/lib/surface/server.h +39 -9
  421. data/src/core/lib/surface/validate_metadata.cc +2 -5
  422. data/src/core/lib/surface/validate_metadata.h +3 -0
  423. data/src/core/lib/surface/version.cc +2 -2
  424. data/src/core/lib/transport/bdp_estimator.cc +3 -1
  425. data/src/core/lib/transport/bdp_estimator.h +2 -3
  426. data/src/core/lib/transport/byte_stream.cc +4 -3
  427. data/src/core/lib/transport/byte_stream.h +5 -1
  428. data/src/core/lib/transport/connectivity_state.cc +6 -4
  429. data/src/core/lib/transport/connectivity_state.h +2 -3
  430. data/src/core/lib/transport/error_utils.cc +4 -2
  431. data/src/core/lib/transport/error_utils.h +5 -1
  432. data/src/core/lib/{channel → transport}/handshaker.cc +9 -4
  433. data/src/core/lib/{channel → transport}/handshaker.h +13 -6
  434. data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
  435. data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
  436. data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
  437. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +24 -10
  438. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
  439. data/src/core/lib/transport/metadata_batch.cc +287 -0
  440. data/src/core/lib/transport/metadata_batch.h +133 -264
  441. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  442. data/src/core/lib/transport/parsed_metadata.h +10 -3
  443. data/src/core/lib/transport/status_conversion.cc +2 -0
  444. data/src/core/lib/transport/status_conversion.h +2 -2
  445. data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
  446. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  447. data/src/core/lib/transport/timeout_encoding.cc +2 -6
  448. data/src/core/lib/transport/timeout_encoding.h +5 -1
  449. data/src/core/lib/transport/transport.cc +18 -17
  450. data/src/core/lib/transport/transport.h +28 -2
  451. data/src/core/lib/transport/transport_impl.h +10 -0
  452. data/src/core/lib/transport/transport_op_string.cc +9 -10
  453. data/src/core/lib/uri/uri_parser.cc +11 -3
  454. data/src/core/lib/uri/uri_parser.h +0 -2
  455. data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
  456. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
  457. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
  458. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
  459. data/src/ruby/ext/grpc/extconf.rb +2 -2
  460. data/src/ruby/lib/grpc/version.rb +1 -1
  461. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  462. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  463. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
  464. metadata +36 -29
  465. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  466. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  467. data/src/core/lib/event_engine/sockaddr.h +0 -44
  468. data/src/core/lib/gprpp/capture.h +0 -76
  469. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  470. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  471. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  472. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  473. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  474. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  475. data/src/core/lib/iomgr/event_engine/promise.h +0 -51
  476. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  477. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
  478. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  479. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  480. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  481. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
@@ -29,10 +29,10 @@
29
29
  #include "src/core/lib/channel/channel_stack_builder.h"
30
30
  #include "src/core/lib/channel/promise_based_filter.h"
31
31
  #include "src/core/lib/config/core_configuration.h"
32
- #include "src/core/lib/gprpp/capture.h"
33
32
  #include "src/core/lib/iomgr/timer.h"
34
33
  #include "src/core/lib/promise/exec_ctx_wakeup_scheduler.h"
35
34
  #include "src/core/lib/promise/loop.h"
35
+ #include "src/core/lib/promise/promise.h"
36
36
  #include "src/core/lib/promise/sleep.h"
37
37
  #include "src/core/lib/promise/try_seq.h"
38
38
  #include "src/core/lib/transport/http2_errors.h"
@@ -124,11 +124,7 @@ void MaxAgeFilter::Shutdown() {
124
124
  ChannelIdleFilter::Shutdown();
125
125
  }
126
126
 
127
- void MaxAgeFilter::Start() {
128
- // Trigger idle timer immediately
129
- IncreaseCallCount();
130
- DecreaseCallCount();
131
-
127
+ void MaxAgeFilter::PostInit() {
132
128
  struct StartupClosure {
133
129
  RefCountedPtr<grpc_channel_stack> channel_stack;
134
130
  MaxAgeFilter* filter;
@@ -136,6 +132,9 @@ void MaxAgeFilter::Start() {
136
132
  };
137
133
  auto run_startup = [](void* p, grpc_error_handle) {
138
134
  auto* startup = static_cast<StartupClosure*>(p);
135
+ // Trigger idle timer
136
+ startup->filter->IncreaseCallCount();
137
+ startup->filter->DecreaseCallCount();
139
138
  grpc_transport_op* op = grpc_make_transport_op(nullptr);
140
139
  op->start_connectivity_watch.reset(
141
140
  new ConnectivityWatcher(startup->filter));
@@ -198,9 +197,9 @@ ArenaPromise<ServerMetadataHandle> ChannelIdleFilter::MakeCallPromise(
198
197
  using Decrementer = std::unique_ptr<ChannelIdleFilter, CallCountDecreaser>;
199
198
  IncreaseCallCount();
200
199
  return ArenaPromise<ServerMetadataHandle>(
201
- Capture([](Decrementer*, ArenaPromise<ServerMetadataHandle>* next)
202
- -> Poll<ServerMetadataHandle> { return (*next)(); },
203
- Decrementer(this), next_promise_factory(std::move(call_args))));
200
+ [decrementer = Decrementer(this),
201
+ next = next_promise_factory(std::move(call_args))]() mutable
202
+ -> Poll<ServerMetadataHandle> { return next(); });
204
203
  }
205
204
 
206
205
  bool ChannelIdleFilter::StartTransportOp(grpc_transport_op* op) {
@@ -260,41 +259,30 @@ void ChannelIdleFilter::CloseChannel() {
260
259
  elem->filter->start_transport_op(elem, op);
261
260
  }
262
261
 
263
- namespace {
264
-
265
- const grpc_channel_filter grpc_client_idle_filter =
262
+ const grpc_channel_filter ClientIdleFilter::kFilter =
266
263
  MakePromiseBasedFilter<ClientIdleFilter, FilterEndpoint::kClient>(
267
264
  "client_idle");
268
- const grpc_channel_filter grpc_max_age_filter =
265
+ const grpc_channel_filter MaxAgeFilter::kFilter =
269
266
  MakePromiseBasedFilter<MaxAgeFilter, FilterEndpoint::kServer>("max_age");
270
267
 
271
- } // namespace
272
-
273
268
  void RegisterChannelIdleFilters(CoreConfiguration::Builder* builder) {
274
269
  builder->channel_init()->RegisterStage(
275
270
  GRPC_CLIENT_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
276
271
  [](ChannelStackBuilder* builder) {
277
- const grpc_channel_args* channel_args = builder->channel_args();
278
- if (!grpc_channel_args_want_minimal_stack(channel_args) &&
279
- GetClientIdleTimeout(ChannelArgs::FromC(channel_args)) !=
280
- Duration::Infinity()) {
281
- builder->PrependFilter(&grpc_client_idle_filter, nullptr);
272
+ auto channel_args = builder->channel_args();
273
+ if (!channel_args.WantMinimalStack() &&
274
+ GetClientIdleTimeout(channel_args) != Duration::Infinity()) {
275
+ builder->PrependFilter(&ClientIdleFilter::kFilter);
282
276
  }
283
277
  return true;
284
278
  });
285
279
  builder->channel_init()->RegisterStage(
286
280
  GRPC_SERVER_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
287
281
  [](ChannelStackBuilder* builder) {
288
- const grpc_channel_args* channel_args = builder->channel_args();
289
- if (!grpc_channel_args_want_minimal_stack(channel_args) &&
290
- MaxAgeFilter::Config::FromChannelArgs(
291
- ChannelArgs::FromC(channel_args))
292
- .enable()) {
293
- builder->PrependFilter(
294
- &grpc_max_age_filter,
295
- [](grpc_channel_stack*, grpc_channel_element* elem) {
296
- static_cast<MaxAgeFilter*>(elem->channel_data)->Start();
297
- });
282
+ auto channel_args = builder->channel_args();
283
+ if (!channel_args.WantMinimalStack() &&
284
+ MaxAgeFilter::Config::FromChannelArgs(channel_args).enable()) {
285
+ builder->PrependFilter(&MaxAgeFilter::kFilter);
298
286
  }
299
287
  return true;
300
288
  });
@@ -75,6 +75,8 @@ class ChannelIdleFilter : public ChannelFilter {
75
75
 
76
76
  class ClientIdleFilter final : public ChannelIdleFilter {
77
77
  public:
78
+ static const grpc_channel_filter kFilter;
79
+
78
80
  static absl::StatusOr<ClientIdleFilter> Create(
79
81
  ChannelArgs args, ChannelFilter::Args filter_args);
80
82
 
@@ -84,12 +86,13 @@ class ClientIdleFilter final : public ChannelIdleFilter {
84
86
 
85
87
  class MaxAgeFilter final : public ChannelIdleFilter {
86
88
  public:
89
+ static const grpc_channel_filter kFilter;
87
90
  struct Config;
88
91
 
89
92
  static absl::StatusOr<MaxAgeFilter> Create(ChannelArgs args,
90
93
  ChannelFilter::Args filter_args);
91
94
 
92
- void Start();
95
+ void PostInit() override;
93
96
 
94
97
  private:
95
98
  class ConnectivityWatcher : public AsyncConnectivityStateWatcherInterface {
@@ -18,7 +18,12 @@
18
18
 
19
19
  #include "src/core/ext/filters/client_channel/backend_metric.h"
20
20
 
21
+ #include <string.h>
22
+
23
+ #include <map>
24
+
21
25
  #include "absl/strings/string_view.h"
26
+ #include "upb/upb.h"
22
27
  #include "upb/upb.hpp"
23
28
  #include "xds/data/orca/v3/orca_load_report.upb.h"
24
29
 
@@ -32,14 +37,15 @@ std::map<absl::string_view, double> ParseMap(
32
37
  const EntryType* (*entry_func)(const xds_data_orca_v3_OrcaLoadReport*,
33
38
  size_t*),
34
39
  upb_StringView (*key_func)(const EntryType*),
35
- double (*value_func)(const EntryType*), Arena* arena) {
40
+ double (*value_func)(const EntryType*),
41
+ BackendMetricAllocatorInterface* allocator) {
36
42
  std::map<absl::string_view, double> result;
37
43
  size_t i = kUpb_Map_Begin;
38
44
  while (true) {
39
45
  const auto* entry = entry_func(msg, &i);
40
46
  if (entry == nullptr) break;
41
47
  upb_StringView key_view = key_func(entry);
42
- char* key = static_cast<char*>(arena->Alloc(key_view.size));
48
+ char* key = allocator->AllocateString(key_view.size);
43
49
  memcpy(key, key_view.data, key_view.size);
44
50
  result[absl::string_view(key, key_view.size)] = value_func(entry);
45
51
  }
@@ -48,31 +54,30 @@ std::map<absl::string_view, double> ParseMap(
48
54
 
49
55
  } // namespace
50
56
 
51
- const LoadBalancingPolicy::BackendMetricAccessor::BackendMetricData*
52
- ParseBackendMetricData(const Slice& serialized_load_report, Arena* arena) {
57
+ const BackendMetricData* ParseBackendMetricData(
58
+ absl::string_view serialized_load_report,
59
+ BackendMetricAllocatorInterface* allocator) {
53
60
  upb::Arena upb_arena;
54
61
  xds_data_orca_v3_OrcaLoadReport* msg = xds_data_orca_v3_OrcaLoadReport_parse(
55
- reinterpret_cast<const char*>(serialized_load_report.begin()),
56
- serialized_load_report.size(), upb_arena.ptr());
62
+ serialized_load_report.data(), serialized_load_report.size(),
63
+ upb_arena.ptr());
57
64
  if (msg == nullptr) return nullptr;
58
- auto* backend_metric_data = arena->New<
59
- LoadBalancingPolicy::BackendMetricAccessor::BackendMetricData>();
65
+ BackendMetricData* backend_metric_data =
66
+ allocator->AllocateBackendMetricData();
60
67
  backend_metric_data->cpu_utilization =
61
68
  xds_data_orca_v3_OrcaLoadReport_cpu_utilization(msg);
62
69
  backend_metric_data->mem_utilization =
63
70
  xds_data_orca_v3_OrcaLoadReport_mem_utilization(msg);
64
- backend_metric_data->requests_per_second =
65
- xds_data_orca_v3_OrcaLoadReport_rps(msg);
66
71
  backend_metric_data->request_cost =
67
72
  ParseMap<xds_data_orca_v3_OrcaLoadReport_RequestCostEntry>(
68
73
  msg, xds_data_orca_v3_OrcaLoadReport_request_cost_next,
69
74
  xds_data_orca_v3_OrcaLoadReport_RequestCostEntry_key,
70
- xds_data_orca_v3_OrcaLoadReport_RequestCostEntry_value, arena);
75
+ xds_data_orca_v3_OrcaLoadReport_RequestCostEntry_value, allocator);
71
76
  backend_metric_data->utilization =
72
77
  ParseMap<xds_data_orca_v3_OrcaLoadReport_UtilizationEntry>(
73
78
  msg, xds_data_orca_v3_OrcaLoadReport_utilization_next,
74
79
  xds_data_orca_v3_OrcaLoadReport_UtilizationEntry_key,
75
- xds_data_orca_v3_OrcaLoadReport_UtilizationEntry_value, arena);
80
+ xds_data_orca_v3_OrcaLoadReport_UtilizationEntry_value, allocator);
76
81
  return backend_metric_data;
77
82
  }
78
83
 
@@ -19,19 +19,29 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
- #include <grpc/slice.h>
22
+ #include <stddef.h>
23
23
 
24
- #include "src/core/ext/filters/client_channel/lb_policy.h"
25
- #include "src/core/lib/resource_quota/arena.h"
26
- #include "src/core/lib/slice/slice.h"
24
+ #include "absl/strings/string_view.h"
25
+
26
+ #include "src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h"
27
27
 
28
28
  namespace grpc_core {
29
29
 
30
- // Parses the serialized load report and allocates a BackendMetricData
31
- // object on the arena.
32
- const LoadBalancingPolicy::BackendMetricAccessor::BackendMetricData*
33
- ParseBackendMetricData(const Slice& serialized_load_report, Arena* arena);
30
+ class BackendMetricAllocatorInterface {
31
+ public:
32
+ virtual ~BackendMetricAllocatorInterface() = default;
33
+
34
+ virtual BackendMetricData* AllocateBackendMetricData() = 0;
35
+
36
+ virtual char* AllocateString(size_t size) = 0;
37
+ };
38
+
39
+ // Parses the serialized load report and populates out.
40
+ // Returns false on error.
41
+ const BackendMetricData* ParseBackendMetricData(
42
+ absl::string_view serialized_load_report,
43
+ BackendMetricAllocatorInterface* allocator);
34
44
 
35
45
  } // namespace grpc_core
36
46
 
37
- #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_BACKEND_METRIC_H */
47
+ #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_BACKEND_METRIC_H
@@ -20,22 +20,22 @@
20
20
 
21
21
  #include "src/core/ext/filters/client_channel/backup_poller.h"
22
22
 
23
- #include <grpc/grpc.h>
23
+ #include <inttypes.h>
24
+
24
25
  #include <grpc/support/alloc.h>
25
26
  #include <grpc/support/log.h>
26
27
  #include <grpc/support/sync.h>
27
28
 
28
- #include "src/core/ext/filters/client_channel/client_channel.h"
29
- #include "src/core/lib/gpr/string.h"
30
29
  #include "src/core/lib/gprpp/global_config.h"
31
30
  #include "src/core/lib/gprpp/memory.h"
32
31
  #include "src/core/lib/gprpp/time.h"
32
+ #include "src/core/lib/iomgr/closure.h"
33
33
  #include "src/core/lib/iomgr/error.h"
34
+ #include "src/core/lib/iomgr/exec_ctx.h"
34
35
  #include "src/core/lib/iomgr/iomgr.h"
35
36
  #include "src/core/lib/iomgr/pollset.h"
37
+ #include "src/core/lib/iomgr/pollset_set.h"
36
38
  #include "src/core/lib/iomgr/timer.h"
37
- #include "src/core/lib/surface/channel.h"
38
- #include "src/core/lib/surface/completion_queue.h"
39
39
 
40
40
  #define DEFAULT_POLL_INTERVAL_MS 5000
41
41
 
@@ -21,10 +21,8 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <grpc/grpc.h>
25
-
26
- #include "src/core/lib/channel/channel_stack.h"
27
- #include "src/core/lib/gprpp/global_config.h"
24
+ #include "src/core/lib/gprpp/global_config_generic.h"
25
+ #include "src/core/lib/iomgr/iomgr_fwd.h"
28
26
 
29
27
  GPR_GLOBAL_CONFIG_DECLARE_INT32(grpc_client_channel_backup_poll_interval_ms);
30
28
 
@@ -16,37 +16,58 @@
16
16
 
17
17
  #include <grpc/support/port_platform.h>
18
18
 
19
+ #include <inttypes.h>
20
+
21
+ #include <grpc/grpc.h>
22
+ #include <grpc/impl/codegen/connectivity_state.h>
23
+ #include <grpc/impl/codegen/gpr_types.h>
24
+ #include <grpc/impl/codegen/grpc_types.h>
19
25
  #include <grpc/support/log.h>
20
26
 
21
27
  #include "src/core/ext/filters/client_channel/client_channel.h"
28
+ #include "src/core/lib/channel/channel_stack.h"
29
+ #include "src/core/lib/channel/channel_stack_builder.h"
30
+ #include "src/core/lib/debug/trace.h"
31
+ #include "src/core/lib/gprpp/dual_ref_counted.h"
32
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
33
+ #include "src/core/lib/gprpp/time.h"
34
+ #include "src/core/lib/iomgr/closure.h"
35
+ #include "src/core/lib/iomgr/error.h"
36
+ #include "src/core/lib/iomgr/exec_ctx.h"
37
+ #include "src/core/lib/iomgr/polling_entity.h"
22
38
  #include "src/core/lib/iomgr/timer.h"
23
39
  #include "src/core/lib/surface/api_trace.h"
24
40
  #include "src/core/lib/surface/channel.h"
25
41
  #include "src/core/lib/surface/completion_queue.h"
26
42
  #include "src/core/lib/surface/lame_client.h"
27
43
 
44
+ namespace grpc_core {
28
45
  namespace {
29
46
 
30
- bool IsLameChannel(grpc_channel* channel) {
47
+ bool IsLameChannel(Channel* channel) {
31
48
  grpc_channel_element* elem =
32
- grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
33
- return elem->filter == &grpc_lame_filter;
49
+ grpc_channel_stack_last_element(channel->channel_stack());
50
+ return elem->filter == &LameClientFilter::kFilter;
34
51
  }
35
52
 
36
53
  } // namespace
54
+ } // namespace grpc_core
37
55
 
38
56
  grpc_connectivity_state grpc_channel_check_connectivity_state(
39
- grpc_channel* channel, int try_to_connect) {
57
+ grpc_channel* c_channel, int try_to_connect) {
40
58
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
41
59
  grpc_core::ExecCtx exec_ctx;
42
60
  GRPC_API_TRACE(
43
61
  "grpc_channel_check_connectivity_state(channel=%p, try_to_connect=%d)", 2,
44
- (channel, try_to_connect));
62
+ (c_channel, try_to_connect));
63
+ grpc_core::Channel* channel = grpc_core::Channel::FromC(c_channel);
45
64
  // Forward through to the underlying client channel.
46
65
  grpc_core::ClientChannel* client_channel =
47
66
  grpc_core::ClientChannel::GetFromChannel(channel);
48
67
  if (GPR_UNLIKELY(client_channel == nullptr)) {
49
- if (IsLameChannel(channel)) return GRPC_CHANNEL_TRANSIENT_FAILURE;
68
+ if (grpc_core::IsLameChannel(channel)) {
69
+ return GRPC_CHANNEL_TRANSIENT_FAILURE;
70
+ }
50
71
  gpr_log(GPR_ERROR,
51
72
  "grpc_channel_check_connectivity_state called on something that is "
52
73
  "not a client channel");
@@ -55,11 +76,12 @@ grpc_connectivity_state grpc_channel_check_connectivity_state(
55
76
  return client_channel->CheckConnectivityState(try_to_connect);
56
77
  }
57
78
 
58
- int grpc_channel_num_external_connectivity_watchers(grpc_channel* channel) {
79
+ int grpc_channel_num_external_connectivity_watchers(grpc_channel* c_channel) {
80
+ grpc_core::Channel* channel = grpc_core::Channel::FromC(c_channel);
59
81
  grpc_core::ClientChannel* client_channel =
60
82
  grpc_core::ClientChannel::GetFromChannel(channel);
61
83
  if (client_channel == nullptr) {
62
- if (!IsLameChannel(channel)) {
84
+ if (!grpc_core::IsLameChannel(channel)) {
63
85
  gpr_log(GPR_ERROR,
64
86
  "grpc_channel_num_external_connectivity_watchers called on "
65
87
  "something that is not a client channel");
@@ -70,7 +92,8 @@ int grpc_channel_num_external_connectivity_watchers(grpc_channel* channel) {
70
92
  }
71
93
 
72
94
  int grpc_channel_support_connectivity_watcher(grpc_channel* channel) {
73
- return grpc_core::ClientChannel::GetFromChannel(channel) != nullptr;
95
+ return grpc_core::ClientChannel::GetFromChannel(
96
+ grpc_core::Channel::FromC(channel)) != nullptr;
74
97
  }
75
98
 
76
99
  namespace grpc_core {
@@ -78,22 +101,25 @@ namespace {
78
101
 
79
102
  class StateWatcher : public DualRefCounted<StateWatcher> {
80
103
  public:
81
- StateWatcher(grpc_channel* channel, grpc_completion_queue* cq, void* tag,
104
+ StateWatcher(grpc_channel* c_channel, grpc_completion_queue* cq, void* tag,
82
105
  grpc_connectivity_state last_observed_state,
83
106
  gpr_timespec deadline)
84
- : channel_(channel), cq_(cq), tag_(tag), state_(last_observed_state) {
107
+ : channel_(Channel::FromC(c_channel)->Ref()),
108
+ cq_(cq),
109
+ tag_(tag),
110
+ state_(last_observed_state) {
85
111
  GPR_ASSERT(grpc_cq_begin_op(cq, tag));
86
- GRPC_CHANNEL_INTERNAL_REF(channel, "watch_channel_connectivity");
87
112
  GRPC_CLOSURE_INIT(&on_complete_, WatchComplete, this, nullptr);
88
113
  GRPC_CLOSURE_INIT(&on_timeout_, TimeoutComplete, this, nullptr);
89
- ClientChannel* client_channel = ClientChannel::GetFromChannel(channel);
114
+ ClientChannel* client_channel =
115
+ ClientChannel::GetFromChannel(channel_.get());
90
116
  if (client_channel == nullptr) {
91
117
  // If the target URI used to create the channel was invalid, channel
92
118
  // stack initialization failed, and that caused us to create a lame
93
119
  // channel. In that case, connectivity state will never change (it
94
120
  // will always be TRANSIENT_FAILURE), so we don't actually start a
95
121
  // watch, but we are hiding that fact from the application.
96
- if (IsLameChannel(channel)) {
122
+ if (IsLameChannel(channel_.get())) {
97
123
  // Ref from object creation is held by timer callback.
98
124
  StartTimer(Timestamp::FromTimespecRoundUp(deadline));
99
125
  return;
@@ -114,10 +140,6 @@ class StateWatcher : public DualRefCounted<StateWatcher> {
114
140
  &on_complete_, watcher_timer_init_state->closure());
115
141
  }
116
142
 
117
- ~StateWatcher() override {
118
- GRPC_CHANNEL_INTERNAL_UNREF(channel_, "watch_channel_connectivity");
119
- }
120
-
121
143
  private:
122
144
  // A fire-and-forget object used to delay starting the timer until the
123
145
  // ClientChannel actually starts the watch.
@@ -160,7 +182,7 @@ class StateWatcher : public DualRefCounted<StateWatcher> {
160
182
  self->timer_fired_ = error == GRPC_ERROR_NONE;
161
183
  // If this is a client channel (not a lame channel), cancel the watch.
162
184
  ClientChannel* client_channel =
163
- ClientChannel::GetFromChannel(self->channel_);
185
+ ClientChannel::GetFromChannel(self->channel_.get());
164
186
  if (client_channel != nullptr) {
165
187
  client_channel->CancelExternalConnectivityWatcher(&self->on_complete_);
166
188
  }
@@ -184,7 +206,7 @@ class StateWatcher : public DualRefCounted<StateWatcher> {
184
206
  self->WeakUnref();
185
207
  }
186
208
 
187
- grpc_channel* channel_;
209
+ RefCountedPtr<Channel> channel_;
188
210
  grpc_completion_queue* cq_;
189
211
  void* tag_;
190
212
 
@@ -20,30 +20,38 @@
20
20
 
21
21
  #include <inttypes.h>
22
22
  #include <limits.h>
23
- #include <stdbool.h>
24
- #include <stdio.h>
25
23
  #include <string.h>
26
24
 
25
+ #include <algorithm>
26
+ #include <functional>
27
+ #include <new>
27
28
  #include <set>
29
+ #include <vector>
28
30
 
29
31
  #include "absl/container/inlined_vector.h"
32
+ #include "absl/memory/memory.h"
33
+ #include "absl/status/statusor.h"
34
+ #include "absl/strings/cord.h"
30
35
  #include "absl/strings/numbers.h"
31
36
  #include "absl/strings/str_cat.h"
32
37
  #include "absl/strings/str_join.h"
33
38
  #include "absl/strings/string_view.h"
34
39
  #include "absl/types/optional.h"
40
+ #include "absl/types/variant.h"
35
41
 
42
+ #include <grpc/impl/codegen/gpr_types.h>
43
+ #include <grpc/slice.h>
44
+ #include <grpc/status.h>
36
45
  #include <grpc/support/alloc.h>
37
46
  #include <grpc/support/log.h>
38
47
  #include <grpc/support/string_util.h>
39
- #include <grpc/support/sync.h>
40
48
 
41
49
  #include "src/core/ext/filters/client_channel/backend_metric.h"
42
50
  #include "src/core/ext/filters/client_channel/backup_poller.h"
51
+ #include "src/core/ext/filters/client_channel/client_channel_channelz.h"
43
52
  #include "src/core/ext/filters/client_channel/config_selector.h"
44
53
  #include "src/core/ext/filters/client_channel/dynamic_filters.h"
45
54
  #include "src/core/ext/filters/client_channel/global_subchannel_pool.h"
46
- #include "src/core/ext/filters/client_channel/http_connect_handshaker.h"
47
55
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
48
56
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
49
57
  #include "src/core/ext/filters/client_channel/local_subchannel_pool.h"
@@ -51,23 +59,29 @@
51
59
  #include "src/core/ext/filters/client_channel/resolver_result_parsing.h"
52
60
  #include "src/core/ext/filters/client_channel/retry_filter.h"
53
61
  #include "src/core/ext/filters/client_channel/subchannel.h"
62
+ #include "src/core/ext/filters/client_channel/subchannel_interface.h"
63
+ #include "src/core/ext/filters/client_channel/subchannel_interface_internal.h"
54
64
  #include "src/core/ext/filters/deadline/deadline_filter.h"
55
- #include "src/core/lib/backoff/backoff.h"
56
65
  #include "src/core/lib/channel/channel_args.h"
57
66
  #include "src/core/lib/channel/channel_stack.h"
58
- #include "src/core/lib/channel/connected_channel.h"
59
- #include "src/core/lib/channel/status_util.h"
60
- #include "src/core/lib/gpr/string.h"
67
+ #include "src/core/lib/channel/channel_trace.h"
68
+ #include "src/core/lib/config/core_configuration.h"
69
+ #include "src/core/lib/debug/trace.h"
70
+ #include "src/core/lib/gpr/useful.h"
71
+ #include "src/core/lib/gprpp/debug_location.h"
61
72
  #include "src/core/lib/gprpp/sync.h"
62
- #include "src/core/lib/iomgr/iomgr.h"
73
+ #include "src/core/lib/iomgr/exec_ctx.h"
63
74
  #include "src/core/lib/iomgr/polling_entity.h"
75
+ #include "src/core/lib/iomgr/pollset_set.h"
64
76
  #include "src/core/lib/iomgr/work_serializer.h"
77
+ #include "src/core/lib/json/json.h"
65
78
  #include "src/core/lib/profiling/timers.h"
66
79
  #include "src/core/lib/resolver/resolver_registry.h"
80
+ #include "src/core/lib/resolver/server_address.h"
67
81
  #include "src/core/lib/service_config/service_config_call_data.h"
68
82
  #include "src/core/lib/service_config/service_config_impl.h"
69
83
  #include "src/core/lib/slice/slice_internal.h"
70
- #include "src/core/lib/slice/slice_string_helpers.h"
84
+ #include "src/core/lib/slice/slice_refcount.h"
71
85
  #include "src/core/lib/surface/channel.h"
72
86
  #include "src/core/lib/transport/connectivity_state.h"
73
87
  #include "src/core/lib/transport/error_utils.h"
@@ -241,6 +255,7 @@ const grpc_channel_filter ClientChannel::kFilterVtable = {
241
255
  ClientChannel::CallData::Destroy,
242
256
  sizeof(ClientChannel),
243
257
  ClientChannel::Init,
258
+ grpc_channel_stack_no_post_init,
244
259
  ClientChannel::Destroy,
245
260
  ClientChannel::GetChannelInfo,
246
261
  "client-channel",
@@ -392,6 +407,7 @@ const grpc_channel_filter DynamicTerminationFilter::kFilterVtable = {
392
407
  DynamicTerminationFilter::CallData::Destroy,
393
408
  sizeof(DynamicTerminationFilter),
394
409
  DynamicTerminationFilter::Init,
410
+ grpc_channel_stack_no_post_init,
395
411
  DynamicTerminationFilter::Destroy,
396
412
  DynamicTerminationFilter::GetChannelInfo,
397
413
  "dynamic_filter_termination",
@@ -523,10 +539,19 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
523
539
  return subchannel_->connected_subchannel();
524
540
  }
525
541
 
526
- void AttemptToConnect() override { subchannel_->AttemptToConnect(); }
542
+ void RequestConnection() override { subchannel_->RequestConnection(); }
527
543
 
528
544
  void ResetBackoff() override { subchannel_->ResetBackoff(); }
529
545
 
546
+ void AddDataWatcher(std::unique_ptr<DataWatcherInterface> watcher) override
547
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
548
+ std::unique_ptr<InternalSubchannelDataWatcherInterface> internal_watcher(
549
+ static_cast<InternalSubchannelDataWatcherInterface*>(
550
+ watcher.release()));
551
+ internal_watcher->SetSubchannel(subchannel_.get());
552
+ data_watchers_.push_back(std::move(internal_watcher));
553
+ }
554
+
530
555
  const grpc_channel_args* channel_args() override {
531
556
  return subchannel_->channel_args();
532
557
  }
@@ -667,6 +692,8 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
667
692
  // corresponding WrapperWatcher to cancel on the underlying subchannel.
668
693
  std::map<ConnectivityStateWatcherInterface*, WatcherWrapper*> watcher_map_
669
694
  ABSL_GUARDED_BY(*chand_->work_serializer_);
695
+ std::vector<std::unique_ptr<InternalSubchannelDataWatcherInterface>>
696
+ data_watchers_ ABSL_GUARDED_BY(*chand_->work_serializer_);
670
697
  };
671
698
 
672
699
  //
@@ -986,9 +1013,9 @@ class ClientChannel::ClientChannelControlHelper
986
1013
  // ClientChannel implementation
987
1014
  //
988
1015
 
989
- ClientChannel* ClientChannel::GetFromChannel(grpc_channel* channel) {
1016
+ ClientChannel* ClientChannel::GetFromChannel(Channel* channel) {
990
1017
  grpc_channel_element* elem =
991
- grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
1018
+ grpc_channel_stack_last_element(channel->channel_stack());
992
1019
  if (elem->filter != &kFilterVtable) return nullptr;
993
1020
  return static_cast<ClientChannel*>(elem->channel_data);
994
1021
  }
@@ -2547,15 +2574,32 @@ class ClientChannel::LoadBalancedCall::BackendMetricAccessor
2547
2574
  if (lb_call_->backend_metric_data_ == nullptr &&
2548
2575
  lb_call_->recv_trailing_metadata_ != nullptr) {
2549
2576
  if (const auto* md = lb_call_->recv_trailing_metadata_->get_pointer(
2550
- XEndpointLoadMetricsBinMetadata())) {
2577
+ EndpointLoadMetricsBinMetadata())) {
2578
+ BackendMetricAllocator allocator(lb_call_->arena_);
2551
2579
  lb_call_->backend_metric_data_ =
2552
- ParseBackendMetricData(*md, lb_call_->arena_);
2580
+ ParseBackendMetricData(md->as_string_view(), &allocator);
2553
2581
  }
2554
2582
  }
2555
2583
  return lb_call_->backend_metric_data_;
2556
2584
  }
2557
2585
 
2558
2586
  private:
2587
+ class BackendMetricAllocator : public BackendMetricAllocatorInterface {
2588
+ public:
2589
+ explicit BackendMetricAllocator(Arena* arena) : arena_(arena) {}
2590
+
2591
+ BackendMetricData* AllocateBackendMetricData() override {
2592
+ return arena_->New<BackendMetricData>();
2593
+ }
2594
+
2595
+ char* AllocateString(size_t size) override {
2596
+ return static_cast<char*>(arena_->Alloc(size));
2597
+ }
2598
+
2599
+ private:
2600
+ Arena* arena_;
2601
+ };
2602
+
2559
2603
  LoadBalancedCall* lb_call_;
2560
2604
  };
2561
2605
 
@@ -2605,8 +2649,7 @@ ClientChannel::LoadBalancedCall::~LoadBalancedCall() {
2605
2649
  GRPC_ERROR_UNREF(cancel_error_);
2606
2650
  GRPC_ERROR_UNREF(failure_error_);
2607
2651
  if (backend_metric_data_ != nullptr) {
2608
- backend_metric_data_->LoadBalancingPolicy::BackendMetricAccessor::
2609
- BackendMetricData::~BackendMetricData();
2652
+ backend_metric_data_->BackendMetricData::~BackendMetricData();
2610
2653
  }
2611
2654
  // Make sure there are no remaining pending batches.
2612
2655
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {