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
@@ -16,7 +16,7 @@
16
16
 
17
17
  #include <grpc/support/port_platform.h>
18
18
 
19
- #include <stdlib.h>
19
+ #include <string.h>
20
20
 
21
21
  #include <algorithm>
22
22
  #include <cstdint>
@@ -26,7 +26,7 @@
26
26
  #include <utility>
27
27
  #include <vector>
28
28
 
29
- #include "absl/memory/memory.h"
29
+ #include "absl/random/random.h"
30
30
  #include "absl/status/status.h"
31
31
  #include "absl/status/statusor.h"
32
32
  #include "absl/strings/str_cat.h"
@@ -43,7 +43,6 @@
43
43
  #include "src/core/lib/channel/channel_args.h"
44
44
  #include "src/core/lib/config/core_configuration.h"
45
45
  #include "src/core/lib/debug/trace.h"
46
- #include "src/core/lib/event_engine/default_event_engine.h"
47
46
  #include "src/core/lib/gprpp/debug_location.h"
48
47
  #include "src/core/lib/gprpp/orphanable.h"
49
48
  #include "src/core/lib/gprpp/ref_counted.h"
@@ -72,7 +71,6 @@ TraceFlag grpc_lb_weighted_target_trace(false, "weighted_target_lb");
72
71
  namespace {
73
72
 
74
73
  using ::grpc_event_engine::experimental::EventEngine;
75
- using ::grpc_event_engine::experimental::GetDefaultEventEngine;
76
74
 
77
75
  constexpr absl::string_view kWeightedTarget = "weighted_target_experimental";
78
76
 
@@ -143,7 +141,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
143
141
  // range proportional to the child's weight. The start of the range
144
142
  // is the previous value in the vector and is 0 for the first element.
145
143
  using PickerList =
146
- std::vector<std::pair<uint32_t, RefCountedPtr<ChildPickerWrapper>>>;
144
+ std::vector<std::pair<uint64_t, RefCountedPtr<ChildPickerWrapper>>>;
147
145
 
148
146
  explicit WeightedPicker(PickerList pickers)
149
147
  : pickers_(std::move(pickers)) {}
@@ -152,6 +150,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
152
150
 
153
151
  private:
154
152
  PickerList pickers_;
153
+ absl::BitGen bit_gen_;
155
154
  };
156
155
 
157
156
  // Each WeightedChild holds a ref to its parent WeightedTargetLb.
@@ -193,6 +192,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
193
192
  std::unique_ptr<SubchannelPicker> picker) override;
194
193
  void RequestReresolution() override;
195
194
  absl::string_view GetAuthority() override;
195
+ grpc_event_engine::experimental::EventEngine* GetEventEngine() override;
196
196
  void AddTraceEvent(TraceSeverity severity,
197
197
  absl::string_view message) override;
198
198
 
@@ -227,7 +227,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
227
227
 
228
228
  const std::string name_;
229
229
 
230
- uint32_t weight_;
230
+ uint32_t weight_ = 0;
231
231
 
232
232
  OrphanablePtr<LoadBalancingPolicy> child_policy_;
233
233
 
@@ -261,7 +261,8 @@ class WeightedTargetLb : public LoadBalancingPolicy {
261
261
  WeightedTargetLb::PickResult WeightedTargetLb::WeightedPicker::Pick(
262
262
  PickArgs args) {
263
263
  // Generate a random number in [0, total weight).
264
- const uint32_t key = rand() % pickers_[pickers_.size() - 1].first;
264
+ const uint64_t key =
265
+ absl::Uniform<uint64_t>(bit_gen_, 0, pickers_.back().first);
265
266
  // Find the index in pickers_ corresponding to key.
266
267
  size_t mid = 0;
267
268
  size_t start_index = 0;
@@ -363,7 +364,7 @@ absl::Status WeightedTargetLb::UpdateLocked(UpdateArgs args) {
363
364
  "no children in weighted_target policy: ", args.resolution_note));
364
365
  channel_control_helper()->UpdateState(
365
366
  GRPC_CHANNEL_TRANSIENT_FAILURE, status,
366
- absl::make_unique<TransientFailurePicker>(status));
367
+ std::make_unique<TransientFailurePicker>(status));
367
368
  return absl::OkStatus();
368
369
  }
369
370
  UpdateStateLocked();
@@ -394,9 +395,9 @@ void WeightedTargetLb::UpdateStateLocked() {
394
395
  // the range proportional to its weight, such that the total range is the
395
396
  // sum of the weights of all children.
396
397
  WeightedPicker::PickerList ready_picker_list;
397
- uint32_t ready_end = 0;
398
+ uint64_t ready_end = 0;
398
399
  WeightedPicker::PickerList tf_picker_list;
399
- uint32_t tf_end = 0;
400
+ uint64_t tf_end = 0;
400
401
  // Also count the number of children in CONNECTING and IDLE, to determine
401
402
  // the aggregated state.
402
403
  size_t num_connecting = 0;
@@ -410,7 +411,7 @@ void WeightedTargetLb::UpdateStateLocked() {
410
411
  }
411
412
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_weighted_target_trace)) {
412
413
  gpr_log(GPR_INFO,
413
- "[weighted_target_lb %p] child=%s state=%s weight=%d picker=%p",
414
+ "[weighted_target_lb %p] child=%s state=%s weight=%u picker=%p",
414
415
  this, child_name.c_str(),
415
416
  ConnectivityStateName(child->connectivity_state()),
416
417
  child->weight(), child->picker_wrapper().get());
@@ -437,7 +438,7 @@ void WeightedTargetLb::UpdateStateLocked() {
437
438
  break;
438
439
  }
439
440
  default:
440
- GPR_UNREACHABLE_CODE(return );
441
+ GPR_UNREACHABLE_CODE(return);
441
442
  }
442
443
  }
443
444
  // Determine aggregated connectivity state.
@@ -459,15 +460,15 @@ void WeightedTargetLb::UpdateStateLocked() {
459
460
  absl::Status status;
460
461
  switch (connectivity_state) {
461
462
  case GRPC_CHANNEL_READY:
462
- picker = absl::make_unique<WeightedPicker>(std::move(ready_picker_list));
463
+ picker = std::make_unique<WeightedPicker>(std::move(ready_picker_list));
463
464
  break;
464
465
  case GRPC_CHANNEL_CONNECTING:
465
466
  case GRPC_CHANNEL_IDLE:
466
467
  picker =
467
- absl::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker"));
468
+ std::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker"));
468
469
  break;
469
470
  default:
470
- picker = absl::make_unique<WeightedPicker>(std::move(tf_picker_list));
471
+ picker = std::make_unique<WeightedPicker>(std::move(tf_picker_list));
471
472
  }
472
473
  channel_control_helper()->UpdateState(connectivity_state, status,
473
474
  std::move(picker));
@@ -480,14 +481,18 @@ void WeightedTargetLb::UpdateStateLocked() {
480
481
  WeightedTargetLb::WeightedChild::DelayedRemovalTimer::DelayedRemovalTimer(
481
482
  RefCountedPtr<WeightedTargetLb::WeightedChild> weighted_child)
482
483
  : weighted_child_(std::move(weighted_child)) {
483
- timer_handle_ = GetDefaultEventEngine()->RunAfter(
484
- kChildRetentionInterval, [self = Ref()]() mutable {
485
- ApplicationCallbackExecCtx app_exec_ctx;
486
- ExecCtx exec_ctx;
487
- self->weighted_child_->weighted_target_policy_->work_serializer()->Run(
488
- [self = std::move(self)] { self->OnTimerLocked(); },
489
- DEBUG_LOCATION);
490
- });
484
+ timer_handle_ =
485
+ weighted_child_->weighted_target_policy_->channel_control_helper()
486
+ ->GetEventEngine()
487
+ ->RunAfter(kChildRetentionInterval, [self = Ref()]() mutable {
488
+ ApplicationCallbackExecCtx app_exec_ctx;
489
+ ExecCtx exec_ctx;
490
+ auto* self_ptr = self.get(); // Avoid use-after-move problem.
491
+ self_ptr->weighted_child_->weighted_target_policy_
492
+ ->work_serializer()
493
+ ->Run([self = std::move(self)] { self->OnTimerLocked(); },
494
+ DEBUG_LOCATION);
495
+ });
491
496
  }
492
497
 
493
498
  void WeightedTargetLb::WeightedChild::DelayedRemovalTimer::Orphan() {
@@ -499,7 +504,9 @@ void WeightedTargetLb::WeightedChild::DelayedRemovalTimer::Orphan() {
499
504
  weighted_child_->weighted_target_policy_.get(),
500
505
  weighted_child_.get(), weighted_child_->name_.c_str());
501
506
  }
502
- GetDefaultEventEngine()->Cancel(*timer_handle_);
507
+ weighted_child_->weighted_target_policy_->channel_control_helper()
508
+ ->GetEventEngine()
509
+ ->Cancel(*timer_handle_);
503
510
  }
504
511
  Unref();
505
512
  }
@@ -560,7 +567,7 @@ WeightedTargetLb::WeightedChild::CreateChildPolicyLocked(
560
567
  lb_policy_args.work_serializer = weighted_target_policy_->work_serializer();
561
568
  lb_policy_args.args = args;
562
569
  lb_policy_args.channel_control_helper =
563
- absl::make_unique<Helper>(this->Ref(DEBUG_LOCATION, "Helper"));
570
+ std::make_unique<Helper>(this->Ref(DEBUG_LOCATION, "Helper"));
564
571
  OrphanablePtr<LoadBalancingPolicy> lb_policy =
565
572
  MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
566
573
  &grpc_lb_weighted_target_trace);
@@ -586,6 +593,11 @@ absl::Status WeightedTargetLb::WeightedChild::UpdateLocked(
586
593
  const std::string& resolution_note, const ChannelArgs& args) {
587
594
  if (weighted_target_policy_->shutting_down_) return absl::OkStatus();
588
595
  // Update child weight.
596
+ if (weight_ != config.weight &&
597
+ GRPC_TRACE_FLAG_ENABLED(grpc_lb_weighted_target_trace)) {
598
+ gpr_log(GPR_INFO, "[weighted_target_lb %p] WeightedChild %p %s: weight=%u",
599
+ weighted_target_policy_.get(), this, name_.c_str(), config.weight);
600
+ }
589
601
  weight_ = config.weight;
590
602
  // Reactivate if needed.
591
603
  if (delayed_removal_timer_ != nullptr) {
@@ -693,6 +705,12 @@ absl::string_view WeightedTargetLb::WeightedChild::Helper::GetAuthority() {
693
705
  ->GetAuthority();
694
706
  }
695
707
 
708
+ grpc_event_engine::experimental::EventEngine*
709
+ WeightedTargetLb::WeightedChild::Helper::GetEventEngine() {
710
+ return weighted_child_->weighted_target_policy_->channel_control_helper()
711
+ ->GetEventEngine();
712
+ }
713
+
696
714
  void WeightedTargetLb::WeightedChild::Helper::AddTraceEvent(
697
715
  TraceSeverity severity, absl::string_view message) {
698
716
  if (weighted_child_->weighted_target_policy_->shutting_down_) return;
@@ -769,7 +787,7 @@ class WeightedTargetLbFactory : public LoadBalancingPolicyFactory {
769
787
 
770
788
  void RegisterWeightedTargetLbPolicy(CoreConfiguration::Builder* builder) {
771
789
  builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
772
- absl::make_unique<WeightedTargetLbFactory>());
790
+ std::make_unique<WeightedTargetLbFactory>());
773
791
  }
774
792
 
775
793
  } // namespace grpc_core
@@ -24,13 +24,13 @@
24
24
  #include <utility>
25
25
  #include <vector>
26
26
 
27
- #include "absl/memory/memory.h"
28
27
  #include "absl/status/status.h"
29
28
  #include "absl/status/statusor.h"
30
29
  #include "absl/strings/str_cat.h"
31
30
  #include "absl/strings/string_view.h"
32
31
  #include "absl/types/optional.h"
33
32
 
33
+ #include <grpc/event_engine/event_engine.h>
34
34
  #include <grpc/grpc.h>
35
35
  #include <grpc/grpc_security.h>
36
36
  #include <grpc/impl/codegen/connectivity_state.h>
@@ -38,13 +38,10 @@
38
38
 
39
39
  #include "src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h"
40
40
  #include "src/core/ext/xds/certificate_provider_store.h"
41
- #include "src/core/ext/xds/xds_bootstrap_grpc.h"
42
41
  #include "src/core/ext/xds/xds_certificate_provider.h"
43
- #include "src/core/ext/xds/xds_client.h"
44
42
  #include "src/core/ext/xds/xds_client_grpc.h"
45
43
  #include "src/core/ext/xds/xds_cluster.h"
46
44
  #include "src/core/ext/xds/xds_common_types.h"
47
- #include "src/core/ext/xds/xds_resource_type_impl.h"
48
45
  #include "src/core/lib/channel/channel_args.h"
49
46
  #include "src/core/lib/config/core_configuration.h"
50
47
  #include "src/core/lib/debug/trace.h"
@@ -177,6 +174,7 @@ class CdsLb : public LoadBalancingPolicy {
177
174
  std::unique_ptr<SubchannelPicker> picker) override;
178
175
  void RequestReresolution() override;
179
176
  absl::string_view GetAuthority() override;
177
+ grpc_event_engine::experimental::EventEngine* GetEventEngine() override;
180
178
  void AddTraceEvent(TraceSeverity severity,
181
179
  absl::string_view message) override;
182
180
 
@@ -264,6 +262,10 @@ absl::string_view CdsLb::Helper::GetAuthority() {
264
262
  return parent_->channel_control_helper()->GetAuthority();
265
263
  }
266
264
 
265
+ grpc_event_engine::experimental::EventEngine* CdsLb::Helper::GetEventEngine() {
266
+ return parent_->channel_control_helper()->GetEventEngine();
267
+ }
268
+
267
269
  void CdsLb::Helper::AddTraceEvent(TraceSeverity severity,
268
270
  absl::string_view message) {
269
271
  if (parent_->shutting_down_) return;
@@ -505,27 +507,15 @@ void CdsLb::OnClusterChanged(const std::string& name,
505
507
  // underlying cluster that we may be processing an update for.
506
508
  auto it = watchers_.find(config_->cluster());
507
509
  GPR_ASSERT(it != watchers_.end());
508
- const std::string& lb_policy = it->second.update->lb_policy;
509
510
  // Construct config for child policy.
510
- Json::Object xds_lb_policy;
511
- if (lb_policy == "RING_HASH") {
512
- xds_lb_policy["RING_HASH"] = Json::Object{
513
- {"min_ring_size", cluster_data.min_ring_size},
514
- {"max_ring_size", cluster_data.max_ring_size},
515
- };
516
- } else {
517
- xds_lb_policy["ROUND_ROBIN"] = Json::Object();
518
- }
519
- Json::Object child_config = {
520
- {"xdsLbPolicy",
521
- Json::Array{
522
- xds_lb_policy,
523
- }},
524
- {"discoveryMechanisms", std::move(discovery_mechanisms)},
525
- };
526
511
  Json json = Json::Array{
527
512
  Json::Object{
528
- {"xds_cluster_resolver_experimental", std::move(child_config)},
513
+ {"xds_cluster_resolver_experimental",
514
+ Json::Object{
515
+ {"xdsLbPolicy",
516
+ std::move(it->second.update->lb_policy_config)},
517
+ {"discoveryMechanisms", std::move(discovery_mechanisms)},
518
+ }},
529
519
  },
530
520
  };
531
521
  if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
@@ -533,7 +523,7 @@ void CdsLb::OnClusterChanged(const std::string& name,
533
523
  gpr_log(GPR_INFO, "[cdslb %p] generated config for child policy: %s",
534
524
  this, json_str.c_str());
535
525
  }
536
- grpc_error_handle error = GRPC_ERROR_NONE;
526
+ grpc_error_handle error;
537
527
  auto config =
538
528
  CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
539
529
  json);
@@ -546,7 +536,7 @@ void CdsLb::OnClusterChanged(const std::string& name,
546
536
  LoadBalancingPolicy::Args args;
547
537
  args.work_serializer = work_serializer();
548
538
  args.args = args_;
549
- args.channel_control_helper = absl::make_unique<Helper>(Ref());
539
+ args.channel_control_helper = std::make_unique<Helper>(Ref());
550
540
  child_policy_ =
551
541
  CoreConfiguration::Get()
552
542
  .lb_policy_registry()
@@ -600,7 +590,7 @@ void CdsLb::OnError(const std::string& name, absl::Status status) {
600
590
  if (child_policy_ == nullptr) {
601
591
  channel_control_helper()->UpdateState(
602
592
  GRPC_CHANNEL_TRANSIENT_FAILURE, status,
603
- absl::make_unique<TransientFailurePicker>(absl::UnavailableError(
593
+ std::make_unique<TransientFailurePicker>(absl::UnavailableError(
604
594
  absl::StrCat(name, ": ", status.ToString()))));
605
595
  }
606
596
  }
@@ -614,7 +604,7 @@ void CdsLb::OnResourceDoesNotExist(const std::string& name) {
614
604
  absl::StrCat("CDS resource \"", config_->cluster(), "\" does not exist"));
615
605
  channel_control_helper()->UpdateState(
616
606
  GRPC_CHANNEL_TRANSIENT_FAILURE, status,
617
- absl::make_unique<TransientFailurePicker>(status));
607
+ std::make_unique<TransientFailurePicker>(status));
618
608
  MaybeDestroyChildPolicyLocked();
619
609
  }
620
610
 
@@ -766,7 +756,7 @@ class CdsLbFactory : public LoadBalancingPolicyFactory {
766
756
 
767
757
  void RegisterCdsLbPolicy(CoreConfiguration::Builder* builder) {
768
758
  builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
769
- absl::make_unique<CdsLbFactory>());
759
+ std::make_unique<CdsLbFactory>());
770
760
  }
771
761
 
772
762
  } // namespace grpc_core
@@ -0,0 +1,42 @@
1
+ //
2
+ // Copyright 2018 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #include <grpc/support/port_platform.h>
18
+
19
+ #include "src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h"
20
+
21
+ #include "absl/strings/str_cat.h"
22
+
23
+ #include "src/core/lib/gpr/useful.h"
24
+
25
+ namespace grpc_core {
26
+
27
+ const char* kXdsLocalityNameAttributeKey = "xds_locality_name";
28
+
29
+ int XdsLocalityAttribute::Cmp(const AttributeInterface* other) const {
30
+ const auto* other_locality_attr =
31
+ static_cast<const XdsLocalityAttribute*>(other);
32
+ int r = locality_name_->Compare(*other_locality_attr->locality_name_);
33
+ if (r != 0) return r;
34
+ return QsortCompare(weight_, other_locality_attr->weight_);
35
+ }
36
+
37
+ std::string XdsLocalityAttribute::ToString() const {
38
+ return absl::StrCat("{name=", locality_name_->AsHumanReadableString(),
39
+ ", weight=", weight_, "}");
40
+ }
41
+
42
+ } // namespace grpc_core
@@ -14,53 +14,51 @@
14
14
  // limitations under the License.
15
15
  //
16
16
 
17
- #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_H
18
- #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_H
17
+ #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_ATTRIBUTES_H
18
+ #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_ATTRIBUTES_H
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
+ #include <stdint.h>
23
+
22
24
  #include <memory>
23
25
  #include <string>
24
26
  #include <utility>
25
27
 
26
- #include "absl/memory/memory.h"
27
-
28
28
  #include "src/core/ext/xds/xds_client_stats.h"
29
29
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
30
30
  #include "src/core/lib/resolver/server_address.h"
31
31
 
32
32
  namespace grpc_core {
33
33
 
34
- // Defined in the EDS policy.
35
34
  extern const char* kXdsLocalityNameAttributeKey;
36
35
 
37
36
  class XdsLocalityAttribute : public ServerAddress::AttributeInterface {
38
37
  public:
39
- explicit XdsLocalityAttribute(RefCountedPtr<XdsLocalityName> locality_name)
40
- : locality_name_(std::move(locality_name)) {}
38
+ XdsLocalityAttribute(RefCountedPtr<XdsLocalityName> locality_name,
39
+ uint32_t weight)
40
+ : locality_name_(std::move(locality_name)), weight_(weight) {}
41
41
 
42
42
  RefCountedPtr<XdsLocalityName> locality_name() const {
43
43
  return locality_name_;
44
44
  }
45
45
 
46
+ uint32_t weight() const { return weight_; }
47
+
46
48
  std::unique_ptr<AttributeInterface> Copy() const override {
47
- return absl::make_unique<XdsLocalityAttribute>(locality_name_->Ref());
49
+ return std::make_unique<XdsLocalityAttribute>(locality_name_->Ref(),
50
+ weight_);
48
51
  }
49
52
 
50
- int Cmp(const AttributeInterface* other) const override {
51
- const auto* other_locality_attr =
52
- static_cast<const XdsLocalityAttribute*>(other);
53
- return locality_name_->Compare(*other_locality_attr->locality_name_);
54
- }
53
+ int Cmp(const AttributeInterface* other) const override;
55
54
 
56
- std::string ToString() const override {
57
- return locality_name_->AsHumanReadableString();
58
- }
55
+ std::string ToString() const override;
59
56
 
60
57
  private:
61
58
  RefCountedPtr<XdsLocalityName> locality_name_;
59
+ uint32_t weight_;
62
60
  };
63
61
 
64
62
  } // namespace grpc_core
65
63
 
66
- #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_H */
64
+ #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_ATTRIBUTES_H
@@ -27,7 +27,6 @@
27
27
  #include <vector>
28
28
 
29
29
  #include "absl/base/thread_annotations.h"
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,11 +34,12 @@
35
34
  #include "absl/types/optional.h"
36
35
  #include "absl/types/variant.h"
37
36
 
37
+ #include <grpc/event_engine/event_engine.h>
38
38
  #include <grpc/impl/codegen/connectivity_state.h>
39
39
  #include <grpc/support/log.h>
40
40
 
41
41
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
42
- #include "src/core/ext/filters/client_channel/lb_policy/xds/xds.h"
42
+ #include "src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h"
43
43
  #include "src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h"
44
44
  #include "src/core/ext/xds/xds_bootstrap.h"
45
45
  #include "src/core/ext/xds/xds_bootstrap_grpc.h"
@@ -254,6 +254,7 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
254
254
  std::unique_ptr<SubchannelPicker> picker) override;
255
255
  void RequestReresolution() override;
256
256
  absl::string_view GetAuthority() override;
257
+ grpc_event_engine::experimental::EventEngine* GetEventEngine() override;
257
258
  void AddTraceEvent(TraceSeverity severity,
258
259
  absl::string_view message) override;
259
260
 
@@ -418,7 +419,7 @@ LoadBalancingPolicy::PickResult XdsClusterImplLb::Picker::Pick(
418
419
  }
419
420
  // Inject subchannel call tracker to record call completion.
420
421
  complete_pick->subchannel_call_tracker =
421
- absl::make_unique<SubchannelCallTracker>(
422
+ std::make_unique<SubchannelCallTracker>(
422
423
  std::move(complete_pick->subchannel_call_tracker),
423
424
  std::move(locality_stats),
424
425
  call_counter_->Ref(DEBUG_LOCATION, "SubchannelCallTracker"));
@@ -531,7 +532,7 @@ void XdsClusterImplLb::MaybeUpdatePickerLocked() {
531
532
  // If we're dropping all calls, report READY, regardless of what (or
532
533
  // whether) the child has reported.
533
534
  if (config_->drop_config() != nullptr && config_->drop_config()->drop_all()) {
534
- auto drop_picker = absl::make_unique<Picker>(this, picker_);
535
+ auto drop_picker = std::make_unique<Picker>(this, picker_);
535
536
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_impl_lb_trace)) {
536
537
  gpr_log(GPR_INFO,
537
538
  "[xds_cluster_impl_lb %p] updating connectivity (drop all): "
@@ -544,7 +545,7 @@ void XdsClusterImplLb::MaybeUpdatePickerLocked() {
544
545
  }
545
546
  // Otherwise, update only if we have a child picker.
546
547
  if (picker_ != nullptr) {
547
- auto drop_picker = absl::make_unique<Picker>(this, picker_);
548
+ auto drop_picker = std::make_unique<Picker>(this, picker_);
548
549
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_impl_lb_trace)) {
549
550
  gpr_log(GPR_INFO,
550
551
  "[xds_cluster_impl_lb %p] updating connectivity: state=%s "
@@ -563,7 +564,7 @@ OrphanablePtr<LoadBalancingPolicy> XdsClusterImplLb::CreateChildPolicyLocked(
563
564
  lb_policy_args.work_serializer = work_serializer();
564
565
  lb_policy_args.args = args;
565
566
  lb_policy_args.channel_control_helper =
566
- absl::make_unique<Helper>(Ref(DEBUG_LOCATION, "Helper"));
567
+ std::make_unique<Helper>(Ref(DEBUG_LOCATION, "Helper"));
567
568
  OrphanablePtr<LoadBalancingPolicy> lb_policy =
568
569
  MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
569
570
  &grpc_xds_cluster_impl_lb_trace);
@@ -680,6 +681,11 @@ absl::string_view XdsClusterImplLb::Helper::GetAuthority() {
680
681
  return xds_cluster_impl_policy_->channel_control_helper()->GetAuthority();
681
682
  }
682
683
 
684
+ grpc_event_engine::experimental::EventEngine*
685
+ XdsClusterImplLb::Helper::GetEventEngine() {
686
+ return xds_cluster_impl_policy_->channel_control_helper()->GetEventEngine();
687
+ }
688
+
683
689
  void XdsClusterImplLb::Helper::AddTraceEvent(TraceSeverity severity,
684
690
  absl::string_view message) {
685
691
  if (xds_cluster_impl_policy_->shutting_down_) return;
@@ -794,7 +800,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
794
800
 
795
801
  void RegisterXdsClusterImplLbPolicy(CoreConfiguration::Builder* builder) {
796
802
  builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
797
- absl::make_unique<XdsClusterImplLbFactory>());
803
+ std::make_unique<XdsClusterImplLbFactory>());
798
804
  }
799
805
 
800
806
  } // namespace grpc_core