grpc 1.37.1 → 1.38.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 (544) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +64 -58
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/channel_args.h +28 -0
  5. data/include/grpc/event_engine/event_engine.h +336 -0
  6. data/include/grpc/event_engine/port.h +39 -0
  7. data/include/grpc/event_engine/slice_allocator.h +81 -0
  8. data/include/grpc/grpc.h +2 -2
  9. data/include/grpc/grpc_security_constants.h +14 -0
  10. data/include/grpc/impl/codegen/grpc_types.h +11 -0
  11. data/include/grpc/impl/codegen/port_platform.h +5 -0
  12. data/include/grpc/module.modulemap +14 -14
  13. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  14. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  15. data/src/core/ext/filters/client_channel/client_channel.cc +628 -3101
  16. data/src/core/ext/filters/client_channel/client_channel.h +489 -55
  17. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  20. data/src/core/ext/filters/client_channel/connector.h +1 -1
  21. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
  22. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  23. data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
  24. data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
  26. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
  34. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
  35. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +36 -30
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +84 -61
  41. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  42. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  43. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver.h +2 -2
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -15
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
  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/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -9
  55. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
  56. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  57. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +13 -11
  58. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  59. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +43 -28
  60. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  61. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  62. data/src/core/ext/filters/client_channel/retry_filter.cc +2188 -0
  63. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  64. data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
  65. data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
  66. data/src/core/ext/filters/client_channel/server_address.cc +1 -1
  67. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  68. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  69. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  70. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  71. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  72. data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
  73. data/src/core/ext/filters/client_channel/subchannel.h +7 -6
  74. data/src/core/ext/filters/client_idle/client_idle_filter.cc +16 -15
  75. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  76. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
  77. data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
  78. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  79. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
  80. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  81. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  82. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  83. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  84. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  85. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  86. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  87. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
  88. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  89. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  90. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
  91. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  92. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
  93. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
  94. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  95. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  96. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -2
  97. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  98. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -116
  99. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  100. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  101. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  102. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
  103. data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
  104. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  105. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
  106. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  107. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  108. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  109. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  110. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  111. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
  112. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  113. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  114. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  115. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
  116. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
  117. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  118. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  119. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  120. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  121. data/src/core/ext/transport/chttp2/transport/internal.h +31 -27
  122. data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
  123. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  124. data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
  125. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  126. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  127. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  128. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  129. data/src/core/ext/xds/xds_api.cc +101 -93
  130. data/src/core/ext/xds/xds_api.h +6 -6
  131. data/src/core/ext/xds/xds_bootstrap.cc +97 -159
  132. data/src/core/ext/xds/xds_bootstrap.h +19 -24
  133. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  134. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  135. data/src/core/ext/xds/xds_channel_args.h +5 -2
  136. data/src/core/ext/xds/xds_client.cc +310 -178
  137. data/src/core/ext/xds/xds_client.h +41 -27
  138. data/src/core/ext/xds/xds_client_stats.h +3 -2
  139. data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
  140. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  141. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  142. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +3 -20
  143. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +6 -11
  144. data/src/core/lib/channel/channel_stack.cc +10 -9
  145. data/src/core/lib/channel/channel_stack.h +10 -9
  146. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  147. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  148. data/src/core/lib/channel/channelz.cc +21 -13
  149. data/src/core/lib/channel/connected_channel.cc +4 -4
  150. data/src/core/lib/channel/handshaker.cc +7 -6
  151. data/src/core/lib/channel/handshaker.h +5 -5
  152. data/src/core/lib/event_engine/slice_allocator.cc +59 -0
  153. data/src/core/lib/event_engine/sockaddr.cc +38 -0
  154. data/src/core/lib/gprpp/ref_counted.h +28 -14
  155. data/src/core/lib/gprpp/status_helper.cc +407 -0
  156. data/src/core/lib/gprpp/status_helper.h +180 -0
  157. data/src/core/lib/http/httpcli.cc +11 -11
  158. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  159. data/src/core/lib/http/parser.cc +16 -16
  160. data/src/core/lib/http/parser.h +4 -4
  161. data/src/core/lib/iomgr/buffer_list.cc +7 -9
  162. data/src/core/lib/iomgr/buffer_list.h +4 -5
  163. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  164. data/src/core/lib/iomgr/call_combiner.h +12 -14
  165. data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
  166. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  167. data/src/core/lib/iomgr/closure.h +7 -6
  168. data/src/core/lib/iomgr/combiner.cc +14 -12
  169. data/src/core/lib/iomgr/combiner.h +2 -2
  170. data/src/core/lib/iomgr/endpoint.cc +1 -1
  171. data/src/core/lib/iomgr/endpoint.h +2 -2
  172. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  173. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  174. data/src/core/lib/iomgr/error.cc +167 -61
  175. data/src/core/lib/iomgr/error.h +217 -106
  176. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  177. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  178. data/src/core/lib/iomgr/error_internal.h +5 -1
  179. data/src/core/lib/iomgr/ev_apple.cc +5 -5
  180. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  181. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  182. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  183. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  184. data/src/core/lib/iomgr/ev_posix.h +9 -9
  185. data/src/core/lib/iomgr/exec_ctx.cc +4 -4
  186. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  187. data/src/core/lib/iomgr/executor.cc +8 -8
  188. data/src/core/lib/iomgr/executor.h +2 -2
  189. data/src/core/lib/iomgr/iomgr.cc +1 -1
  190. data/src/core/lib/iomgr/iomgr.h +1 -1
  191. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  192. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  193. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  194. data/src/core/lib/iomgr/iomgr_posix.cc +1 -1
  195. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  196. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  197. data/src/core/lib/iomgr/load_file.cc +4 -4
  198. data/src/core/lib/iomgr/load_file.h +2 -2
  199. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  200. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  201. data/src/core/lib/iomgr/pollset.cc +5 -5
  202. data/src/core/lib/iomgr/pollset.h +9 -9
  203. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  204. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  205. data/src/core/lib/iomgr/port.h +1 -1
  206. data/src/core/lib/iomgr/python_util.h +1 -1
  207. data/src/core/lib/iomgr/resolve_address.cc +3 -3
  208. data/src/core/lib/iomgr/resolve_address.h +6 -6
  209. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  210. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  211. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  212. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  213. data/src/core/lib/iomgr/resource_quota.cc +11 -10
  214. data/src/core/lib/iomgr/socket_utils_common_posix.cc +22 -20
  215. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  216. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  217. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  218. data/src/core/lib/iomgr/tcp_client_posix.cc +15 -17
  219. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  220. data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
  221. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  222. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  223. data/src/core/lib/iomgr/tcp_posix.cc +36 -34
  224. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  225. data/src/core/lib/iomgr/tcp_server.h +12 -11
  226. data/src/core/lib/iomgr/tcp_server_custom.cc +23 -21
  227. data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
  228. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  229. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
  230. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  231. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  232. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  233. data/src/core/lib/iomgr/tcp_uv.cc +25 -23
  234. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  235. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  236. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  237. data/src/core/lib/iomgr/timer_custom.h +1 -1
  238. data/src/core/lib/iomgr/timer_generic.cc +6 -6
  239. data/src/core/lib/iomgr/udp_server.cc +21 -20
  240. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  241. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  242. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  243. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  244. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  245. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  246. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  247. data/src/core/lib/iomgr/work_serializer.h +17 -1
  248. data/src/core/lib/json/json.h +1 -1
  249. data/src/core/lib/json/json_reader.cc +4 -4
  250. data/src/core/lib/matchers/matchers.cc +39 -39
  251. data/src/core/lib/matchers/matchers.h +28 -28
  252. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  253. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  254. data/src/core/lib/security/credentials/credentials.h +2 -2
  255. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  256. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  257. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  258. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  259. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  260. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  261. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  262. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  263. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  264. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  265. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  266. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  267. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -9
  268. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  269. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  270. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  271. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  272. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  273. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  274. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  275. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  276. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  277. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  278. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  279. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  280. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
  281. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  282. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  283. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  284. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  285. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  286. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  287. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  288. data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -4
  289. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  290. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  291. data/src/core/lib/security/security_connector/ssl_utils.cc +22 -4
  292. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  293. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
  294. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  295. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  296. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  297. data/src/core/lib/security/transport/security_handshaker.cc +33 -32
  298. data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
  299. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  300. data/src/core/lib/security/transport/tsi_error.h +2 -1
  301. data/src/core/lib/security/util/json_util.cc +2 -2
  302. data/src/core/lib/security/util/json_util.h +1 -1
  303. data/src/core/lib/surface/call.cc +46 -45
  304. data/src/core/lib/surface/call.h +2 -2
  305. data/src/core/lib/surface/channel.cc +6 -6
  306. data/src/core/lib/surface/channel.h +3 -2
  307. data/src/core/lib/surface/channel_ping.cc +1 -1
  308. data/src/core/lib/surface/completion_queue.cc +46 -47
  309. data/src/core/lib/surface/completion_queue.h +2 -1
  310. data/src/core/lib/surface/lame_client.cc +11 -11
  311. data/src/core/lib/surface/lame_client.h +1 -1
  312. data/src/core/lib/surface/server.cc +28 -22
  313. data/src/core/lib/surface/server.h +16 -15
  314. data/src/core/lib/surface/validate_metadata.cc +7 -7
  315. data/src/core/lib/surface/validate_metadata.h +3 -2
  316. data/src/core/lib/surface/version.cc +4 -2
  317. data/src/core/lib/transport/byte_stream.cc +5 -5
  318. data/src/core/lib/transport/byte_stream.h +8 -8
  319. data/src/core/lib/transport/connectivity_state.cc +1 -1
  320. data/src/core/lib/transport/error_utils.cc +19 -8
  321. data/src/core/lib/transport/error_utils.h +11 -5
  322. data/src/core/lib/transport/metadata_batch.cc +37 -37
  323. data/src/core/lib/transport/metadata_batch.h +19 -18
  324. data/src/core/lib/transport/transport.cc +4 -3
  325. data/src/core/lib/transport/transport.h +4 -4
  326. data/src/core/lib/transport/transport_op_string.cc +5 -5
  327. data/src/core/tsi/alts/crypt/gsec.h +4 -0
  328. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
  329. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  330. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  331. data/src/core/tsi/ssl_transport_security.cc +32 -14
  332. data/src/core/tsi/ssl_transport_security.h +3 -4
  333. data/src/ruby/bin/math_services_pb.rb +1 -1
  334. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  335. data/src/ruby/lib/grpc/version.rb +1 -1
  336. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  337. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  338. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  339. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  340. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  341. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  342. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  343. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  344. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  345. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  346. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  347. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  348. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  349. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  350. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  351. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  352. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  353. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  354. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  355. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  356. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  357. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  358. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  359. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  360. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  361. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  362. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  363. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  364. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  365. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  366. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  367. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  368. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  369. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  370. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  371. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  372. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  373. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  374. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  375. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  376. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  377. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  378. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  379. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  380. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  381. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  382. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  383. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  384. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  385. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  386. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  387. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  388. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  389. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  390. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  391. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  392. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  393. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  394. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  395. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  396. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  397. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  398. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  399. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  400. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  401. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  402. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  403. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  404. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  405. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  406. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  407. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  408. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  409. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  410. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  411. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  412. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  413. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  414. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  415. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  416. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  417. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  418. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  419. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  420. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  421. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  422. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  423. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  424. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  425. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  426. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  427. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  428. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  429. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  430. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  431. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  432. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  433. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  434. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  435. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  436. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  437. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  438. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  439. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  440. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  441. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  442. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  443. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  444. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  445. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  446. data/third_party/boringssl-with-bazel/err_data.c +477 -461
  447. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  448. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -1
  449. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  450. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  451. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  452. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  453. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  454. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  455. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  456. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  457. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  458. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  459. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  460. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
  461. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  462. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  463. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
  464. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  465. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  466. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  467. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  468. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  469. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +43 -46
  470. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
  471. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  472. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  473. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  474. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  475. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  476. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  477. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  478. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  479. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  480. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
  481. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
  482. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
  483. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +103 -42
  484. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +58 -37
  485. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  486. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  487. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  488. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +1 -1
  489. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  490. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  491. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
  499. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  501. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  502. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  503. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  504. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  505. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  506. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  507. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
  508. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  509. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -0
  510. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
  511. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  512. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  513. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -0
  514. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  515. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -38
  516. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  517. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  518. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
  519. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  520. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  521. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +185 -17
  522. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  523. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +416 -121
  524. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -0
  525. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
  526. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
  527. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
  528. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +43 -12
  529. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +149 -8
  530. data/third_party/boringssl-with-bazel/src/ssl/internal.h +220 -46
  531. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
  532. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  533. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  534. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +74 -15
  535. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +98 -64
  536. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
  537. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +205 -100
  538. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  539. metadata +68 -45
  540. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  541. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  542. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  543. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
@@ -34,11 +34,11 @@
34
34
  #include "src/core/ext/filters/client_channel/lb_policy/subchannel_list.h"
35
35
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
36
36
  #include "src/core/ext/filters/client_channel/subchannel.h"
37
+ #include "src/core/lib/address_utils/sockaddr_utils.h"
37
38
  #include "src/core/lib/channel/channel_args.h"
38
39
  #include "src/core/lib/debug/trace.h"
39
40
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
40
41
  #include "src/core/lib/gprpp/sync.h"
41
- #include "src/core/lib/iomgr/sockaddr_utils.h"
42
42
  #include "src/core/lib/transport/connectivity_state.h"
43
43
  #include "src/core/lib/transport/error_utils.h"
44
44
  #include "src/core/lib/transport/static_metadata.h"
@@ -331,7 +331,7 @@ void RoundRobin::RoundRobinSubchannelList::
331
331
  absl::make_unique<QueuePicker>(p->Ref(DEBUG_LOCATION, "QueuePicker")));
332
332
  } else if (num_transient_failure_ == num_subchannels()) {
333
333
  /* 3) TRANSIENT_FAILURE */
334
- grpc_error* error =
334
+ grpc_error_handle error =
335
335
  grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
336
336
  "connections to all backends failing"),
337
337
  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
@@ -449,7 +449,7 @@ void RoundRobin::UpdateLocked(UpdateArgs args) {
449
449
  if (latest_pending_subchannel_list_->num_subchannels() == 0) {
450
450
  // If the new list is empty, immediately promote the new list to the
451
451
  // current list and transition to TRANSIENT_FAILURE.
452
- grpc_error* error =
452
+ grpc_error_handle error =
453
453
  grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING("Empty update"),
454
454
  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
455
455
  channel_control_helper()->UpdateState(
@@ -487,7 +487,7 @@ class RoundRobinFactory : public LoadBalancingPolicyFactory {
487
487
  const char* name() const override { return kRoundRobin; }
488
488
 
489
489
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
490
- const Json& /*json*/, grpc_error** /*error*/) const override {
490
+ const Json& /*json*/, grpc_error_handle* /*error*/) const override {
491
491
  return MakeRefCounted<RoundRobinConfig>();
492
492
  }
493
493
  };
@@ -33,13 +33,13 @@
33
33
  // that implementation should be hidden from the LB policy API.
34
34
  #include "src/core/ext/filters/client_channel/subchannel.h"
35
35
  #include "src/core/ext/filters/client_channel/subchannel_interface.h"
36
+ #include "src/core/lib/address_utils/sockaddr_utils.h"
36
37
  #include "src/core/lib/channel/channel_args.h"
37
38
  #include "src/core/lib/debug/trace.h"
38
39
  #include "src/core/lib/gprpp/orphanable.h"
39
40
  #include "src/core/lib/gprpp/ref_counted.h"
40
41
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
41
42
  #include "src/core/lib/iomgr/closure.h"
42
- #include "src/core/lib/iomgr/sockaddr_utils.h"
43
43
  #include "src/core/lib/transport/connectivity_state.h"
44
44
 
45
45
  // Code for maintaining a list of subchannels within an LB policy.
@@ -165,8 +165,8 @@ class WeightedTargetLb : public LoadBalancingPolicy {
165
165
  grpc_connectivity_state state, const absl::Status& status,
166
166
  std::unique_ptr<SubchannelPicker> picker);
167
167
 
168
- static void OnDelayedRemovalTimer(void* arg, grpc_error* error);
169
- void OnDelayedRemovalTimerLocked(grpc_error* error);
168
+ static void OnDelayedRemovalTimer(void* arg, grpc_error_handle error);
169
+ void OnDelayedRemovalTimerLocked(grpc_error_handle error);
170
170
 
171
171
  // The owning LB policy.
172
172
  RefCountedPtr<WeightedTargetLb> weighted_target_policy_;
@@ -387,7 +387,7 @@ void WeightedTargetLb::UpdateStateLocked() {
387
387
  absl::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker"));
388
388
  break;
389
389
  default:
390
- grpc_error* error = grpc_error_set_int(
390
+ grpc_error_handle error = grpc_error_set_int(
391
391
  GRPC_ERROR_CREATE_FROM_STATIC_STRING(
392
392
  "weighted_target: all children report state TRANSIENT_FAILURE"),
393
393
  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
@@ -564,8 +564,8 @@ void WeightedTargetLb::WeightedChild::DeactivateLocked() {
564
564
  &on_delayed_removal_timer_);
565
565
  }
566
566
 
567
- void WeightedTargetLb::WeightedChild::OnDelayedRemovalTimer(void* arg,
568
- grpc_error* error) {
567
+ void WeightedTargetLb::WeightedChild::OnDelayedRemovalTimer(
568
+ void* arg, grpc_error_handle error) {
569
569
  WeightedChild* self = static_cast<WeightedChild*>(arg);
570
570
  GRPC_ERROR_REF(error); // ref owned by lambda
571
571
  self->weighted_target_policy_->work_serializer()->Run(
@@ -574,7 +574,7 @@ void WeightedTargetLb::WeightedChild::OnDelayedRemovalTimer(void* arg,
574
574
  }
575
575
 
576
576
  void WeightedTargetLb::WeightedChild::OnDelayedRemovalTimerLocked(
577
- grpc_error* error) {
577
+ grpc_error_handle error) {
578
578
  if (error == GRPC_ERROR_NONE && delayed_removal_timer_callback_pending_ &&
579
579
  !shutdown_ && weight_ == 0) {
580
580
  delayed_removal_timer_callback_pending_ = false;
@@ -631,7 +631,7 @@ class WeightedTargetLbFactory : public LoadBalancingPolicyFactory {
631
631
  const char* name() const override { return kWeightedTarget; }
632
632
 
633
633
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
634
- const Json& json, grpc_error** error) const override {
634
+ const Json& json, grpc_error_handle* error) const override {
635
635
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
636
636
  if (json.type() == Json::Type::JSON_NULL) {
637
637
  // weighted_target was mentioned as a policy in the deprecated
@@ -642,7 +642,7 @@ class WeightedTargetLbFactory : public LoadBalancingPolicyFactory {
642
642
  "config instead.");
643
643
  return nullptr;
644
644
  }
645
- std::vector<grpc_error*> error_list;
645
+ std::vector<grpc_error_handle> error_list;
646
646
  // Weight map.
647
647
  WeightedTargetLbConfig::TargetMap target_map;
648
648
  auto it = json.object_value().find("targets");
@@ -655,14 +655,14 @@ class WeightedTargetLbFactory : public LoadBalancingPolicyFactory {
655
655
  } else {
656
656
  for (const auto& p : it->second.object_value()) {
657
657
  WeightedTargetLbConfig::ChildConfig child_config;
658
- std::vector<grpc_error*> child_errors =
658
+ std::vector<grpc_error_handle> child_errors =
659
659
  ParseChildConfig(p.second, &child_config);
660
660
  if (!child_errors.empty()) {
661
661
  // Can't use GRPC_ERROR_CREATE_FROM_VECTOR() here, because the error
662
662
  // string is not static in this case.
663
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
663
+ grpc_error_handle error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
664
664
  absl::StrCat("field:targets key:", p.first).c_str());
665
- for (grpc_error* child_error : child_errors) {
665
+ for (grpc_error_handle child_error : child_errors) {
666
666
  error = grpc_error_add_child(error, child_error);
667
667
  }
668
668
  error_list.push_back(error);
@@ -680,9 +680,9 @@ class WeightedTargetLbFactory : public LoadBalancingPolicyFactory {
680
680
  }
681
681
 
682
682
  private:
683
- static std::vector<grpc_error*> ParseChildConfig(
683
+ static std::vector<grpc_error_handle> ParseChildConfig(
684
684
  const Json& json, WeightedTargetLbConfig::ChildConfig* child_config) {
685
- std::vector<grpc_error*> error_list;
685
+ std::vector<grpc_error_handle> error_list;
686
686
  if (json.type() != Json::Type::OBJECT) {
687
687
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
688
688
  "value should be of type object"));
@@ -711,13 +711,13 @@ class WeightedTargetLbFactory : public LoadBalancingPolicyFactory {
711
711
  // Child policy.
712
712
  it = json.object_value().find("childPolicy");
713
713
  if (it != json.object_value().end()) {
714
- grpc_error* parse_error = GRPC_ERROR_NONE;
714
+ grpc_error_handle parse_error = GRPC_ERROR_NONE;
715
715
  child_config->config =
716
716
  LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(it->second,
717
717
  &parse_error);
718
718
  if (child_config->config == nullptr) {
719
719
  GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
720
- std::vector<grpc_error*> child_errors;
720
+ std::vector<grpc_error_handle> child_errors;
721
721
  child_errors.push_back(parse_error);
722
722
  error_list.push_back(
723
723
  GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
@@ -75,7 +75,7 @@ class CdsLb : public LoadBalancingPolicy {
75
75
  void OnClusterChanged(XdsApi::CdsUpdate cluster_data) override {
76
76
  new Notifier(parent_, name_, std::move(cluster_data));
77
77
  }
78
- void OnError(grpc_error* error) override {
78
+ void OnError(grpc_error_handle error) override {
79
79
  new Notifier(parent_, name_, error);
80
80
  }
81
81
  void OnResourceDoesNotExist() override { new Notifier(parent_, name_); }
@@ -86,14 +86,14 @@ class CdsLb : public LoadBalancingPolicy {
86
86
  Notifier(RefCountedPtr<CdsLb> parent, std::string name,
87
87
  XdsApi::CdsUpdate update);
88
88
  Notifier(RefCountedPtr<CdsLb> parent, std::string name,
89
- grpc_error* error);
89
+ grpc_error_handle error);
90
90
  explicit Notifier(RefCountedPtr<CdsLb> parent, std::string name);
91
91
 
92
92
  private:
93
93
  enum Type { kUpdate, kError, kDoesNotExist };
94
94
 
95
- static void RunInExecCtx(void* arg, grpc_error* error);
96
- void RunInWorkSerializer(grpc_error* error);
95
+ static void RunInExecCtx(void* arg, grpc_error_handle error);
96
+ void RunInWorkSerializer(grpc_error_handle error);
97
97
 
98
98
  RefCountedPtr<CdsLb> parent_;
99
99
  std::string name_;
@@ -139,10 +139,10 @@ class CdsLb : public LoadBalancingPolicy {
139
139
  std::set<std::string>* clusters_needed);
140
140
  void OnClusterChanged(const std::string& name,
141
141
  XdsApi::CdsUpdate cluster_data);
142
- void OnError(const std::string& name, grpc_error* error);
142
+ void OnError(const std::string& name, grpc_error_handle error);
143
143
  void OnResourceDoesNotExist(const std::string& name);
144
144
 
145
- grpc_error* UpdateXdsCertificateProvider(
145
+ grpc_error_handle UpdateXdsCertificateProvider(
146
146
  const std::string& cluster_name, const XdsApi::CdsUpdate& cluster_data);
147
147
 
148
148
  void CancelClusterDataWatch(absl::string_view cluster_name,
@@ -190,7 +190,8 @@ CdsLb::ClusterWatcher::Notifier::Notifier(RefCountedPtr<CdsLb> parent,
190
190
  }
191
191
 
192
192
  CdsLb::ClusterWatcher::Notifier::Notifier(RefCountedPtr<CdsLb> parent,
193
- std::string name, grpc_error* error)
193
+ std::string name,
194
+ grpc_error_handle error)
194
195
  : parent_(std::move(parent)), name_(std::move(name)), type_(kError) {
195
196
  GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
196
197
  ExecCtx::Run(DEBUG_LOCATION, &closure_, error);
@@ -204,14 +205,15 @@ CdsLb::ClusterWatcher::Notifier::Notifier(RefCountedPtr<CdsLb> parent,
204
205
  }
205
206
 
206
207
  void CdsLb::ClusterWatcher::Notifier::RunInExecCtx(void* arg,
207
- grpc_error* error) {
208
+ grpc_error_handle error) {
208
209
  Notifier* self = static_cast<Notifier*>(arg);
209
210
  GRPC_ERROR_REF(error);
210
211
  self->parent_->work_serializer()->Run(
211
212
  [self, error]() { self->RunInWorkSerializer(error); }, DEBUG_LOCATION);
212
213
  }
213
214
 
214
- void CdsLb::ClusterWatcher::Notifier::RunInWorkSerializer(grpc_error* error) {
215
+ void CdsLb::ClusterWatcher::Notifier::RunInWorkSerializer(
216
+ grpc_error_handle error) {
215
217
  switch (type_) {
216
218
  case kUpdate:
217
219
  parent_->OnClusterChanged(name_, std::move(update_));
@@ -434,7 +436,7 @@ void CdsLb::OnClusterChanged(const std::string& name,
434
436
  if (it == watchers_.end()) return;
435
437
  it->second.update = cluster_data;
436
438
  // Take care of integration with new certificate code.
437
- grpc_error* error = GRPC_ERROR_NONE;
439
+ grpc_error_handle error = GRPC_ERROR_NONE;
438
440
  error = UpdateXdsCertificateProvider(name, it->second.update.value());
439
441
  if (error != GRPC_ERROR_NONE) {
440
442
  return OnError(name, error);
@@ -541,9 +543,9 @@ void CdsLb::OnClusterChanged(const std::string& name,
541
543
  }
542
544
  }
543
545
 
544
- void CdsLb::OnError(const std::string& name, grpc_error* error) {
546
+ void CdsLb::OnError(const std::string& name, grpc_error_handle error) {
545
547
  gpr_log(GPR_ERROR, "[cdslb %p] xds error obtaining data for cluster %s: %s",
546
- this, name.c_str(), grpc_error_string(error));
548
+ this, name.c_str(), grpc_error_std_string(error).c_str());
547
549
  // Go into TRANSIENT_FAILURE if we have not yet created the child
548
550
  // policy (i.e., we have not yet received data from xds). Otherwise,
549
551
  // we keep running with the data we had previously.
@@ -561,7 +563,7 @@ void CdsLb::OnResourceDoesNotExist(const std::string& name) {
561
563
  "[cdslb %p] CDS resource for %s does not exist -- reporting "
562
564
  "TRANSIENT_FAILURE",
563
565
  this, name.c_str());
564
- grpc_error* error =
566
+ grpc_error_handle error =
565
567
  grpc_error_set_int(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
566
568
  absl::StrCat("CDS resource \"", config_->cluster(),
567
569
  "\" does not exist")
@@ -573,7 +575,7 @@ void CdsLb::OnResourceDoesNotExist(const std::string& name) {
573
575
  MaybeDestroyChildPolicyLocked();
574
576
  }
575
577
 
576
- grpc_error* CdsLb::UpdateXdsCertificateProvider(
578
+ grpc_error_handle CdsLb::UpdateXdsCertificateProvider(
577
579
  const std::string& cluster_name, const XdsApi::CdsUpdate& cluster_data) {
578
580
  // Early out if channel is not configured to use xds security.
579
581
  grpc_channel_credentials* channel_credentials =
@@ -599,10 +601,12 @@ grpc_error* CdsLb::UpdateXdsCertificateProvider(
599
601
  xds_client_->certificate_provider_store()
600
602
  .CreateOrGetCertificateProvider(root_provider_instance_name);
601
603
  if (new_root_provider == nullptr) {
602
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
603
- absl::StrCat("Certificate provider instance name: \"",
604
- root_provider_instance_name, "\" not recognized.")
605
- .c_str());
604
+ return grpc_error_set_int(
605
+ GRPC_ERROR_CREATE_FROM_COPIED_STRING(
606
+ absl::StrCat("Certificate provider instance name: \"",
607
+ root_provider_instance_name, "\" not recognized.")
608
+ .c_str()),
609
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
606
610
  }
607
611
  }
608
612
  if (root_certificate_provider_ != new_root_provider) {
@@ -637,10 +641,13 @@ grpc_error* CdsLb::UpdateXdsCertificateProvider(
637
641
  xds_client_->certificate_provider_store()
638
642
  .CreateOrGetCertificateProvider(identity_provider_instance_name);
639
643
  if (new_identity_provider == nullptr) {
640
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
641
- absl::StrCat("Certificate provider instance name: \"",
642
- identity_provider_instance_name, "\" not recognized.")
643
- .c_str());
644
+ return grpc_error_set_int(
645
+ GRPC_ERROR_CREATE_FROM_COPIED_STRING(
646
+ absl::StrCat("Certificate provider instance name: \"",
647
+ identity_provider_instance_name,
648
+ "\" not recognized.")
649
+ .c_str()),
650
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
644
651
  }
645
652
  }
646
653
  if (identity_certificate_provider_ != new_identity_provider) {
@@ -693,13 +700,12 @@ class CdsLbFactory : public LoadBalancingPolicyFactory {
693
700
  public:
694
701
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
695
702
  LoadBalancingPolicy::Args args) const override {
696
- grpc_error* error = GRPC_ERROR_NONE;
697
- RefCountedPtr<XdsClient> xds_client = XdsClient::GetOrCreate(&error);
698
- if (error != GRPC_ERROR_NONE) {
703
+ RefCountedPtr<XdsClient> xds_client =
704
+ XdsClient::GetFromChannelArgs(*args.args);
705
+ if (xds_client == nullptr) {
699
706
  gpr_log(GPR_ERROR,
700
- "cannot get XdsClient to instantiate cds LB policy: %s",
701
- grpc_error_string(error));
702
- GRPC_ERROR_UNREF(error);
707
+ "XdsClient not present in channel args -- cannot instantiate "
708
+ "cds LB policy");
703
709
  return nullptr;
704
710
  }
705
711
  return MakeOrphanable<CdsLb>(std::move(xds_client), std::move(args));
@@ -708,7 +714,7 @@ class CdsLbFactory : public LoadBalancingPolicyFactory {
708
714
  const char* name() const override { return kCds; }
709
715
 
710
716
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
711
- const Json& json, grpc_error** error) const override {
717
+ const Json& json, grpc_error_handle* error) const override {
712
718
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
713
719
  if (json.type() == Json::Type::JSON_NULL) {
714
720
  // xds was mentioned as a policy in the deprecated loadBalancingPolicy
@@ -718,7 +724,7 @@ class CdsLbFactory : public LoadBalancingPolicyFactory {
718
724
  "Please use loadBalancingConfig field of service config instead.");
719
725
  return nullptr;
720
726
  }
721
- std::vector<grpc_error*> error_list;
727
+ std::vector<grpc_error_handle> error_list;
722
728
  // cluster name.
723
729
  std::string cluster;
724
730
  auto it = json.object_value().find("cluster");
@@ -31,6 +31,7 @@
31
31
  #include "src/core/lib/channel/channel_args.h"
32
32
  #include "src/core/lib/gpr/env.h"
33
33
  #include "src/core/lib/gpr/string.h"
34
+ #include "src/core/lib/gprpp/atomic.h"
34
35
  #include "src/core/lib/gprpp/orphanable.h"
35
36
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
36
37
  #include "src/core/lib/gprpp/sync.h"
@@ -56,6 +57,7 @@ class CircuitBreakerCallCounterMap {
56
57
  explicit CallCounter(Key key) : key_(std::move(key)) {}
57
58
  ~CallCounter() override;
58
59
 
60
+ uint32_t Load() { return concurrent_requests_.Load(MemoryOrder::SEQ_CST); }
59
61
  uint32_t Increment() { return concurrent_requests_.FetchAdd(1); }
60
62
  void Decrement() { concurrent_requests_.FetchSub(1); }
61
63
 
@@ -69,7 +71,7 @@ class CircuitBreakerCallCounterMap {
69
71
 
70
72
  private:
71
73
  Mutex mu_;
72
- std::map<Key, CallCounter*> map_;
74
+ std::map<Key, CallCounter*> map_ ABSL_GUARDED_BY(mu_);
73
75
  };
74
76
 
75
77
  CircuitBreakerCallCounterMap* g_call_counter_map = nullptr;
@@ -287,15 +289,15 @@ LoadBalancingPolicy::PickResult XdsClusterImplLb::Picker::Pick(
287
289
  return result;
288
290
  }
289
291
  // Handle circuit breaking.
290
- uint32_t current = call_counter_->Increment();
292
+ uint32_t current = call_counter_->Load();
291
293
  // Check and see if we exceeded the max concurrent requests count.
292
294
  if (current >= max_concurrent_requests_) {
293
- call_counter_->Decrement();
294
295
  if (drop_stats_ != nullptr) drop_stats_->AddUncategorizedDrops();
295
296
  PickResult result;
296
297
  result.type = PickResult::PICK_COMPLETE;
297
298
  return result;
298
299
  }
300
+ call_counter_->Increment();
299
301
  // If we're not dropping the call, we should always have a child picker.
300
302
  if (picker_ == nullptr) { // Should never happen.
301
303
  PickResult result;
@@ -329,7 +331,7 @@ LoadBalancingPolicy::PickResult XdsClusterImplLb::Picker::Pick(
329
331
  // Note: This callback does not run in either the control plane
330
332
  // work serializer or in the data plane mutex.
331
333
  [locality_stats, original_recv_trailing_metadata_ready, call_counter](
332
- grpc_error* error, MetadataInterface* metadata,
334
+ grpc_error_handle error, MetadataInterface* metadata,
333
335
  CallState* call_state) {
334
336
  // Record call completion for load reporting.
335
337
  if (locality_stats != nullptr) {
@@ -594,14 +596,12 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
594
596
  public:
595
597
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
596
598
  LoadBalancingPolicy::Args args) const override {
597
- grpc_error* error = GRPC_ERROR_NONE;
598
- RefCountedPtr<XdsClient> xds_client = XdsClient::GetOrCreate(&error);
599
- if (error != GRPC_ERROR_NONE) {
600
- gpr_log(
601
- GPR_ERROR,
602
- "cannot get XdsClient to instantiate xds_cluster_impl LB policy: %s",
603
- grpc_error_string(error));
604
- GRPC_ERROR_UNREF(error);
599
+ RefCountedPtr<XdsClient> xds_client =
600
+ XdsClient::GetFromChannelArgs(*args.args);
601
+ if (xds_client == nullptr) {
602
+ gpr_log(GPR_ERROR,
603
+ "XdsClient not present in channel args -- cannot instantiate "
604
+ "xds_cluster_impl LB policy");
605
605
  return nullptr;
606
606
  }
607
607
  return MakeOrphanable<XdsClusterImplLb>(std::move(xds_client),
@@ -611,7 +611,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
611
611
  const char* name() const override { return kXdsClusterImpl; }
612
612
 
613
613
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
614
- const Json& json, grpc_error** error) const override {
614
+ const Json& json, grpc_error_handle* error) const override {
615
615
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
616
616
  if (json.type() == Json::Type::JSON_NULL) {
617
617
  // This policy was configured in the deprecated loadBalancingPolicy
@@ -622,7 +622,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
622
622
  "config instead.");
623
623
  return nullptr;
624
624
  }
625
- std::vector<grpc_error*> error_list;
625
+ std::vector<grpc_error_handle> error_list;
626
626
  // Child policy.
627
627
  RefCountedPtr<LoadBalancingPolicy::Config> child_policy;
628
628
  auto it = json.object_value().find("childPolicy");
@@ -630,12 +630,12 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
630
630
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
631
631
  "field:childPolicy error:required field missing"));
632
632
  } else {
633
- grpc_error* parse_error = GRPC_ERROR_NONE;
633
+ grpc_error_handle parse_error = GRPC_ERROR_NONE;
634
634
  child_policy = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
635
635
  it->second, &parse_error);
636
636
  if (child_policy == nullptr) {
637
637
  GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
638
- std::vector<grpc_error*> child_errors;
638
+ std::vector<grpc_error_handle> child_errors;
639
639
  child_errors.push_back(parse_error);
640
640
  error_list.push_back(
641
641
  GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
@@ -694,7 +694,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
694
694
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
695
695
  "field:dropCategories error:required field missing"));
696
696
  } else {
697
- std::vector<grpc_error*> child_errors =
697
+ std::vector<grpc_error_handle> child_errors =
698
698
  ParseDropCategories(it->second, drop_config.get());
699
699
  if (!child_errors.empty()) {
700
700
  error_list.push_back(GRPC_ERROR_CREATE_FROM_VECTOR(
@@ -713,9 +713,9 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
713
713
  }
714
714
 
715
715
  private:
716
- static std::vector<grpc_error*> ParseDropCategories(
716
+ static std::vector<grpc_error_handle> ParseDropCategories(
717
717
  const Json& json, XdsApi::EdsUpdate::DropConfig* drop_config) {
718
- std::vector<grpc_error*> error_list;
718
+ std::vector<grpc_error_handle> error_list;
719
719
  if (json.type() != Json::Type::ARRAY) {
720
720
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
721
721
  "dropCategories field is not an array"));
@@ -723,10 +723,10 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
723
723
  }
724
724
  for (size_t i = 0; i < json.array_value().size(); ++i) {
725
725
  const Json& entry = json.array_value()[i];
726
- std::vector<grpc_error*> child_errors =
726
+ std::vector<grpc_error_handle> child_errors =
727
727
  ParseDropCategory(entry, drop_config);
728
728
  if (!child_errors.empty()) {
729
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
729
+ grpc_error_handle error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
730
730
  absl::StrCat("errors parsing index ", i).c_str());
731
731
  for (size_t i = 0; i < child_errors.size(); ++i) {
732
732
  error = grpc_error_add_child(error, child_errors[i]);
@@ -737,9 +737,9 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
737
737
  return error_list;
738
738
  }
739
739
 
740
- static std::vector<grpc_error*> ParseDropCategory(
740
+ static std::vector<grpc_error_handle> ParseDropCategory(
741
741
  const Json& json, XdsApi::EdsUpdate::DropConfig* drop_config) {
742
- std::vector<grpc_error*> error_list;
742
+ std::vector<grpc_error_handle> error_list;
743
743
  if (json.type() != Json::Type::OBJECT) {
744
744
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
745
745
  "dropCategories entry is not an object"));