grpc 1.50.0 → 1.51.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 (459) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +131 -42
  3. data/include/grpc/event_engine/event_engine.h +10 -3
  4. data/include/grpc/event_engine/slice_buffer.h +17 -0
  5. data/include/grpc/grpc.h +0 -10
  6. data/include/grpc/impl/codegen/grpc_types.h +1 -5
  7. data/include/grpc/impl/codegen/port_platform.h +0 -3
  8. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +19 -13
  9. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -0
  10. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  11. data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -5
  12. data/src/core/ext/filters/client_channel/client_channel.cc +120 -140
  13. data/src/core/ext/filters/client_channel/client_channel.h +3 -4
  14. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +0 -2
  15. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  16. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  17. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
  18. data/src/core/ext/filters/client_channel/connector.h +1 -1
  19. data/src/core/ext/filters/client_channel/dynamic_filters.cc +20 -47
  20. data/src/core/ext/filters/client_channel/dynamic_filters.h +7 -8
  21. data/src/core/ext/filters/client_channel/health/health_check_client.cc +3 -4
  22. data/src/core/ext/filters/client_channel/http_proxy.cc +0 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
  24. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +5 -0
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +8 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +35 -44
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -3
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +3 -4
  30. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +41 -29
  32. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +9 -11
  34. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -12
  35. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +8 -10
  36. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +26 -27
  37. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +7 -9
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +44 -26
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +17 -27
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +13 -7
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +48 -47
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -126
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -9
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -32
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +22 -23
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +50 -52
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +2 -4
  53. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
  54. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +34 -26
  55. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
  56. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
  57. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +63 -46
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +80 -102
  59. data/src/core/ext/filters/client_channel/retry_service_config.cc +192 -234
  60. data/src/core/ext/filters/client_channel/retry_service_config.h +20 -23
  61. data/src/core/ext/filters/client_channel/retry_throttle.cc +8 -8
  62. data/src/core/ext/filters/client_channel/retry_throttle.h +8 -7
  63. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  64. data/src/core/ext/filters/client_channel/subchannel.cc +21 -25
  65. data/src/core/ext/filters/client_channel/subchannel.h +2 -2
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +11 -12
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +13 -14
  68. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -4
  70. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  71. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
  72. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -16
  73. data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
  74. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +13 -13
  75. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +34 -34
  76. data/src/core/ext/filters/http/server/http_server_filter.cc +26 -25
  77. data/src/core/ext/filters/message_size/message_size_filter.cc +86 -117
  78. data/src/core/ext/filters/message_size/message_size_filter.h +22 -15
  79. data/src/core/ext/filters/rbac/rbac_filter.cc +12 -12
  80. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +728 -530
  81. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -3
  82. data/src/core/ext/filters/server_config_selector/server_config_selector.h +1 -1
  83. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -7
  84. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +17 -21
  85. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +57 -72
  86. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
  87. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +212 -253
  89. data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -11
  90. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -3
  91. data/src/core/ext/transport/chttp2/transport/frame_data.cc +16 -15
  92. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  93. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +13 -13
  94. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -3
  95. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +10 -7
  96. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +15 -17
  97. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +5 -4
  98. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -6
  99. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -1
  100. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +31 -39
  102. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +7 -6
  103. data/src/core/ext/transport/chttp2/transport/internal.h +24 -8
  104. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -52
  105. data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
  106. data/src/core/ext/transport/chttp2/transport/varint.h +11 -8
  107. data/src/core/ext/transport/chttp2/transport/writing.cc +16 -16
  108. data/src/core/ext/transport/inproc/inproc_transport.cc +97 -115
  109. data/src/core/ext/xds/certificate_provider_store.cc +4 -4
  110. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -7
  111. data/src/core/ext/xds/xds_api.cc +15 -68
  112. data/src/core/ext/xds/xds_api.h +3 -7
  113. data/src/core/ext/xds/xds_bootstrap.h +0 -1
  114. data/src/core/ext/xds/xds_bootstrap_grpc.cc +3 -12
  115. data/src/core/ext/xds/xds_bootstrap_grpc.h +16 -1
  116. data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
  117. data/src/core/ext/xds/xds_channel_stack_modifier.cc +0 -1
  118. data/src/core/ext/xds/xds_client.cc +122 -90
  119. data/src/core/ext/xds/xds_client.h +7 -2
  120. data/src/core/ext/xds/xds_client_grpc.cc +5 -24
  121. data/src/core/ext/xds/xds_cluster.cc +291 -183
  122. data/src/core/ext/xds/xds_cluster.h +11 -15
  123. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +32 -29
  124. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +35 -16
  125. data/src/core/ext/xds/xds_common_types.cc +208 -141
  126. data/src/core/ext/xds/xds_common_types.h +19 -13
  127. data/src/core/ext/xds/xds_endpoint.cc +214 -129
  128. data/src/core/ext/xds/xds_endpoint.h +4 -7
  129. data/src/core/ext/xds/xds_http_fault_filter.cc +56 -43
  130. data/src/core/ext/xds/xds_http_fault_filter.h +13 -21
  131. data/src/core/ext/xds/xds_http_filters.cc +60 -73
  132. data/src/core/ext/xds/xds_http_filters.h +67 -19
  133. data/src/core/ext/xds/xds_http_rbac_filter.cc +152 -207
  134. data/src/core/ext/xds/xds_http_rbac_filter.h +12 -15
  135. data/src/core/ext/xds/xds_lb_policy_registry.cc +122 -169
  136. data/src/core/ext/xds/xds_lb_policy_registry.h +10 -11
  137. data/src/core/ext/xds/xds_listener.cc +459 -417
  138. data/src/core/ext/xds/xds_listener.h +43 -47
  139. data/src/core/ext/xds/xds_resource_type.h +3 -11
  140. data/src/core/ext/xds/xds_resource_type_impl.h +8 -13
  141. data/src/core/ext/xds/xds_route_config.cc +94 -80
  142. data/src/core/ext/xds/xds_route_config.h +10 -10
  143. data/src/core/ext/xds/xds_routing.cc +2 -1
  144. data/src/core/ext/xds/xds_routing.h +2 -0
  145. data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -94
  146. data/src/core/ext/xds/xds_transport_grpc.cc +4 -5
  147. data/src/core/lib/address_utils/parse_address.cc +11 -10
  148. data/src/core/lib/channel/channel_args.h +16 -1
  149. data/src/core/lib/channel/channel_stack.cc +23 -20
  150. data/src/core/lib/channel/channel_stack.h +17 -4
  151. data/src/core/lib/channel/channel_stack_builder.cc +4 -7
  152. data/src/core/lib/channel/channel_stack_builder.h +14 -6
  153. data/src/core/lib/channel/channel_stack_builder_impl.cc +25 -7
  154. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -0
  155. data/src/core/lib/channel/channel_trace.cc +4 -5
  156. data/src/core/lib/channel/channelz.cc +1 -1
  157. data/src/core/lib/channel/connected_channel.cc +695 -35
  158. data/src/core/lib/channel/connected_channel.h +0 -4
  159. data/src/core/lib/channel/promise_based_filter.cc +1004 -140
  160. data/src/core/lib/channel/promise_based_filter.h +364 -87
  161. data/src/core/lib/compression/message_compress.cc +5 -5
  162. data/src/core/lib/debug/event_log.cc +88 -0
  163. data/src/core/lib/debug/event_log.h +81 -0
  164. data/src/core/lib/debug/histogram_view.cc +69 -0
  165. data/src/core/lib/{slice/slice_refcount.cc → debug/histogram_view.h} +15 -13
  166. data/src/core/lib/debug/stats.cc +22 -119
  167. data/src/core/lib/debug/stats.h +29 -35
  168. data/src/core/lib/debug/stats_data.cc +224 -73
  169. data/src/core/lib/debug/stats_data.h +263 -122
  170. data/src/core/lib/event_engine/common_closures.h +71 -0
  171. data/src/core/lib/event_engine/default_event_engine.cc +38 -15
  172. data/src/core/lib/event_engine/default_event_engine.h +15 -3
  173. data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -4
  174. data/src/core/lib/event_engine/memory_allocator.cc +1 -1
  175. data/src/core/lib/event_engine/poller.h +10 -4
  176. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
  177. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
  178. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
  179. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  180. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  181. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  182. data/src/core/lib/event_engine/{executor/threaded_executor.cc → posix_engine/event_poller_posix_default.h} +13 -16
  183. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  184. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  185. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
  186. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  187. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
  188. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
  189. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +453 -18
  190. data/src/core/lib/event_engine/posix_engine/posix_engine.h +148 -24
  191. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  192. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
  193. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
  194. data/src/core/lib/event_engine/posix_engine/timer.h +9 -8
  195. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +57 -194
  196. data/src/core/lib/event_engine/posix_engine/timer_manager.h +21 -49
  197. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
  198. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
  199. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
  200. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  201. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
  202. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  203. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  204. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  205. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  206. data/src/core/lib/event_engine/slice.cc +7 -6
  207. data/src/core/lib/event_engine/slice_buffer.cc +2 -2
  208. data/src/core/lib/event_engine/thread_pool.cc +106 -25
  209. data/src/core/lib/event_engine/thread_pool.h +32 -9
  210. data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
  211. data/src/core/lib/event_engine/windows/windows_engine.cc +18 -12
  212. data/src/core/lib/event_engine/windows/windows_engine.h +8 -4
  213. data/src/core/lib/experiments/config.cc +1 -1
  214. data/src/core/lib/experiments/experiments.cc +13 -2
  215. data/src/core/lib/experiments/experiments.h +8 -1
  216. data/src/core/lib/gpr/cpu_linux.cc +6 -2
  217. data/src/core/lib/gpr/log_linux.cc +3 -4
  218. data/src/core/lib/gpr/string.h +1 -1
  219. data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
  220. data/src/core/lib/gprpp/load_file.cc +75 -0
  221. data/src/core/lib/gprpp/load_file.h +33 -0
  222. data/src/core/lib/gprpp/per_cpu.h +46 -0
  223. data/src/core/lib/gprpp/stat_posix.cc +5 -4
  224. data/src/core/lib/gprpp/stat_windows.cc +3 -2
  225. data/src/core/lib/gprpp/status_helper.h +1 -3
  226. data/src/core/lib/gprpp/strerror.cc +41 -0
  227. data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/strerror.h} +9 -13
  228. data/src/core/lib/gprpp/thd_windows.cc +1 -2
  229. data/src/core/lib/gprpp/time.cc +3 -4
  230. data/src/core/lib/gprpp/time.h +13 -2
  231. data/src/core/lib/gprpp/validation_errors.h +18 -1
  232. data/src/core/lib/http/httpcli.cc +40 -44
  233. data/src/core/lib/http/httpcli.h +6 -5
  234. data/src/core/lib/http/httpcli_security_connector.cc +4 -6
  235. data/src/core/lib/http/parser.cc +54 -65
  236. data/src/core/lib/iomgr/buffer_list.cc +105 -116
  237. data/src/core/lib/iomgr/buffer_list.h +60 -44
  238. data/src/core/lib/iomgr/call_combiner.cc +11 -10
  239. data/src/core/lib/iomgr/call_combiner.h +3 -4
  240. data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
  241. data/src/core/lib/iomgr/closure.h +49 -5
  242. data/src/core/lib/iomgr/combiner.cc +2 -2
  243. data/src/core/lib/iomgr/endpoint.h +1 -1
  244. data/src/core/lib/iomgr/endpoint_cfstream.cc +26 -25
  245. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
  246. data/src/core/lib/iomgr/error.cc +27 -42
  247. data/src/core/lib/iomgr/error.h +22 -152
  248. data/src/core/lib/iomgr/ev_apple.cc +4 -4
  249. data/src/core/lib/iomgr/ev_epoll1_linux.cc +26 -25
  250. data/src/core/lib/iomgr/ev_poll_posix.cc +27 -31
  251. data/src/core/lib/iomgr/exec_ctx.cc +3 -4
  252. data/src/core/lib/iomgr/exec_ctx.h +2 -3
  253. data/src/core/lib/iomgr/executor.cc +1 -2
  254. data/src/core/lib/iomgr/internal_errqueue.cc +3 -1
  255. data/src/core/lib/iomgr/iocp_windows.cc +1 -0
  256. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  257. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -1
  258. data/src/core/lib/iomgr/iomgr_windows.cc +2 -1
  259. data/src/core/lib/iomgr/load_file.cc +5 -9
  260. data/src/core/lib/iomgr/lockfree_event.cc +10 -10
  261. data/src/core/lib/iomgr/pollset_windows.cc +4 -4
  262. data/src/core/lib/iomgr/python_util.h +2 -2
  263. data/src/core/lib/iomgr/resolve_address.cc +8 -3
  264. data/src/core/lib/iomgr/resolve_address.h +3 -4
  265. data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
  266. data/src/core/lib/iomgr/resolve_address_posix.cc +14 -25
  267. data/src/core/lib/iomgr/resolve_address_posix.h +1 -2
  268. data/src/core/lib/iomgr/resolve_address_windows.cc +14 -17
  269. data/src/core/lib/iomgr/resolve_address_windows.h +1 -2
  270. data/src/core/lib/iomgr/socket_utils_common_posix.cc +30 -29
  271. data/src/core/lib/iomgr/socket_utils_posix.cc +1 -0
  272. data/src/core/lib/iomgr/socket_utils_posix.h +2 -2
  273. data/src/core/lib/iomgr/socket_windows.cc +2 -2
  274. data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -10
  275. data/src/core/lib/iomgr/tcp_client_posix.cc +31 -35
  276. data/src/core/lib/iomgr/tcp_client_windows.cc +8 -12
  277. data/src/core/lib/iomgr/tcp_posix.cc +92 -108
  278. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -34
  279. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  280. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +18 -21
  281. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -13
  282. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
  283. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -29
  284. data/src/core/lib/iomgr/tcp_windows.cc +27 -34
  285. data/src/core/lib/iomgr/timer.h +8 -8
  286. data/src/core/lib/iomgr/timer_generic.cc +9 -15
  287. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
  288. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -3
  289. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
  290. data/src/core/lib/json/json_channel_args.h +42 -0
  291. data/src/core/lib/json/json_object_loader.cc +7 -2
  292. data/src/core/lib/json/json_object_loader.h +22 -0
  293. data/src/core/lib/json/json_util.cc +5 -5
  294. data/src/core/lib/json/json_util.h +4 -4
  295. data/src/core/lib/load_balancing/lb_policy.cc +1 -1
  296. data/src/core/lib/load_balancing/lb_policy.h +4 -0
  297. data/src/core/lib/load_balancing/subchannel_interface.h +0 -7
  298. data/src/core/lib/matchers/matchers.cc +3 -4
  299. data/src/core/lib/promise/activity.cc +16 -2
  300. data/src/core/lib/promise/activity.h +38 -15
  301. data/src/core/lib/promise/arena_promise.h +80 -51
  302. data/src/core/lib/promise/context.h +13 -6
  303. data/src/core/lib/promise/detail/basic_seq.h +9 -28
  304. data/src/core/lib/promise/detail/promise_factory.h +58 -10
  305. data/src/core/lib/promise/detail/status.h +28 -0
  306. data/src/core/lib/promise/detail/switch.h +1455 -0
  307. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +3 -1
  308. data/src/core/lib/promise/for_each.h +129 -0
  309. data/src/core/lib/promise/loop.h +7 -5
  310. data/src/core/lib/promise/map_pipe.h +87 -0
  311. data/src/core/lib/promise/pipe.cc +19 -0
  312. data/src/core/lib/promise/pipe.h +505 -0
  313. data/src/core/lib/promise/poll.h +13 -0
  314. data/src/core/lib/promise/seq.h +3 -5
  315. data/src/core/lib/promise/sleep.cc +5 -4
  316. data/src/core/lib/promise/sleep.h +1 -2
  317. data/src/core/lib/promise/try_concurrently.h +341 -0
  318. data/src/core/lib/promise/try_seq.h +10 -13
  319. data/src/core/lib/resolver/server_address.cc +1 -0
  320. data/src/core/lib/resolver/server_address.h +1 -3
  321. data/src/core/lib/resource_quota/api.cc +0 -1
  322. data/src/core/lib/resource_quota/arena.cc +19 -0
  323. data/src/core/lib/resource_quota/arena.h +89 -0
  324. data/src/core/lib/resource_quota/memory_quota.cc +1 -0
  325. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +1 -3
  326. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
  327. data/src/core/lib/security/authorization/matchers.cc +25 -22
  328. data/src/core/lib/security/authorization/rbac_policy.cc +2 -3
  329. data/src/core/lib/security/context/security_context.h +10 -0
  330. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
  331. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  332. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +77 -55
  333. data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -3
  334. data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -51
  335. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +17 -21
  336. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +21 -25
  337. data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -0
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -24
  339. data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -0
  340. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -2
  341. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
  342. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -5
  343. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +24 -30
  344. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -5
  345. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -3
  346. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +19 -27
  347. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -11
  348. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -41
  349. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
  350. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +6 -11
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +8 -15
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +2 -6
  354. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +1 -4
  355. data/src/core/lib/security/security_connector/local/local_security_connector.cc +7 -11
  356. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +9 -14
  357. data/src/core/lib/security/security_connector/ssl_utils.cc +5 -7
  358. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -27
  359. data/src/core/lib/security/transport/client_auth_filter.cc +1 -1
  360. data/src/core/lib/security/transport/secure_endpoint.cc +26 -28
  361. data/src/core/lib/security/transport/security_handshaker.cc +53 -53
  362. data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
  363. data/src/core/lib/security/transport/tsi_error.cc +6 -3
  364. data/src/core/lib/security/util/json_util.cc +4 -5
  365. data/src/core/lib/service_config/service_config.h +1 -1
  366. data/src/core/lib/service_config/service_config_impl.cc +111 -158
  367. data/src/core/lib/service_config/service_config_impl.h +14 -17
  368. data/src/core/lib/service_config/service_config_parser.cc +14 -31
  369. data/src/core/lib/service_config/service_config_parser.h +14 -10
  370. data/src/core/lib/slice/b64.cc +2 -2
  371. data/src/core/lib/slice/slice.cc +7 -1
  372. data/src/core/lib/slice/slice.h +19 -6
  373. data/src/core/lib/slice/slice_buffer.cc +13 -14
  374. data/src/core/lib/slice/slice_internal.h +13 -21
  375. data/src/core/lib/slice/slice_refcount.h +34 -19
  376. data/src/core/lib/surface/byte_buffer.cc +3 -4
  377. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  378. data/src/core/lib/surface/call.cc +1366 -239
  379. data/src/core/lib/surface/call.h +44 -0
  380. data/src/core/lib/surface/call_details.cc +3 -3
  381. data/src/core/lib/surface/call_trace.cc +113 -0
  382. data/src/core/lib/surface/call_trace.h +30 -0
  383. data/src/core/lib/surface/channel.cc +44 -49
  384. data/src/core/lib/surface/channel.h +9 -1
  385. data/src/core/lib/surface/channel_ping.cc +1 -1
  386. data/src/core/lib/surface/channel_stack_type.cc +4 -0
  387. data/src/core/lib/surface/channel_stack_type.h +2 -0
  388. data/src/core/lib/surface/completion_queue.cc +38 -52
  389. data/src/core/lib/surface/init.cc +8 -39
  390. data/src/core/lib/surface/init_internally.h +8 -0
  391. data/src/core/lib/surface/lame_client.cc +10 -8
  392. data/src/core/lib/surface/server.cc +48 -70
  393. data/src/core/lib/surface/server.h +3 -4
  394. data/src/core/lib/surface/validate_metadata.cc +11 -12
  395. data/src/core/lib/surface/version.cc +2 -2
  396. data/src/core/lib/transport/connectivity_state.cc +2 -2
  397. data/src/core/lib/transport/error_utils.cc +34 -28
  398. data/src/core/lib/transport/error_utils.h +3 -3
  399. data/src/core/lib/transport/handshaker.cc +14 -14
  400. data/src/core/lib/transport/handshaker.h +1 -1
  401. data/src/core/lib/transport/handshaker_factory.h +26 -0
  402. data/src/core/lib/transport/handshaker_registry.cc +8 -2
  403. data/src/core/lib/transport/handshaker_registry.h +3 -4
  404. data/src/core/lib/transport/http_connect_handshaker.cc +23 -24
  405. data/src/core/lib/transport/metadata_batch.h +17 -1
  406. data/src/core/lib/transport/parsed_metadata.cc +2 -6
  407. data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -20
  408. data/src/core/lib/transport/transport.cc +63 -17
  409. data/src/core/lib/transport/transport.h +64 -68
  410. data/src/core/lib/transport/transport_impl.h +1 -1
  411. data/src/core/lib/transport/transport_op_string.cc +7 -6
  412. data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -10
  413. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -14
  414. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +10 -10
  415. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +8 -8
  416. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
  417. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
  418. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
  419. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  420. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +5 -5
  421. data/src/core/tsi/fake_transport_security.cc +3 -3
  422. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +7 -3
  423. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  424. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +6 -2
  425. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -2
  426. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +0 -3
  427. data/src/ruby/lib/grpc/version.rb +1 -1
  428. data/src/ruby/spec/channel_spec.rb +0 -43
  429. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  430. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  431. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  432. data/third_party/zlib/compress.c +3 -3
  433. data/third_party/zlib/crc32.c +21 -12
  434. data/third_party/zlib/deflate.c +112 -106
  435. data/third_party/zlib/deflate.h +2 -2
  436. data/third_party/zlib/gzlib.c +1 -1
  437. data/third_party/zlib/gzread.c +3 -5
  438. data/third_party/zlib/gzwrite.c +1 -1
  439. data/third_party/zlib/infback.c +10 -7
  440. data/third_party/zlib/inflate.c +5 -2
  441. data/third_party/zlib/inftrees.c +2 -2
  442. data/third_party/zlib/inftrees.h +1 -1
  443. data/third_party/zlib/trees.c +61 -62
  444. data/third_party/zlib/uncompr.c +2 -2
  445. data/third_party/zlib/zconf.h +16 -3
  446. data/third_party/zlib/zlib.h +10 -10
  447. data/third_party/zlib/zutil.c +9 -7
  448. data/third_party/zlib/zutil.h +1 -0
  449. metadata +55 -18
  450. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
  451. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
  452. data/src/core/lib/event_engine/executor/threaded_executor.h +0 -44
  453. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  454. data/src/core/lib/gpr/murmur_hash.h +0 -29
  455. data/src/core/lib/gpr/tls.h +0 -156
  456. data/src/core/lib/promise/call_push_pull.h +0 -148
  457. data/src/core/lib/slice/slice_api.cc +0 -39
  458. data/src/core/lib/slice/slice_buffer_api.cc +0 -35
  459. data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -25,13 +25,14 @@
25
25
  #include <utility>
26
26
  #include <vector>
27
27
 
28
- #include "absl/memory/memory.h"
29
28
  #include "absl/status/status.h"
30
29
  #include "absl/status/statusor.h"
31
30
  #include "absl/strings/str_cat.h"
32
31
  #include "absl/strings/str_join.h"
33
32
  #include "absl/strings/string_view.h"
33
+ #include "absl/types/optional.h"
34
34
 
35
+ #include <grpc/event_engine/event_engine.h>
35
36
  #include <grpc/impl/codegen/connectivity_state.h>
36
37
  #include <grpc/support/log.h>
37
38
 
@@ -48,10 +49,8 @@
48
49
  #include "src/core/lib/gprpp/time.h"
49
50
  #include "src/core/lib/gprpp/validation_errors.h"
50
51
  #include "src/core/lib/gprpp/work_serializer.h"
51
- #include "src/core/lib/iomgr/closure.h"
52
- #include "src/core/lib/iomgr/error.h"
52
+ #include "src/core/lib/iomgr/exec_ctx.h"
53
53
  #include "src/core/lib/iomgr/pollset_set.h"
54
- #include "src/core/lib/iomgr/timer.h"
55
54
  #include "src/core/lib/json/json.h"
56
55
  #include "src/core/lib/json/json_args.h"
57
56
  #include "src/core/lib/json/json_object_loader.h"
@@ -62,14 +61,15 @@
62
61
  #include "src/core/lib/resolver/server_address.h"
63
62
  #include "src/core/lib/transport/connectivity_state.h"
64
63
 
65
- #define GRPC_XDS_CLUSTER_MANAGER_CHILD_RETENTION_INTERVAL_MS (15 * 60 * 1000)
66
-
67
64
  namespace grpc_core {
68
65
 
69
66
  TraceFlag grpc_xds_cluster_manager_lb_trace(false, "xds_cluster_manager_lb");
70
67
 
71
68
  namespace {
72
69
 
70
+ using ::grpc_event_engine::experimental::EventEngine;
71
+
72
+ constexpr Duration kChildRetentionInterval = Duration::Minutes(15);
73
73
  constexpr absl::string_view kXdsClusterManager =
74
74
  "xds_cluster_manager_experimental";
75
75
 
@@ -195,6 +195,7 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
195
195
  std::unique_ptr<SubchannelPicker> picker) override;
196
196
  void RequestReresolution() override;
197
197
  absl::string_view GetAuthority() override;
198
+ EventEngine* GetEventEngine() override;
198
199
  void AddTraceEvent(TraceSeverity severity,
199
200
  absl::string_view message) override;
200
201
 
@@ -206,8 +207,7 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
206
207
  OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
207
208
  const ChannelArgs& args);
208
209
 
209
- static void OnDelayedRemovalTimer(void* arg, grpc_error_handle error);
210
- void OnDelayedRemovalTimerLocked(grpc_error_handle error);
210
+ void OnDelayedRemovalTimerLocked();
211
211
 
212
212
  // The owning LB policy.
213
213
  RefCountedPtr<XdsClusterManagerLb> xds_cluster_manager_policy_;
@@ -221,9 +221,7 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
221
221
  grpc_connectivity_state connectivity_state_ = GRPC_CHANNEL_IDLE;
222
222
 
223
223
  // States for delayed removal.
224
- grpc_timer delayed_removal_timer_;
225
- grpc_closure on_delayed_removal_timer_;
226
- bool delayed_removal_timer_callback_pending_ = false;
224
+ absl::optional<EventEngine::TaskHandle> delayed_removal_timer_handle_;
227
225
  bool shutdown_ = false;
228
226
  };
229
227
 
@@ -376,7 +374,7 @@ void XdsClusterManagerLb::UpdateStateLocked() {
376
374
  break;
377
375
  }
378
376
  default:
379
- GPR_UNREACHABLE_CODE(return );
377
+ GPR_UNREACHABLE_CODE(return);
380
378
  }
381
379
  }
382
380
  // Determine aggregated connectivity state.
@@ -408,11 +406,11 @@ void XdsClusterManagerLb::UpdateStateLocked() {
408
406
  }
409
407
  child_picker = MakeRefCounted<ChildPickerWrapper>(
410
408
  cluster_name,
411
- absl::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker")));
409
+ std::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker")));
412
410
  }
413
411
  }
414
412
  std::unique_ptr<SubchannelPicker> picker =
415
- absl::make_unique<ClusterPicker>(std::move(cluster_map));
413
+ std::make_unique<ClusterPicker>(std::move(cluster_map));
416
414
  absl::Status status;
417
415
  if (connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
418
416
  status = absl::Status(absl::StatusCode::kUnavailable,
@@ -436,8 +434,6 @@ XdsClusterManagerLb::ClusterChild::ClusterChild(
436
434
  "[xds_cluster_manager_lb %p] created ClusterChild %p for %s",
437
435
  xds_cluster_manager_policy_.get(), this, name_.c_str());
438
436
  }
439
- GRPC_CLOSURE_INIT(&on_delayed_removal_timer_, OnDelayedRemovalTimer, this,
440
- grpc_schedule_on_exec_ctx);
441
437
  }
442
438
 
443
439
  XdsClusterManagerLb::ClusterChild::~ClusterChild() {
@@ -466,8 +462,10 @@ void XdsClusterManagerLb::ClusterChild::Orphan() {
466
462
  // Drop our ref to the child's picker, in case it's holding a ref to
467
463
  // the child.
468
464
  picker_wrapper_.reset();
469
- if (delayed_removal_timer_callback_pending_) {
470
- grpc_timer_cancel(&delayed_removal_timer_);
465
+ if (delayed_removal_timer_handle_.has_value()) {
466
+ xds_cluster_manager_policy_->channel_control_helper()
467
+ ->GetEventEngine()
468
+ ->Cancel(*delayed_removal_timer_handle_);
471
469
  }
472
470
  shutdown_ = true;
473
471
  Unref();
@@ -481,7 +479,7 @@ XdsClusterManagerLb::ClusterChild::CreateChildPolicyLocked(
481
479
  xds_cluster_manager_policy_->work_serializer();
482
480
  lb_policy_args.args = args;
483
481
  lb_policy_args.channel_control_helper =
484
- absl::make_unique<Helper>(this->Ref(DEBUG_LOCATION, "Helper"));
482
+ std::make_unique<Helper>(this->Ref(DEBUG_LOCATION, "Helper"));
485
483
  OrphanablePtr<LoadBalancingPolicy> lb_policy =
486
484
  MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
487
485
  &grpc_xds_cluster_manager_lb_trace);
@@ -509,9 +507,11 @@ absl::Status XdsClusterManagerLb::ClusterChild::UpdateLocked(
509
507
  if (xds_cluster_manager_policy_->shutting_down_) return absl::OkStatus();
510
508
  // Update child weight.
511
509
  // Reactivate if needed.
512
- if (delayed_removal_timer_callback_pending_) {
513
- delayed_removal_timer_callback_pending_ = false;
514
- grpc_timer_cancel(&delayed_removal_timer_);
510
+ if (delayed_removal_timer_handle_.has_value() &&
511
+ xds_cluster_manager_policy_->channel_control_helper()
512
+ ->GetEventEngine()
513
+ ->Cancel(*delayed_removal_timer_handle_)) {
514
+ delayed_removal_timer_handle_.reset();
515
515
  }
516
516
  // Create child policy if needed.
517
517
  if (child_policy_ == nullptr) {
@@ -544,35 +544,30 @@ void XdsClusterManagerLb::ClusterChild::ResetBackoffLocked() {
544
544
 
545
545
  void XdsClusterManagerLb::ClusterChild::DeactivateLocked() {
546
546
  // If already deactivated, don't do that again.
547
- if (delayed_removal_timer_callback_pending_) return;
548
- // Set the child weight to 0 so that future picker won't contain this child.
547
+ if (delayed_removal_timer_handle_.has_value()) return;
549
548
  // Start a timer to delete the child.
550
- Ref(DEBUG_LOCATION, "ClusterChild+timer").release();
551
- grpc_timer_init(&delayed_removal_timer_,
552
- Timestamp::Now() +
553
- Duration::Milliseconds(
554
- GRPC_XDS_CLUSTER_MANAGER_CHILD_RETENTION_INTERVAL_MS),
555
- &on_delayed_removal_timer_);
556
- delayed_removal_timer_callback_pending_ = true;
557
- }
558
-
559
- void XdsClusterManagerLb::ClusterChild::OnDelayedRemovalTimer(
560
- void* arg, grpc_error_handle error) {
561
- ClusterChild* self = static_cast<ClusterChild*>(arg);
562
- (void)GRPC_ERROR_REF(error); // Ref owned by the lambda
563
- self->xds_cluster_manager_policy_->work_serializer()->Run(
564
- [self, error]() { self->OnDelayedRemovalTimerLocked(error); },
565
- DEBUG_LOCATION);
549
+ delayed_removal_timer_handle_ =
550
+ xds_cluster_manager_policy_->channel_control_helper()
551
+ ->GetEventEngine()
552
+ ->RunAfter(
553
+ kChildRetentionInterval,
554
+ [self = Ref(DEBUG_LOCATION, "ClusterChild+timer")]() mutable {
555
+ ApplicationCallbackExecCtx application_exec_ctx;
556
+ ExecCtx exec_ctx;
557
+ auto* self_ptr = self.get(); // Avoid use-after-move problem.
558
+ self_ptr->xds_cluster_manager_policy_->work_serializer()->Run(
559
+ [self = std::move(self)]() {
560
+ self->OnDelayedRemovalTimerLocked();
561
+ },
562
+ DEBUG_LOCATION);
563
+ });
566
564
  }
567
565
 
568
- void XdsClusterManagerLb::ClusterChild::OnDelayedRemovalTimerLocked(
569
- grpc_error_handle error) {
570
- delayed_removal_timer_callback_pending_ = false;
571
- if (GRPC_ERROR_IS_NONE(error) && !shutdown_) {
566
+ void XdsClusterManagerLb::ClusterChild::OnDelayedRemovalTimerLocked() {
567
+ delayed_removal_timer_handle_.reset();
568
+ if (!shutdown_) {
572
569
  xds_cluster_manager_policy_->children_.erase(name_);
573
570
  }
574
- Unref(DEBUG_LOCATION, "ClusterChild+timer");
575
- GRPC_ERROR_UNREF(error);
576
571
  }
577
572
 
578
573
  //
@@ -636,6 +631,12 @@ absl::string_view XdsClusterManagerLb::ClusterChild::Helper::GetAuthority() {
636
631
  ->GetAuthority();
637
632
  }
638
633
 
634
+ EventEngine* XdsClusterManagerLb::ClusterChild::Helper::GetEventEngine() {
635
+ return xds_cluster_manager_child_->xds_cluster_manager_policy_
636
+ ->channel_control_helper()
637
+ ->GetEventEngine();
638
+ }
639
+
639
640
  void XdsClusterManagerLb::ClusterChild::Helper::AddTraceEvent(
640
641
  TraceSeverity severity, absl::string_view message) {
641
642
  if (xds_cluster_manager_child_->xds_cluster_manager_policy_->shutting_down_) {
@@ -725,7 +726,7 @@ class XdsClusterManagerLbFactory : public LoadBalancingPolicyFactory {
725
726
 
726
727
  void RegisterXdsClusterManagerLbPolicy(CoreConfiguration::Builder* builder) {
727
728
  builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
728
- absl::make_unique<XdsClusterManagerLbFactory>());
729
+ std::make_unique<XdsClusterManagerLbFactory>());
729
730
  }
730
731
 
731
732
  } // namespace grpc_core
@@ -27,7 +27,6 @@
27
27
  #include <utility>
28
28
  #include <vector>
29
29
 
30
- #include "absl/memory/memory.h"
31
30
  #include "absl/status/status.h"
32
31
  #include "absl/status/statusor.h"
33
32
  #include "absl/strings/str_cat.h"
@@ -35,15 +34,14 @@
35
34
  #include "absl/strings/string_view.h"
36
35
  #include "absl/types/optional.h"
37
36
 
37
+ #include <grpc/event_engine/event_engine.h>
38
38
  #include <grpc/impl/codegen/connectivity_state.h>
39
39
  #include <grpc/impl/codegen/grpc_types.h>
40
40
  #include <grpc/support/log.h>
41
41
 
42
42
  #include "src/core/ext/filters/client_channel/lb_policy/address_filtering.h"
43
43
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
44
- #include "src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h"
45
- #include "src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h"
46
- #include "src/core/ext/filters/client_channel/lb_policy/xds/xds.h"
44
+ #include "src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h"
47
45
  #include "src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h"
48
46
  #include "src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h"
49
47
  #include "src/core/ext/xds/xds_bootstrap.h"
@@ -52,7 +50,6 @@
52
50
  #include "src/core/ext/xds/xds_client_grpc.h"
53
51
  #include "src/core/ext/xds/xds_client_stats.h"
54
52
  #include "src/core/ext/xds/xds_endpoint.h"
55
- #include "src/core/ext/xds/xds_resource_type_impl.h"
56
53
  #include "src/core/lib/channel/channel_args.h"
57
54
  #include "src/core/lib/config/core_configuration.h"
58
55
  #include "src/core/lib/debug/trace.h"
@@ -80,8 +77,6 @@ namespace grpc_core {
80
77
 
81
78
  TraceFlag grpc_lb_xds_cluster_resolver_trace(false, "xds_cluster_resolver_lb");
82
79
 
83
- const char* kXdsLocalityNameAttributeKey = "xds_locality_name";
84
-
85
80
  namespace {
86
81
 
87
82
  constexpr absl::string_view kXdsClusterResolver =
@@ -149,7 +144,7 @@ class XdsClusterResolverLbConfig : public LoadBalancingPolicy::Config {
149
144
 
150
145
  private:
151
146
  std::vector<DiscoveryMechanism> discovery_mechanisms_;
152
- Json xds_lb_policy_ = Json::Object{{"ROUND_ROBIN", Json::Object()}};
147
+ Json xds_lb_policy_;
153
148
  };
154
149
 
155
150
  // Xds Cluster Resolver LB policy.
@@ -383,6 +378,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
383
378
  // client, which is a watch-based API.
384
379
  void RequestReresolution() override {}
385
380
  absl::string_view GetAuthority() override;
381
+ grpc_event_engine::experimental::EventEngine* GetEventEngine() override;
386
382
  void AddTraceEvent(TraceSeverity severity,
387
383
  absl::string_view message) override;
388
384
 
@@ -459,6 +455,12 @@ absl::string_view XdsClusterResolverLb::Helper::GetAuthority() {
459
455
  return xds_cluster_resolver_policy_->channel_control_helper()->GetAuthority();
460
456
  }
461
457
 
458
+ grpc_event_engine::experimental::EventEngine*
459
+ XdsClusterResolverLb::Helper::GetEventEngine() {
460
+ return xds_cluster_resolver_policy_->channel_control_helper()
461
+ ->GetEventEngine();
462
+ }
463
+
462
464
  void XdsClusterResolverLb::Helper::AddTraceEvent(TraceSeverity severity,
463
465
  absl::string_view message) {
464
466
  if (xds_cluster_resolver_policy_->shutting_down_) return;
@@ -515,7 +517,7 @@ void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::Start() {
515
517
  resolver_ = CoreConfiguration::Get().resolver_registry().CreateResolver(
516
518
  target.c_str(), args, parent()->interested_parties(),
517
519
  parent()->work_serializer(),
518
- absl::make_unique<ResolverResultHandler>(
520
+ std::make_unique<ResolverResultHandler>(
519
521
  Ref(DEBUG_LOCATION, "LogicalDNSDiscoveryMechanism")));
520
522
  if (resolver_ == nullptr) {
521
523
  parent()->OnResourceDoesNotExist(
@@ -840,12 +842,12 @@ ServerAddressList XdsClusterResolverLb::CreateChildPolicyAddressesLocked() {
840
842
  kHierarchicalPathAttributeKey,
841
843
  MakeHierarchicalPathAttribute(hierarchical_path))
842
844
  .WithAttribute(kXdsLocalityNameAttributeKey,
843
- absl::make_unique<XdsLocalityAttribute>(
844
- locality_name->Ref()))
845
+ std::make_unique<XdsLocalityAttribute>(
846
+ locality_name->Ref(), locality.lb_weight))
845
847
  .WithAttribute(
846
848
  ServerAddressWeightAttribute::
847
849
  kServerAddressWeightAttributeKey,
848
- absl::make_unique<ServerAddressWeightAttribute>(weight)));
850
+ std::make_unique<ServerAddressWeightAttribute>(weight)));
849
851
  }
850
852
  }
851
853
  }
@@ -872,60 +874,13 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
872
874
  for (size_t priority = 0;
873
875
  priority < discovery_entry.latest_update->priorities.size();
874
876
  ++priority) {
875
- const auto& priority_entry =
876
- discovery_entry.latest_update->priorities[priority];
877
877
  Json child_policy;
878
878
  if (!discovery_entry.discovery_mechanism->override_child_policy()
879
879
  .empty()) {
880
880
  child_policy =
881
881
  discovery_entry.discovery_mechanism->override_child_policy();
882
882
  } else {
883
- const auto& xds_lb_policy = config_->xds_lb_policy().object_value();
884
- if (xds_lb_policy.find("ROUND_ROBIN") != xds_lb_policy.end()) {
885
- const auto& localities = priority_entry.localities;
886
- Json::Object weighted_targets;
887
- for (const auto& p : localities) {
888
- XdsLocalityName* locality_name = p.first;
889
- const auto& locality = p.second;
890
- // Add weighted target entry.
891
- weighted_targets[locality_name->AsHumanReadableString()] =
892
- Json::Object{
893
- {"weight", locality.lb_weight},
894
- {"childPolicy",
895
- Json::Array{
896
- Json::Object{
897
- {"round_robin", Json::Object()},
898
- },
899
- }},
900
- };
901
- }
902
- // Construct locality-picking policy.
903
- // Start with field from our config and add the "targets" field.
904
- child_policy = Json::Array{
905
- Json::Object{
906
- {"weighted_target_experimental",
907
- Json::Object{
908
- {"targets", Json::Object()},
909
- }},
910
- },
911
- };
912
- Json::Object& config =
913
- *(*child_policy.mutable_array())[0].mutable_object();
914
- auto it = config.begin();
915
- GPR_ASSERT(it != config.end());
916
- (*it->second.mutable_object())["targets"] =
917
- std::move(weighted_targets);
918
- } else {
919
- auto it = xds_lb_policy.find("RING_HASH");
920
- GPR_ASSERT(it != xds_lb_policy.end());
921
- Json::Object ring_hash_experimental_policy =
922
- it->second.object_value();
923
- child_policy = Json::Array{
924
- Json::Object{
925
- {"ring_hash_experimental", ring_hash_experimental_policy},
926
- },
927
- };
928
- }
883
+ child_policy = config_->xds_lb_policy();
929
884
  }
930
885
  // Wrap it in the drop policy.
931
886
  Json::Array drop_categories;
@@ -952,27 +907,18 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
952
907
  xds_cluster_impl_config["lrsLoadReportingServer"] =
953
908
  discovery_config.lrs_load_reporting_server->ToJson();
954
909
  }
955
- Json locality_picking_policy;
956
- if (XdsOutlierDetectionEnabled()) {
957
- Json::Object outlier_detection_config;
958
- if (discovery_entry.config().outlier_detection_lb_config.has_value()) {
959
- outlier_detection_config =
960
- discovery_entry.config().outlier_detection_lb_config.value();
961
- }
962
- outlier_detection_config["childPolicy"] = Json::Array{Json::Object{
963
- {"xds_cluster_impl_experimental",
964
- std::move(xds_cluster_impl_config)},
965
- }};
966
- locality_picking_policy = Json::Array{Json::Object{
967
- {"outlier_detection_experimental",
968
- std::move(outlier_detection_config)},
969
- }};
970
- } else {
971
- locality_picking_policy = Json::Array{Json::Object{
972
- {"xds_cluster_impl_experimental",
973
- std::move(xds_cluster_impl_config)},
974
- }};
910
+ Json::Object outlier_detection_config;
911
+ if (discovery_entry.config().outlier_detection_lb_config.has_value()) {
912
+ outlier_detection_config =
913
+ discovery_entry.config().outlier_detection_lb_config.value();
975
914
  }
915
+ outlier_detection_config["childPolicy"] = Json::Array{Json::Object{
916
+ {"xds_cluster_impl_experimental", std::move(xds_cluster_impl_config)},
917
+ }};
918
+ Json locality_picking_policy = Json::Array{Json::Object{
919
+ {"outlier_detection_experimental",
920
+ std::move(outlier_detection_config)},
921
+ }};
976
922
  // Add priority entry, with the appropriate child name.
977
923
  std::string child_name = discovery_entry.GetChildPolicyName(priority);
978
924
  priority_priorities.emplace_back(child_name);
@@ -1015,7 +961,7 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
1015
961
  "config");
1016
962
  channel_control_helper()->UpdateState(
1017
963
  GRPC_CHANNEL_TRANSIENT_FAILURE, status,
1018
- absl::make_unique<TransientFailurePicker>(status));
964
+ std::make_unique<TransientFailurePicker>(status));
1019
965
  return nullptr;
1020
966
  }
1021
967
  return std::move(*config);
@@ -1052,7 +998,7 @@ XdsClusterResolverLb::CreateChildPolicyLocked(const ChannelArgs& args) {
1052
998
  lb_policy_args.work_serializer = work_serializer();
1053
999
  lb_policy_args.args = args;
1054
1000
  lb_policy_args.channel_control_helper =
1055
- absl::make_unique<Helper>(Ref(DEBUG_LOCATION, "Helper"));
1001
+ std::make_unique<Helper>(Ref(DEBUG_LOCATION, "Helper"));
1056
1002
  OrphanablePtr<LoadBalancingPolicy> lb_policy =
1057
1003
  CoreConfiguration::Get().lb_policy_registry().CreateLoadBalancingPolicy(
1058
1004
  "priority_experimental", std::move(lb_policy_args));
@@ -1090,8 +1036,7 @@ XdsClusterResolverLbConfig::DiscoveryMechanism::JsonLoader(const JsonArgs&) {
1090
1036
  .OptionalField("max_concurrent_requests",
1091
1037
  &DiscoveryMechanism::max_concurrent_requests)
1092
1038
  .OptionalField("outlierDetection",
1093
- &DiscoveryMechanism::outlier_detection_lb_config,
1094
- "outlier_detection")
1039
+ &DiscoveryMechanism::outlier_detection_lb_config)
1095
1040
  .Finish();
1096
1041
  return loader;
1097
1042
  }
@@ -1140,8 +1085,7 @@ const JsonLoaderInterface* XdsClusterResolverLbConfig::JsonLoader(
1140
1085
  return loader;
1141
1086
  }
1142
1087
 
1143
- void XdsClusterResolverLbConfig::JsonPostLoad(const Json& json,
1144
- const JsonArgs& args,
1088
+ void XdsClusterResolverLbConfig::JsonPostLoad(const Json& json, const JsonArgs&,
1145
1089
  ValidationErrors* errors) {
1146
1090
  // Validate discoveryMechanisms.
1147
1091
  {
@@ -1154,37 +1098,14 @@ void XdsClusterResolverLbConfig::JsonPostLoad(const Json& json,
1154
1098
  {
1155
1099
  ValidationErrors::ScopedField field(errors, ".xdsLbPolicy");
1156
1100
  auto it = json.object_value().find("xdsLbPolicy");
1157
- if (it != json.object_value().end()) {
1158
- if (it->second.type() != Json::Type::ARRAY) {
1159
- errors->AddError("is not an array");
1160
- } else {
1161
- const Json::Array& array = it->second.array_value();
1162
- for (size_t i = 0; i < array.size(); ++i) {
1163
- ValidationErrors::ScopedField field(errors,
1164
- absl::StrCat("[", i, "]"));
1165
- if (array[i].type() != Json::Type::OBJECT) {
1166
- errors->AddError("is not an object");
1167
- continue;
1168
- }
1169
- const Json::Object& policy = array[i].object_value();
1170
- auto policy_it = policy.find("ROUND_ROBIN");
1171
- if (policy_it != policy.end()) {
1172
- ValidationErrors::ScopedField field(errors, "[\"ROUND_ROBIN\"]");
1173
- if (policy_it->second.type() != Json::Type::OBJECT) {
1174
- errors->AddError("is not an object");
1175
- }
1176
- break;
1177
- }
1178
- {
1179
- ValidationErrors::ScopedField field(errors, "[\"RING_HASH\"]");
1180
- policy_it = policy.find("RING_HASH");
1181
- if (policy_it != policy.end()) {
1182
- LoadFromJson<RingHashConfig>(policy_it->second, args, errors);
1183
- xds_lb_policy_ = array[i];
1184
- }
1185
- }
1186
- }
1187
- }
1101
+ if (it == json.object_value().end()) {
1102
+ errors->AddError("field not present");
1103
+ } else {
1104
+ auto lb_config = CoreConfiguration::Get()
1105
+ .lb_policy_registry()
1106
+ .ParseLoadBalancingConfig(it->second);
1107
+ if (!lb_config.ok()) errors->AddError(lb_config.status().message());
1108
+ xds_lb_policy_ = it->second;
1188
1109
  }
1189
1110
  }
1190
1111
  }
@@ -1217,15 +1138,8 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1217
1138
  "requires configuration. "
1218
1139
  "Please use loadBalancingConfig field of service config instead.");
1219
1140
  }
1220
- class XdsJsonArgs : public JsonArgs {
1221
- public:
1222
- bool IsEnabled(absl::string_view key) const override {
1223
- if (key == "outlier_detection") return XdsOutlierDetectionEnabled();
1224
- return true;
1225
- }
1226
- };
1227
1141
  return LoadRefCountedFromJson<XdsClusterResolverLbConfig>(
1228
- json, XdsJsonArgs(),
1142
+ json, JsonArgs(),
1229
1143
  "errors validating xds_cluster_resolver LB policy config");
1230
1144
  }
1231
1145
 
@@ -1294,7 +1208,7 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1294
1208
 
1295
1209
  void RegisterXdsClusterResolverLbPolicy(CoreConfiguration::Builder* builder) {
1296
1210
  builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
1297
- absl::make_unique<XdsClusterResolverLbFactory>());
1211
+ std::make_unique<XdsClusterResolverLbFactory>());
1298
1212
  }
1299
1213
 
1300
1214
  } // namespace grpc_core