grpc 1.47.0 → 1.48.0.pre1

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 (574) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +105 -47
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +20 -11
  5. data/include/grpc/event_engine/slice_buffer.h +8 -2
  6. data/include/grpc/grpc.h +3 -3
  7. data/include/grpc/impl/codegen/compression_types.h +2 -1
  8. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  9. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  10. data/include/grpc/impl/codegen/grpc_types.h +2 -1
  11. data/include/grpc/impl/codegen/port_platform.h +6 -3
  12. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  13. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
  14. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
  15. data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
  16. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
  18. data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
  19. data/src/core/ext/filters/client_channel/client_channel.h +19 -4
  20. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  21. data/src/core/ext/filters/client_channel/connector.h +1 -1
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  24. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
  31. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
  32. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
  33. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
  43. data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
  44. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
  45. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
  52. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
  53. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
  55. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
  56. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
  59. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  60. data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
  61. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
  62. data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
  63. data/src/core/ext/filters/client_channel/subchannel.h +6 -22
  64. data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
  65. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
  68. data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
  70. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
  71. data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
  72. data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
  73. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
  74. data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
  75. data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
  76. data/src/core/ext/filters/http/client_authority_filter.h +5 -2
  77. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
  78. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
  79. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  80. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
  81. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  82. data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
  83. data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
  85. data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
  86. data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
  87. data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
  88. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
  89. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
  90. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
  91. data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
  92. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
  93. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
  94. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
  95. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
  96. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
  97. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
  98. data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
  99. data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
  100. data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
  101. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
  102. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
  103. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
  106. data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
  107. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
  108. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
  109. data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
  110. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
  111. data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
  112. data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
  113. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  114. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
  115. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  116. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
  117. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  118. data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
  119. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  120. data/src/core/ext/xds/certificate_provider_store.cc +2 -0
  121. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  122. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
  123. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
  124. data/src/core/ext/xds/upb_utils.h +1 -2
  125. data/src/core/ext/xds/xds_api.cc +16 -18
  126. data/src/core/ext/xds/xds_api.h +12 -5
  127. data/src/core/ext/xds/xds_bootstrap.cc +37 -24
  128. data/src/core/ext/xds/xds_bootstrap.h +9 -11
  129. data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
  130. data/src/core/ext/xds/xds_certificate_provider.h +16 -1
  131. data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
  132. data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
  133. data/src/core/ext/xds/xds_client.cc +71 -22
  134. data/src/core/ext/xds/xds_client.h +17 -3
  135. data/src/core/ext/xds/xds_client_stats.cc +3 -4
  136. data/src/core/ext/xds/xds_client_stats.h +4 -3
  137. data/src/core/ext/xds/xds_cluster.cc +21 -10
  138. data/src/core/ext/xds/xds_cluster.h +9 -1
  139. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
  140. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
  141. data/src/core/ext/xds/xds_common_types.cc +36 -22
  142. data/src/core/ext/xds/xds_common_types.h +12 -4
  143. data/src/core/ext/xds/xds_endpoint.cc +25 -15
  144. data/src/core/ext/xds/xds_endpoint.h +13 -5
  145. data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
  146. data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
  147. data/src/core/ext/xds/xds_http_filters.cc +7 -0
  148. data/src/core/ext/xds/xds_http_filters.h +3 -3
  149. data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
  150. data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
  151. data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
  152. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  153. data/src/core/ext/xds/xds_listener.cc +51 -33
  154. data/src/core/ext/xds/xds_listener.h +10 -1
  155. data/src/core/ext/xds/xds_resource_type.h +3 -3
  156. data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
  157. data/src/core/ext/xds/xds_route_config.cc +56 -28
  158. data/src/core/ext/xds/xds_route_config.h +11 -2
  159. data/src/core/ext/xds/xds_routing.cc +16 -0
  160. data/src/core/ext/xds/xds_routing.h +7 -2
  161. data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
  162. data/src/core/lib/address_utils/parse_address.cc +5 -8
  163. data/src/core/lib/address_utils/parse_address.h +3 -2
  164. data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
  165. data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
  166. data/src/core/lib/avl/avl.h +3 -3
  167. data/src/core/lib/backoff/backoff.cc +1 -1
  168. data/src/core/lib/backoff/backoff.h +1 -1
  169. data/src/core/lib/channel/call_tracer.h +3 -3
  170. data/src/core/lib/channel/channel_args.h +1 -0
  171. data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
  172. data/src/core/lib/channel/channel_fwd.h +26 -0
  173. data/src/core/lib/channel/channel_stack.cc +4 -4
  174. data/src/core/lib/channel/channel_stack.h +1 -11
  175. data/src/core/lib/channel/channel_stack_builder.h +2 -5
  176. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  177. data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
  178. data/src/core/lib/channel/channelz.cc +2 -1
  179. data/src/core/lib/channel/channelz.h +2 -3
  180. data/src/core/lib/channel/channelz_registry.cc +4 -5
  181. data/src/core/lib/channel/connected_channel.cc +1 -0
  182. data/src/core/lib/channel/connected_channel.h +1 -0
  183. data/src/core/lib/channel/promise_based_filter.cc +11 -5
  184. data/src/core/lib/channel/promise_based_filter.h +2 -0
  185. data/src/core/lib/compression/compression.cc +6 -1
  186. data/src/core/lib/compression/compression_internal.cc +3 -6
  187. data/src/core/lib/compression/compression_internal.h +3 -2
  188. data/src/core/lib/compression/message_compress.cc +3 -1
  189. data/src/core/lib/compression/message_compress.h +2 -3
  190. data/src/core/lib/debug/stats.cc +9 -9
  191. data/src/core/lib/debug/stats.h +2 -1
  192. data/src/core/lib/debug/stats_data.cc +2 -1
  193. data/src/core/lib/debug/stats_data.h +0 -4
  194. data/src/core/lib/debug/trace.h +13 -12
  195. data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
  196. data/src/core/lib/event_engine/event_engine.cc +24 -19
  197. data/src/core/lib/event_engine/event_engine_factory.h +2 -2
  198. data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
  199. data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
  200. data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
  201. data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
  202. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
  203. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
  204. data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
  205. data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
  206. data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
  207. data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
  208. data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
  209. data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
  210. data/src/core/lib/event_engine/promise.h +69 -0
  211. data/src/core/lib/gpr/time_posix.cc +6 -9
  212. data/src/core/lib/gpr/time_windows.cc +10 -7
  213. data/src/core/lib/gprpp/manual_constructor.h +0 -67
  214. data/src/core/lib/gprpp/status_helper.cc +44 -30
  215. data/src/core/lib/gprpp/time.cc +8 -0
  216. data/src/core/lib/gprpp/time.h +4 -0
  217. data/src/core/lib/http/format_request.cc +5 -4
  218. data/src/core/lib/http/format_request.h +1 -1
  219. data/src/core/lib/http/httpcli.cc +18 -12
  220. data/src/core/lib/http/httpcli.h +19 -3
  221. data/src/core/lib/http/httpcli_security_connector.cc +16 -4
  222. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
  223. data/src/core/lib/http/parser.cc +6 -7
  224. data/src/core/lib/http/parser.h +3 -0
  225. data/src/core/lib/iomgr/call_combiner.cc +2 -2
  226. data/src/core/lib/iomgr/endpoint.h +1 -1
  227. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
  228. data/src/core/lib/iomgr/error.cc +11 -9
  229. data/src/core/lib/iomgr/error.h +9 -5
  230. data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
  231. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  232. data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
  233. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  234. data/src/core/lib/iomgr/ev_posix.cc +54 -92
  235. data/src/core/lib/iomgr/ev_posix.h +5 -3
  236. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  237. data/src/core/lib/iomgr/iomgr.cc +7 -0
  238. data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
  239. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
  240. data/src/core/lib/iomgr/load_file.cc +1 -1
  241. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
  242. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  243. data/src/core/lib/iomgr/tcp_client.cc +12 -7
  244. data/src/core/lib/iomgr/tcp_client.h +24 -13
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
  246. data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
  247. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  248. data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
  249. data/src/core/lib/iomgr/tcp_posix.cc +91 -29
  250. data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
  251. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
  253. data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
  254. data/src/core/lib/iomgr/tcp_windows.cc +5 -5
  255. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  256. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  257. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  258. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  259. data/src/core/lib/iomgr/work_serializer.h +2 -3
  260. data/src/core/lib/matchers/matchers.cc +6 -3
  261. data/src/core/lib/matchers/matchers.h +2 -0
  262. data/src/core/lib/promise/activity.cc +0 -1
  263. data/src/core/lib/promise/activity.h +7 -13
  264. data/src/core/lib/promise/loop.h +1 -0
  265. data/src/core/lib/promise/promise.h +1 -0
  266. data/src/core/lib/promise/sleep.cc +36 -31
  267. data/src/core/lib/promise/sleep.h +25 -25
  268. data/src/core/lib/resolver/resolver.cc +5 -0
  269. data/src/core/lib/resolver/resolver.h +3 -0
  270. data/src/core/lib/resolver/resolver_factory.h +5 -2
  271. data/src/core/lib/resolver/resolver_registry.cc +2 -9
  272. data/src/core/lib/resolver/resolver_registry.h +12 -1
  273. data/src/core/lib/resolver/server_address.cc +8 -0
  274. data/src/core/lib/resolver/server_address.h +9 -2
  275. data/src/core/lib/resource_quota/memory_quota.cc +18 -60
  276. data/src/core/lib/resource_quota/memory_quota.h +11 -25
  277. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  278. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  279. data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
  280. data/src/core/lib/security/authorization/evaluate_args.h +6 -3
  281. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
  282. data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
  283. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
  284. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
  285. data/src/core/lib/security/authorization/matchers.cc +9 -1
  286. data/src/core/lib/security/authorization/matchers.h +7 -0
  287. data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
  288. data/src/core/lib/security/authorization/rbac_policy.h +7 -0
  289. data/src/core/lib/security/context/security_context.cc +5 -2
  290. data/src/core/lib/security/context/security_context.h +14 -2
  291. data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
  292. data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
  293. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  294. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  295. data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
  296. data/src/core/lib/security/credentials/call_creds_util.h +1 -0
  297. data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
  298. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
  299. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  300. data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
  301. data/src/core/lib/security/credentials/credentials.cc +4 -8
  302. data/src/core/lib/security/credentials/credentials.h +10 -8
  303. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
  304. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
  305. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  306. data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
  307. data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
  308. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
  309. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  310. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
  311. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
  312. data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
  313. data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
  314. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  315. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
  316. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
  317. data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
  318. data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
  319. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
  320. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
  321. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  322. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  323. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
  324. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
  325. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
  326. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
  327. data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
  328. data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
  329. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
  330. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
  331. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
  332. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
  333. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
  334. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
  335. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  336. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  337. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
  338. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
  339. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
  340. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
  341. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
  342. data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
  343. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
  344. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  345. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  346. data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
  347. data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
  348. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
  349. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
  350. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
  354. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  355. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
  356. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  357. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
  358. data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
  359. data/src/core/lib/security/security_connector/security_connector.cc +20 -18
  360. data/src/core/lib/security/security_connector/security_connector.h +18 -6
  361. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
  362. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  363. data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
  364. data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
  365. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  366. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
  367. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
  368. data/src/core/lib/security/transport/auth_filters.h +7 -0
  369. data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
  370. data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
  371. data/src/core/lib/security/transport/secure_endpoint.h +4 -3
  372. data/src/core/lib/security/transport/security_handshaker.cc +44 -11
  373. data/src/core/lib/security/transport/security_handshaker.h +4 -0
  374. data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
  375. data/src/core/lib/security/util/json_util.cc +3 -2
  376. data/src/core/lib/security/util/json_util.h +0 -2
  377. data/src/core/lib/service_config/service_config_call_data.h +2 -1
  378. data/src/core/lib/service_config/service_config_impl.cc +6 -6
  379. data/src/core/lib/service_config/service_config_impl.h +1 -3
  380. data/src/core/lib/service_config/service_config_parser.cc +2 -4
  381. data/src/core/lib/slice/slice_buffer.cc +30 -1
  382. data/src/core/lib/slice/slice_buffer.h +37 -6
  383. data/src/core/lib/slice/slice_string_helpers.cc +0 -20
  384. data/src/core/lib/slice/slice_string_helpers.h +0 -4
  385. data/src/core/lib/surface/call.cc +53 -115
  386. data/src/core/lib/surface/call.h +5 -1
  387. data/src/core/lib/surface/channel.h +2 -0
  388. data/src/core/lib/surface/channel_ping.cc +1 -1
  389. data/src/core/lib/surface/completion_queue.cc +15 -14
  390. data/src/core/lib/surface/completion_queue.h +2 -1
  391. data/src/core/lib/surface/init.cc +0 -1
  392. data/src/core/lib/surface/lame_client.cc +1 -1
  393. data/src/core/lib/surface/lame_client.h +1 -1
  394. data/src/core/lib/surface/server.cc +14 -8
  395. data/src/core/lib/surface/server.h +4 -1
  396. data/src/core/lib/surface/validate_metadata.cc +1 -1
  397. data/src/core/lib/surface/version.cc +2 -2
  398. data/src/core/lib/transport/error_utils.cc +13 -7
  399. data/src/core/lib/transport/handshaker.cc +3 -3
  400. data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
  401. data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
  402. data/src/core/lib/transport/transport.cc +0 -3
  403. data/src/core/lib/transport/transport.h +20 -14
  404. data/src/core/lib/transport/transport_fwd.h +20 -0
  405. data/src/core/lib/transport/transport_impl.h +1 -0
  406. data/src/core/lib/transport/transport_op_string.cc +9 -9
  407. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  408. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  409. data/src/core/tsi/fake_transport_security.cc +13 -1
  410. data/src/core/tsi/fake_transport_security.h +6 -0
  411. data/src/core/tsi/ssl_transport_security.cc +1 -1
  412. data/src/core/tsi/transport_security_grpc.cc +3 -2
  413. data/src/core/tsi/transport_security_grpc.h +5 -2
  414. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  415. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  416. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  417. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  418. data/src/ruby/ext/grpc/extconf.rb +49 -18
  419. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  420. data/src/ruby/lib/grpc/errors.rb +1 -1
  421. data/src/ruby/lib/grpc/version.rb +1 -1
  422. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  423. data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
  424. data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
  425. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  426. data/third_party/abseil-cpp/absl/base/config.h +182 -41
  427. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  428. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  429. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  430. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  431. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  432. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  433. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  434. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  435. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  436. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  437. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
  438. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  439. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  440. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  441. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
  442. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  443. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  444. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
  445. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  446. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  447. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  448. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  449. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  450. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
  451. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  452. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
  453. data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
  454. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  455. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  456. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
  457. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
  458. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
  459. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
  460. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
  461. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  462. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
  463. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  464. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  465. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  466. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  467. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  468. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
  469. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  470. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
  471. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  472. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
  473. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  474. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  475. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  476. data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
  477. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  478. data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
  479. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  480. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
  481. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  482. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  483. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  484. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  485. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  486. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  487. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
  488. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  489. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  490. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  491. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  492. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  493. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  494. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  495. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  496. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  497. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  498. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  499. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  500. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  501. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
  502. data/third_party/abseil-cpp/absl/status/status.cc +174 -2
  503. data/third_party/abseil-cpp/absl/status/status.h +22 -12
  504. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  505. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  506. data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
  507. data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
  508. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  509. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  510. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  511. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  512. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  513. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  514. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
  515. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
  516. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
  517. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
  518. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  519. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  520. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  521. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  522. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  523. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  524. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  525. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  526. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
  527. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
  528. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  529. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  530. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  531. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  532. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
  533. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
  534. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  535. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
  536. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
  537. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  538. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  539. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  540. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  541. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  542. data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
  543. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  544. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  545. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  546. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  547. data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
  548. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  549. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  550. data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
  551. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  552. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  553. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  554. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  555. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  556. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  557. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  558. data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
  559. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  560. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  561. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  562. data/third_party/abseil-cpp/absl/time/time.h +16 -12
  563. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  564. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  565. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  566. data/third_party/abseil-cpp/absl/types/span.h +2 -1
  567. metadata +39 -15
  568. data/src/core/lib/slice/slice_split.cc +0 -103
  569. data/src/core/lib/slice/slice_split.h +0 -36
  570. data/src/core/lib/transport/byte_stream.cc +0 -165
  571. data/src/core/lib/transport/byte_stream.h +0 -170
  572. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
  573. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
  574. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -1,20 +1,18 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
1
+ //
2
+ // Copyright 2015 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
+ //
18
16
 
19
17
  #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_SUBCHANNEL_LIST_H
20
18
  #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_SUBCHANNEL_LIST_H
@@ -27,8 +25,10 @@
27
25
  #include <memory>
28
26
  #include <string>
29
27
  #include <utility>
28
+ #include <vector>
30
29
 
31
- #include "absl/container/inlined_vector.h"
30
+ #include "absl/status/status.h"
31
+ #include "absl/types/optional.h"
32
32
 
33
33
  #include <grpc/impl/codegen/connectivity_state.h>
34
34
  #include <grpc/impl/codegen/grpc_types.h>
@@ -55,7 +55,8 @@ class MySubchannelData
55
55
  : public SubchannelData<MySubchannelList, MySubchannelData> {
56
56
  public:
57
57
  void ProcessConnectivityChangeLocked(
58
- grpc_connectivity_state connectivity_state) override {
58
+ absl::optional<grpc_connectivity_state> old_state,
59
+ grpc_connectivity_state new_state) override {
59
60
  // ...code to handle connectivity changes...
60
61
  }
61
62
  };
@@ -93,29 +94,15 @@ class SubchannelData {
93
94
  // Returns a pointer to the subchannel.
94
95
  SubchannelInterface* subchannel() const { return subchannel_.get(); }
95
96
 
96
- // Synchronously checks the subchannel's connectivity state.
97
- // Must not be called while there is a connectivity notification
98
- // pending (i.e., between calling StartConnectivityWatchLocked() and
99
- // calling CancelConnectivityWatchLocked()).
100
- grpc_connectivity_state CheckConnectivityStateLocked() {
101
- GPR_ASSERT(pending_watcher_ == nullptr);
102
- connectivity_state_ = subchannel_->CheckConnectivityState();
97
+ // Returns the cached connectivity state, if any.
98
+ absl::optional<grpc_connectivity_state> connectivity_state() {
103
99
  return connectivity_state_;
104
100
  }
101
+ absl::Status connectivity_status() { return connectivity_status_; }
105
102
 
106
103
  // Resets the connection backoff.
107
- // TODO(roth): This method should go away when we move the backoff
108
- // code out of the subchannel and into the LB policies.
109
104
  void ResetBackoffLocked();
110
105
 
111
- // Starts watching the connectivity state of the subchannel.
112
- // ProcessConnectivityChangeLocked() will be called whenever the
113
- // connectivity state changes.
114
- void StartConnectivityWatchLocked();
115
-
116
- // Cancels watching the connectivity state of the subchannel.
117
- void CancelConnectivityWatchLocked(const char* reason);
118
-
119
106
  // Cancels any pending connectivity watch and unrefs the subchannel.
120
107
  void ShutdownLocked();
121
108
 
@@ -127,13 +114,17 @@ class SubchannelData {
127
114
 
128
115
  virtual ~SubchannelData();
129
116
 
130
- // After StartConnectivityWatchLocked() is called, this method will be
131
- // invoked whenever the subchannel's connectivity state changes.
132
- // To stop watching, use CancelConnectivityWatchLocked().
117
+ // This method will be invoked once soon after instantiation to report
118
+ // the current connectivity state, and it will then be invoked again
119
+ // whenever the connectivity state changes.
133
120
  virtual void ProcessConnectivityChangeLocked(
134
- grpc_connectivity_state connectivity_state) = 0;
121
+ absl::optional<grpc_connectivity_state> old_state,
122
+ grpc_connectivity_state new_state) = 0;
135
123
 
136
124
  private:
125
+ // For accessing StartConnectivityWatchLocked().
126
+ friend class SubchannelList<SubchannelListType, SubchannelDataType>;
127
+
137
128
  // Watcher for subchannel connectivity state.
138
129
  class Watcher
139
130
  : public SubchannelInterface::ConnectivityStateWatcherInterface {
@@ -148,7 +139,8 @@ class SubchannelData {
148
139
  subchannel_list_.reset(DEBUG_LOCATION, "Watcher dtor");
149
140
  }
150
141
 
151
- void OnConnectivityStateChange(grpc_connectivity_state new_state) override;
142
+ void OnConnectivityStateChange(grpc_connectivity_state new_state,
143
+ absl::Status status) override;
152
144
 
153
145
  grpc_pollset_set* interested_parties() override {
154
146
  return subchannel_list_->policy()->interested_parties();
@@ -159,6 +151,14 @@ class SubchannelData {
159
151
  RefCountedPtr<SubchannelListType> subchannel_list_;
160
152
  };
161
153
 
154
+ // Starts watching the connectivity state of the subchannel.
155
+ // ProcessConnectivityChangeLocked() will be called whenever the
156
+ // connectivity state changes.
157
+ void StartConnectivityWatchLocked();
158
+
159
+ // Cancels watching the connectivity state of the subchannel.
160
+ void CancelConnectivityWatchLocked(const char* reason);
161
+
162
162
  // Unrefs the subchannel.
163
163
  void UnrefSubchannelLocked(const char* reason);
164
164
 
@@ -170,7 +170,8 @@ class SubchannelData {
170
170
  SubchannelInterface::ConnectivityStateWatcherInterface* pending_watcher_ =
171
171
  nullptr;
172
172
  // Data updated by the watcher.
173
- grpc_connectivity_state connectivity_state_;
173
+ absl::optional<grpc_connectivity_state> connectivity_state_;
174
+ absl::Status connectivity_status_;
174
175
  };
175
176
 
176
177
  // A list of subchannels.
@@ -179,8 +180,7 @@ class SubchannelList : public InternallyRefCounted<SubchannelListType> {
179
180
  public:
180
181
  // We use ManualConstructor here to support SubchannelDataType classes
181
182
  // that are not copyable.
182
- typedef absl::InlinedVector<ManualConstructor<SubchannelDataType>, 10>
183
- SubchannelVector;
183
+ using SubchannelVector = std::vector<ManualConstructor<SubchannelDataType>>;
184
184
 
185
185
  // The number of subchannels in the list.
186
186
  size_t num_subchannels() const { return subchannels_.size(); }
@@ -198,8 +198,6 @@ class SubchannelList : public InternallyRefCounted<SubchannelListType> {
198
198
  const char* tracer() const { return tracer_; }
199
199
 
200
200
  // Resets connection backoff of all subchannels.
201
- // TODO(roth): We will probably need to rethink this as part of moving
202
- // the backoff code out of subchannels and into LB policies.
203
201
  void ResetBackoffLocked();
204
202
 
205
203
  void Orphan() override {
@@ -215,12 +213,12 @@ class SubchannelList : public InternallyRefCounted<SubchannelListType> {
215
213
 
216
214
  virtual ~SubchannelList();
217
215
 
216
+ virtual void ShutdownLocked();
217
+
218
218
  private:
219
219
  // For accessing Ref() and Unref().
220
220
  friend class SubchannelData<SubchannelListType, SubchannelDataType>;
221
221
 
222
- void ShutdownLocked();
223
-
224
222
  // Backpointer to owning policy.
225
223
  LoadBalancingPolicy* policy_;
226
224
 
@@ -245,24 +243,32 @@ class SubchannelList : public InternallyRefCounted<SubchannelListType> {
245
243
 
246
244
  template <typename SubchannelListType, typename SubchannelDataType>
247
245
  void SubchannelData<SubchannelListType, SubchannelDataType>::Watcher::
248
- OnConnectivityStateChange(grpc_connectivity_state new_state) {
246
+ OnConnectivityStateChange(grpc_connectivity_state new_state,
247
+ absl::Status status) {
249
248
  if (GPR_UNLIKELY(subchannel_list_->tracer() != nullptr)) {
250
- gpr_log(GPR_INFO,
251
- "[%s %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
252
- " (subchannel %p): connectivity changed: state=%s, "
253
- "shutting_down=%d, pending_watcher=%p",
254
- subchannel_list_->tracer(), subchannel_list_->policy(),
255
- subchannel_list_.get(), subchannel_data_->Index(),
256
- subchannel_list_->num_subchannels(),
257
- subchannel_data_->subchannel_.get(),
258
- ConnectivityStateName(new_state), subchannel_list_->shutting_down(),
259
- subchannel_data_->pending_watcher_);
249
+ gpr_log(
250
+ GPR_INFO,
251
+ "[%s %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
252
+ " (subchannel %p): connectivity changed: old_state=%s, new_state=%s, "
253
+ "status=%s, shutting_down=%d, pending_watcher=%p",
254
+ subchannel_list_->tracer(), subchannel_list_->policy(),
255
+ subchannel_list_.get(), subchannel_data_->Index(),
256
+ subchannel_list_->num_subchannels(),
257
+ subchannel_data_->subchannel_.get(),
258
+ (subchannel_data_->connectivity_state_.has_value()
259
+ ? ConnectivityStateName(*subchannel_data_->connectivity_state_)
260
+ : "N/A"),
261
+ ConnectivityStateName(new_state), status.ToString().c_str(),
262
+ subchannel_list_->shutting_down(), subchannel_data_->pending_watcher_);
260
263
  }
261
264
  if (!subchannel_list_->shutting_down() &&
262
265
  subchannel_data_->pending_watcher_ != nullptr) {
266
+ absl::optional<grpc_connectivity_state> old_state =
267
+ subchannel_data_->connectivity_state_;
263
268
  subchannel_data_->connectivity_state_ = new_state;
269
+ subchannel_data_->connectivity_status_ = status;
264
270
  // Call the subclass's ProcessConnectivityChangeLocked() method.
265
- subchannel_data_->ProcessConnectivityChangeLocked(new_state);
271
+ subchannel_data_->ProcessConnectivityChangeLocked(old_state, new_state);
266
272
  }
267
273
  }
268
274
 
@@ -275,11 +281,7 @@ SubchannelData<SubchannelListType, SubchannelDataType>::SubchannelData(
275
281
  SubchannelList<SubchannelListType, SubchannelDataType>* subchannel_list,
276
282
  const ServerAddress& /*address*/,
277
283
  RefCountedPtr<SubchannelInterface> subchannel)
278
- : subchannel_list_(subchannel_list),
279
- subchannel_(std::move(subchannel)),
280
- // We assume that the current state is IDLE. If not, we'll get a
281
- // callback telling us that.
282
- connectivity_state_(GRPC_CHANNEL_IDLE) {}
284
+ : subchannel_list_(subchannel_list), subchannel_(std::move(subchannel)) {}
283
285
 
284
286
  template <typename SubchannelListType, typename SubchannelDataType>
285
287
  SubchannelData<SubchannelListType, SubchannelDataType>::~SubchannelData() {
@@ -316,16 +318,15 @@ void SubchannelData<SubchannelListType,
316
318
  if (GPR_UNLIKELY(subchannel_list_->tracer() != nullptr)) {
317
319
  gpr_log(GPR_INFO,
318
320
  "[%s %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
319
- " (subchannel %p): starting watch (from %s)",
321
+ " (subchannel %p): starting watch",
320
322
  subchannel_list_->tracer(), subchannel_list_->policy(),
321
323
  subchannel_list_, Index(), subchannel_list_->num_subchannels(),
322
- subchannel_.get(), ConnectivityStateName(connectivity_state_));
324
+ subchannel_.get());
323
325
  }
324
326
  GPR_ASSERT(pending_watcher_ == nullptr);
325
327
  pending_watcher_ =
326
328
  new Watcher(this, subchannel_list()->Ref(DEBUG_LOCATION, "Watcher"));
327
329
  subchannel_->WatchConnectivityState(
328
- connectivity_state_,
329
330
  std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>(
330
331
  pending_watcher_));
331
332
  }
@@ -333,15 +334,15 @@ void SubchannelData<SubchannelListType,
333
334
  template <typename SubchannelListType, typename SubchannelDataType>
334
335
  void SubchannelData<SubchannelListType, SubchannelDataType>::
335
336
  CancelConnectivityWatchLocked(const char* reason) {
336
- if (GPR_UNLIKELY(subchannel_list_->tracer() != nullptr)) {
337
- gpr_log(GPR_INFO,
338
- "[%s %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
339
- " (subchannel %p): canceling connectivity watch (%s)",
340
- subchannel_list_->tracer(), subchannel_list_->policy(),
341
- subchannel_list_, Index(), subchannel_list_->num_subchannels(),
342
- subchannel_.get(), reason);
343
- }
344
337
  if (pending_watcher_ != nullptr) {
338
+ if (GPR_UNLIKELY(subchannel_list_->tracer() != nullptr)) {
339
+ gpr_log(GPR_INFO,
340
+ "[%s %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
341
+ " (subchannel %p): canceling connectivity watch (%s)",
342
+ subchannel_list_->tracer(), subchannel_list_->policy(),
343
+ subchannel_list_, Index(), subchannel_list_->num_subchannels(),
344
+ subchannel_.get(), reason);
345
+ }
345
346
  subchannel_->CancelConnectivityStateWatch(pending_watcher_);
346
347
  pending_watcher_ = nullptr;
347
348
  }
@@ -349,7 +350,7 @@ void SubchannelData<SubchannelListType, SubchannelDataType>::
349
350
 
350
351
  template <typename SubchannelListType, typename SubchannelDataType>
351
352
  void SubchannelData<SubchannelListType, SubchannelDataType>::ShutdownLocked() {
352
- if (pending_watcher_ != nullptr) CancelConnectivityWatchLocked("shutdown");
353
+ CancelConnectivityWatchLocked("shutdown");
353
354
  UnrefSubchannelLocked("shutdown");
354
355
  }
355
356
 
@@ -395,6 +396,10 @@ SubchannelList<SubchannelListType, SubchannelDataType>::SubchannelList(
395
396
  subchannels_.emplace_back();
396
397
  subchannels_.back().Init(this, std::move(address), std::move(subchannel));
397
398
  }
399
+ // Start watching subchannel connectivity state.
400
+ for (auto& sd : subchannels_) {
401
+ sd->StartConnectivityWatchLocked();
402
+ }
398
403
  }
399
404
 
400
405
  template <typename SubchannelListType, typename SubchannelDataType>
@@ -431,4 +436,4 @@ void SubchannelList<SubchannelListType,
431
436
 
432
437
  } // namespace grpc_core
433
438
 
434
- #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_SUBCHANNEL_LIST_H */
439
+ #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_SUBCHANNEL_LIST_H
@@ -26,13 +26,14 @@
26
26
  #include <utility>
27
27
  #include <vector>
28
28
 
29
- #include "absl/container/inlined_vector.h"
30
29
  #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"
34
33
  #include "absl/strings/string_view.h"
34
+ #include "absl/types/optional.h"
35
35
 
36
+ #include <grpc/event_engine/event_engine.h>
36
37
  #include <grpc/impl/codegen/connectivity_state.h>
37
38
  #include <grpc/impl/codegen/grpc_types.h>
38
39
  #include <grpc/support/log.h>
@@ -45,17 +46,15 @@
45
46
  #include "src/core/ext/filters/client_channel/subchannel_interface.h"
46
47
  #include "src/core/lib/channel/channel_args.h"
47
48
  #include "src/core/lib/debug/trace.h"
49
+ #include "src/core/lib/event_engine/event_engine_factory.h"
48
50
  #include "src/core/lib/gpr/string.h"
49
51
  #include "src/core/lib/gprpp/debug_location.h"
50
52
  #include "src/core/lib/gprpp/orphanable.h"
51
53
  #include "src/core/lib/gprpp/ref_counted.h"
52
54
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
53
55
  #include "src/core/lib/gprpp/time.h"
54
- #include "src/core/lib/iomgr/closure.h"
55
56
  #include "src/core/lib/iomgr/error.h"
56
- #include "src/core/lib/iomgr/exec_ctx.h"
57
57
  #include "src/core/lib/iomgr/pollset_set.h"
58
- #include "src/core/lib/iomgr/timer.h"
59
58
  #include "src/core/lib/iomgr/work_serializer.h"
60
59
  #include "src/core/lib/json/json.h"
61
60
  #include "src/core/lib/resolver/server_address.h"
@@ -69,6 +68,9 @@ TraceFlag grpc_lb_weighted_target_trace(false, "weighted_target_lb");
69
68
 
70
69
  namespace {
71
70
 
71
+ using ::grpc_event_engine::experimental::EventEngine;
72
+ using ::grpc_event_engine::experimental::GetDefaultEventEngine;
73
+
72
74
  constexpr char kWeightedTarget[] = "weighted_target_experimental";
73
75
 
74
76
  // How long we keep a child around for after it has been removed from
@@ -126,8 +128,8 @@ class WeightedTargetLb : public LoadBalancingPolicy {
126
128
  // ready state. The first element in the pair represents the end of a
127
129
  // range proportional to the child's weight. The start of the range
128
130
  // is the previous value in the vector and is 0 for the first element.
129
- using PickerList = absl::InlinedVector<
130
- std::pair<uint32_t, RefCountedPtr<ChildPickerWrapper>>, 1>;
131
+ using PickerList =
132
+ std::vector<std::pair<uint32_t, RefCountedPtr<ChildPickerWrapper>>>;
131
133
 
132
134
  explicit WeightedPicker(PickerList pickers)
133
135
  : pickers_(std::move(pickers)) {}
@@ -191,13 +193,10 @@ class WeightedTargetLb : public LoadBalancingPolicy {
191
193
  void Orphan() override;
192
194
 
193
195
  private:
194
- static void OnTimer(void* arg, grpc_error_handle error);
195
- void OnTimerLocked(grpc_error_handle error);
196
+ void OnTimerLocked();
196
197
 
197
198
  RefCountedPtr<WeightedChild> weighted_child_;
198
- grpc_timer timer_;
199
- grpc_closure on_timer_;
200
- bool timer_pending_ = true;
199
+ absl::optional<EventEngine::TaskHandle> timer_handle_;
201
200
  };
202
201
 
203
202
  // Methods for dealing with the child policy.
@@ -219,7 +218,6 @@ class WeightedTargetLb : public LoadBalancingPolicy {
219
218
 
220
219
  RefCountedPtr<ChildPickerWrapper> picker_wrapper_;
221
220
  grpc_connectivity_state connectivity_state_ = GRPC_CHANNEL_CONNECTING;
222
- bool seen_failure_since_ready_ = false;
223
221
 
224
222
  OrphanablePtr<DelayedRemovalTimer> delayed_removal_timer_;
225
223
  };
@@ -339,6 +337,14 @@ void WeightedTargetLb::UpdateLocked(UpdateArgs args) {
339
337
  target->UpdateLocked(config, std::move(addresses), args.args);
340
338
  }
341
339
  update_in_progress_ = false;
340
+ if (config_->target_map().empty()) {
341
+ absl::Status status = absl::UnavailableError(absl::StrCat(
342
+ "no children in weighted_target policy: ", args.resolution_note));
343
+ channel_control_helper()->UpdateState(
344
+ GRPC_CHANNEL_TRANSIENT_FAILURE, status,
345
+ absl::make_unique<TransientFailurePicker>(status));
346
+ return;
347
+ }
342
348
  UpdateStateLocked();
343
349
  }
344
350
 
@@ -355,17 +361,19 @@ void WeightedTargetLb::UpdateStateLocked() {
355
361
  "connectivity state",
356
362
  this);
357
363
  }
358
- // Construct a new picker which maintains a map of all child pickers
359
- // that are ready. Each child is represented by a portion of the range
360
- // proportional to its weight, such that the total range is the sum of the
361
- // weights of all children.
362
- WeightedPicker::PickerList picker_list;
363
- uint32_t end = 0;
364
- // Also count the number of children in each state, to determine the
365
- // overall state.
364
+ // Construct lists of child pickers with associated weights, one for
365
+ // children that are in state READY and another for children that are
366
+ // in state TRANSIENT_FAILURE. Each child is represented by a portion of
367
+ // the range proportional to its weight, such that the total range is the
368
+ // sum of the weights of all children.
369
+ WeightedPicker::PickerList ready_picker_list;
370
+ uint32_t ready_end = 0;
371
+ WeightedPicker::PickerList tf_picker_list;
372
+ uint32_t tf_end = 0;
373
+ // Also count the number of children in CONNECTING and IDLE, to determine
374
+ // the aggregated state.
366
375
  size_t num_connecting = 0;
367
376
  size_t num_idle = 0;
368
- size_t num_transient_failures = 0;
369
377
  for (const auto& p : targets_) {
370
378
  const std::string& child_name = p.first;
371
379
  const WeightedChild* child = p.second.get();
@@ -383,8 +391,8 @@ void WeightedTargetLb::UpdateStateLocked() {
383
391
  switch (child->connectivity_state()) {
384
392
  case GRPC_CHANNEL_READY: {
385
393
  GPR_ASSERT(child->weight() > 0);
386
- end += child->weight();
387
- picker_list.push_back(std::make_pair(end, child->picker_wrapper()));
394
+ ready_end += child->weight();
395
+ ready_picker_list.emplace_back(ready_end, child->picker_wrapper());
388
396
  break;
389
397
  }
390
398
  case GRPC_CHANNEL_CONNECTING: {
@@ -396,7 +404,9 @@ void WeightedTargetLb::UpdateStateLocked() {
396
404
  break;
397
405
  }
398
406
  case GRPC_CHANNEL_TRANSIENT_FAILURE: {
399
- ++num_transient_failures;
407
+ GPR_ASSERT(child->weight() > 0);
408
+ tf_end += child->weight();
409
+ tf_picker_list.emplace_back(tf_end, child->picker_wrapper());
400
410
  break;
401
411
  }
402
412
  default:
@@ -405,7 +415,7 @@ void WeightedTargetLb::UpdateStateLocked() {
405
415
  }
406
416
  // Determine aggregated connectivity state.
407
417
  grpc_connectivity_state connectivity_state;
408
- if (!picker_list.empty()) {
418
+ if (!ready_picker_list.empty()) {
409
419
  connectivity_state = GRPC_CHANNEL_READY;
410
420
  } else if (num_connecting > 0) {
411
421
  connectivity_state = GRPC_CHANNEL_CONNECTING;
@@ -422,7 +432,7 @@ void WeightedTargetLb::UpdateStateLocked() {
422
432
  absl::Status status;
423
433
  switch (connectivity_state) {
424
434
  case GRPC_CHANNEL_READY:
425
- picker = absl::make_unique<WeightedPicker>(std::move(picker_list));
435
+ picker = absl::make_unique<WeightedPicker>(std::move(ready_picker_list));
426
436
  break;
427
437
  case GRPC_CHANNEL_CONNECTING:
428
438
  case GRPC_CHANNEL_IDLE:
@@ -430,9 +440,7 @@ void WeightedTargetLb::UpdateStateLocked() {
430
440
  absl::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker"));
431
441
  break;
432
442
  default:
433
- status = absl::UnavailableError(
434
- "weighted_target: all children report state TRANSIENT_FAILURE");
435
- picker = absl::make_unique<TransientFailurePicker>(status);
443
+ picker = absl::make_unique<WeightedPicker>(std::move(tf_picker_list));
436
444
  }
437
445
  channel_control_helper()->UpdateState(connectivity_state, status,
438
446
  std::move(picker));
@@ -445,14 +453,16 @@ void WeightedTargetLb::UpdateStateLocked() {
445
453
  WeightedTargetLb::WeightedChild::DelayedRemovalTimer::DelayedRemovalTimer(
446
454
  RefCountedPtr<WeightedTargetLb::WeightedChild> weighted_child)
447
455
  : weighted_child_(std::move(weighted_child)) {
448
- GRPC_CLOSURE_INIT(&on_timer_, OnTimer, this, nullptr);
449
- Ref().release();
450
- grpc_timer_init(&timer_, ExecCtx::Get()->Now() + kChildRetentionInterval,
451
- &on_timer_);
456
+ timer_handle_ = GetDefaultEventEngine()->RunAfter(
457
+ kChildRetentionInterval, [self = Ref()]() mutable {
458
+ self->weighted_child_->weighted_target_policy_->work_serializer()->Run(
459
+ [self = std::move(self)] { self->OnTimerLocked(); },
460
+ DEBUG_LOCATION);
461
+ });
452
462
  }
453
463
 
454
464
  void WeightedTargetLb::WeightedChild::DelayedRemovalTimer::Orphan() {
455
- if (timer_pending_) {
465
+ if (timer_handle_.has_value()) {
456
466
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_weighted_target_trace)) {
457
467
  gpr_log(GPR_INFO,
458
468
  "[weighted_target_lb %p] WeightedChild %p %s: cancelling "
@@ -460,29 +470,16 @@ void WeightedTargetLb::WeightedChild::DelayedRemovalTimer::Orphan() {
460
470
  weighted_child_->weighted_target_policy_.get(),
461
471
  weighted_child_.get(), weighted_child_->name_.c_str());
462
472
  }
463
- timer_pending_ = false;
464
- grpc_timer_cancel(&timer_);
473
+ GetDefaultEventEngine()->Cancel(*timer_handle_);
465
474
  }
466
475
  Unref();
467
476
  }
468
477
 
469
- void WeightedTargetLb::WeightedChild::DelayedRemovalTimer::OnTimer(
470
- void* arg, grpc_error_handle error) {
471
- auto* self = static_cast<DelayedRemovalTimer*>(arg);
472
- (void)GRPC_ERROR_REF(error); // ref owned by lambda
473
- self->weighted_child_->weighted_target_policy_->work_serializer()->Run(
474
- [self, error]() { self->OnTimerLocked(error); }, DEBUG_LOCATION);
475
- }
476
-
477
- void WeightedTargetLb::WeightedChild::DelayedRemovalTimer::OnTimerLocked(
478
- grpc_error_handle error) {
479
- if (error == GRPC_ERROR_NONE && timer_pending_) {
480
- timer_pending_ = false;
481
- weighted_child_->weighted_target_policy_->targets_.erase(
482
- weighted_child_->name_);
483
- }
484
- GRPC_ERROR_UNREF(error);
485
- Unref();
478
+ void WeightedTargetLb::WeightedChild::DelayedRemovalTimer::OnTimerLocked() {
479
+ GPR_ASSERT(timer_handle_.has_value());
480
+ timer_handle_.reset();
481
+ weighted_child_->weighted_target_policy_->targets_.erase(
482
+ weighted_child_->name_);
486
483
  }
487
484
 
488
485
  //
@@ -610,19 +607,12 @@ void WeightedTargetLb::WeightedChild::OnConnectivityStateUpdateLocked(
610
607
  // If the child reports IDLE, immediately tell it to exit idle.
611
608
  if (state == GRPC_CHANNEL_IDLE) child_policy_->ExitIdleLocked();
612
609
  // Decide what state to report for aggregation purposes.
613
- // If we haven't seen a failure since the last time we were in state
614
- // READY, then we report the state change as-is. However, once we do see
615
- // a failure, we report TRANSIENT_FAILURE and ignore any subsequent state
616
- // changes until we go back into state READY.
617
- if (!seen_failure_since_ready_) {
618
- if (state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
619
- seen_failure_since_ready_ = true;
620
- }
621
- } else {
622
- if (state != GRPC_CHANNEL_READY) return;
623
- seen_failure_since_ready_ = false;
610
+ // If the last recorded state was TRANSIENT_FAILURE and the new state
611
+ // is something other than READY, don't change the state.
612
+ if (connectivity_state_ != GRPC_CHANNEL_TRANSIENT_FAILURE ||
613
+ state == GRPC_CHANNEL_READY) {
614
+ connectivity_state_ = state;
624
615
  }
625
- connectivity_state_ = state;
626
616
  // Notify the LB policy.
627
617
  weighted_target_policy_->UpdateStateLocked();
628
618
  }
@@ -695,7 +685,7 @@ class WeightedTargetLbFactory : public LoadBalancingPolicyFactory {
695
685
 
696
686
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
697
687
  const Json& json, grpc_error_handle* error) const override {
698
- GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
688
+ GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
699
689
  if (json.type() == Json::Type::JSON_NULL) {
700
690
  // weighted_target was mentioned as a policy in the deprecated
701
691
  // loadBalancingPolicy field or in the client API.
@@ -773,7 +763,7 @@ class WeightedTargetLbFactory : public LoadBalancingPolicyFactory {
773
763
  LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(it->second,
774
764
  &parse_error);
775
765
  if (child_config->config == nullptr) {
776
- GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
766
+ GPR_DEBUG_ASSERT(!GRPC_ERROR_IS_NONE(parse_error));
777
767
  std::vector<grpc_error_handle> child_errors;
778
768
  child_errors.push_back(parse_error);
779
769
  error_list.push_back(
@@ -521,7 +521,7 @@ void CdsLb::OnClusterChanged(const std::string& name,
521
521
  grpc_error_handle error = GRPC_ERROR_NONE;
522
522
  RefCountedPtr<LoadBalancingPolicy::Config> config =
523
523
  LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(json, &error);
524
- if (error != GRPC_ERROR_NONE) {
524
+ if (!GRPC_ERROR_IS_NONE(error)) {
525
525
  OnError(name, absl::UnavailableError(grpc_error_std_string(error)));
526
526
  GRPC_ERROR_UNREF(error);
527
527
  return;
@@ -733,7 +733,7 @@ class CdsLbFactory : public LoadBalancingPolicyFactory {
733
733
 
734
734
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
735
735
  const Json& json, grpc_error_handle* error) const override {
736
- GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
736
+ GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
737
737
  if (json.type() == Json::Type::JSON_NULL) {
738
738
  // xds was mentioned as a policy in the deprecated loadBalancingPolicy
739
739
  // field or in the client API.
@@ -530,8 +530,7 @@ void XdsClusterImplLb::MaybeUpdatePickerLocked() {
530
530
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_impl_lb_trace)) {
531
531
  gpr_log(GPR_INFO,
532
532
  "[xds_cluster_impl_lb %p] updating connectivity (drop all): "
533
- "state=READY "
534
- "picker=%p",
533
+ "state=READY picker=%p",
535
534
  this, drop_picker.get());
536
535
  }
537
536
  channel_control_helper()->UpdateState(GRPC_CHANNEL_READY, absl::Status(),
@@ -544,8 +543,7 @@ void XdsClusterImplLb::MaybeUpdatePickerLocked() {
544
543
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_impl_lb_trace)) {
545
544
  gpr_log(GPR_INFO,
546
545
  "[xds_cluster_impl_lb %p] updating connectivity: state=%s "
547
- "status=(%s) "
548
- "picker=%p",
546
+ "status=(%s) picker=%p",
549
547
  this, ConnectivityStateName(state_), status_.ToString().c_str(),
550
548
  drop_picker.get());
551
549
  }
@@ -708,7 +706,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
708
706
 
709
707
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
710
708
  const Json& json, grpc_error_handle* error) const override {
711
- GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
709
+ GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
712
710
  if (json.type() == Json::Type::JSON_NULL) {
713
711
  // This policy was configured in the deprecated loadBalancingPolicy
714
712
  // field or in the client API.
@@ -730,7 +728,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
730
728
  child_policy = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
731
729
  it->second, &parse_error);
732
730
  if (child_policy == nullptr) {
733
- GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
731
+ GPR_DEBUG_ASSERT(!GRPC_ERROR_IS_NONE(parse_error));
734
732
  std::vector<grpc_error_handle> child_errors;
735
733
  child_errors.push_back(parse_error);
736
734
  error_list.push_back(
@@ -771,7 +769,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
771
769
  grpc_error_handle parser_error;
772
770
  lrs_load_reporting_server = XdsBootstrap::XdsServer::Parse(
773
771
  it->second.object_value(), &parser_error);
774
- if (parser_error != GRPC_ERROR_NONE) {
772
+ if (!GRPC_ERROR_IS_NONE(parser_error)) {
775
773
  error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
776
774
  absl::StrCat("errors parsing lrs_load_reporting_server")));
777
775
  error_list.push_back(parser_error);