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
@@ -24,6 +24,8 @@
24
24
  #include <string>
25
25
  #include <utility>
26
26
 
27
+ #include "absl/status/status.h"
28
+
27
29
  #include <grpc/support/alloc.h>
28
30
  #include <grpc/support/log.h>
29
31
 
@@ -63,7 +65,7 @@ DynamicFilters::Call::Call(Args args, grpc_error_handle* error)
63
65
  };
64
66
  *error = grpc_call_stack_init(channel_stack_->channel_stack_, 1, Destroy,
65
67
  this, &call_args);
66
- if (GPR_UNLIKELY(*error != GRPC_ERROR_NONE)) {
68
+ if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(*error))) {
67
69
  gpr_log(GPR_ERROR, "error: %s", grpc_error_std_string(*error).c_str());
68
70
  return;
69
71
  }
@@ -152,7 +154,7 @@ std::pair<grpc_channel_stack*, grpc_error_handle> CreateChannelStack(
152
154
  grpc_error_handle error = grpc_channel_stack_init(
153
155
  /*initial_refs=*/1, DestroyChannelStack, channel_stack, filters.data(),
154
156
  filters.size(), args, "DynamicFilters", channel_stack);
155
- if (error != GRPC_ERROR_NONE) {
157
+ if (!GRPC_ERROR_IS_NONE(error)) {
156
158
  gpr_log(GPR_ERROR, "error initializing client internal stack: %s",
157
159
  grpc_error_std_string(error).c_str());
158
160
  grpc_channel_stack_destroy(channel_stack);
@@ -169,7 +171,7 @@ RefCountedPtr<DynamicFilters> DynamicFilters::Create(
169
171
  std::vector<const grpc_channel_filter*> filters) {
170
172
  // Attempt to create channel stack from requested filters.
171
173
  auto p = CreateChannelStack(args, std::move(filters));
172
- if (p.second != GRPC_ERROR_NONE) {
174
+ if (!GRPC_ERROR_IS_NONE(p.second)) {
173
175
  // Channel stack creation failed with requested filters.
174
176
  // Create with lame filter instead.
175
177
  grpc_error_handle error = p.second;
@@ -178,7 +180,7 @@ RefCountedPtr<DynamicFilters> DynamicFilters::Create(
178
180
  grpc_channel_args_copy_and_add(args, &error_arg, 1);
179
181
  GRPC_ERROR_UNREF(error);
180
182
  p = CreateChannelStack(new_args, {&LameClientFilter::kFilter});
181
- GPR_ASSERT(p.second == GRPC_ERROR_NONE);
183
+ GPR_ASSERT(GRPC_ERROR_IS_NONE(p.second));
182
184
  grpc_channel_args_destroy(new_args);
183
185
  }
184
186
  return MakeRefCounted<DynamicFilters>(p.first);
@@ -24,7 +24,7 @@
24
24
  #include <grpc/impl/codegen/grpc_types.h>
25
25
  #include <grpc/slice.h>
26
26
 
27
- #include "src/core/lib/channel/channel_stack.h"
27
+ #include "src/core/lib/channel/channel_fwd.h"
28
28
  #include "src/core/lib/channel/context.h"
29
29
  #include "src/core/lib/gpr/time_precise.h"
30
30
  #include "src/core/lib/gprpp/debug_location.h"
@@ -20,9 +20,9 @@
20
20
 
21
21
  #include <stddef.h>
22
22
 
23
+ #include <algorithm>
23
24
  #include <utility>
24
25
 
25
- #include "absl/container/inlined_vector.h"
26
26
  #include "absl/memory/memory.h"
27
27
  #include "absl/strings/str_cat.h"
28
28
  #include "absl/strings/str_join.h"
@@ -61,7 +61,7 @@ struct call_data {
61
61
 
62
62
  static void on_complete_for_send(void* arg, grpc_error_handle error) {
63
63
  call_data* calld = static_cast<call_data*>(arg);
64
- if (error == GRPC_ERROR_NONE) {
64
+ if (GRPC_ERROR_IS_NONE(error)) {
65
65
  calld->send_initial_metadata_succeeded = true;
66
66
  }
67
67
  grpc_core::Closure::Run(DEBUG_LOCATION, calld->original_on_complete_for_send,
@@ -70,7 +70,7 @@ static void on_complete_for_send(void* arg, grpc_error_handle error) {
70
70
 
71
71
  static void recv_initial_metadata_ready(void* arg, grpc_error_handle error) {
72
72
  call_data* calld = static_cast<call_data*>(arg);
73
- if (error == GRPC_ERROR_NONE) {
73
+ if (GRPC_ERROR_IS_NONE(error)) {
74
74
  calld->recv_initial_metadata_succeeded = true;
75
75
  }
76
76
  grpc_core::Closure::Run(DEBUG_LOCATION,
@@ -21,6 +21,7 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include "src/core/lib/channel/channel_fwd.h"
24
25
  #include "src/core/lib/channel/channel_stack.h"
25
26
 
26
27
  extern const grpc_channel_filter grpc_client_load_reporting_filter;
@@ -53,6 +53,8 @@
53
53
 
54
54
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h"
55
55
 
56
+ #include <grpc/event_engine/event_engine.h>
57
+
56
58
  // IWYU pragma: no_include <sys/socket.h>
57
59
 
58
60
  #include <inttypes.h>
@@ -109,6 +111,7 @@
109
111
  #include "src/core/lib/channel/channelz.h"
110
112
  #include "src/core/lib/config/core_configuration.h"
111
113
  #include "src/core/lib/debug/trace.h"
114
+ #include "src/core/lib/event_engine/event_engine_factory.h"
112
115
  #include "src/core/lib/gpr/string.h"
113
116
  #include "src/core/lib/gpr/useful.h"
114
117
  #include "src/core/lib/gprpp/debug_location.h"
@@ -155,6 +158,9 @@ const char kGrpcLbAddressAttributeKey[] = "grpclb";
155
158
 
156
159
  namespace {
157
160
 
161
+ using ::grpc_event_engine::experimental::EventEngine;
162
+ using ::grpc_event_engine::experimental::GetDefaultEventEngine;
163
+
158
164
  constexpr char kGrpclb[] = "grpclb";
159
165
 
160
166
  class GrpcLbConfig : public LoadBalancingPolicy::Config {
@@ -212,13 +218,15 @@ class GrpcLb : public LoadBalancingPolicy {
212
218
  void ScheduleNextClientLoadReportLocked();
213
219
  void SendClientLoadReportLocked();
214
220
 
215
- static void MaybeSendClientLoadReport(void* arg, grpc_error_handle error);
221
+ // EventEngine callbacks
222
+ void MaybeSendClientLoadReport();
223
+ void MaybeSendClientLoadReportLocked();
224
+
216
225
  static void ClientLoadReportDone(void* arg, grpc_error_handle error);
217
226
  static void OnInitialRequestSent(void* arg, grpc_error_handle error);
218
227
  static void OnBalancerMessageReceived(void* arg, grpc_error_handle error);
219
228
  static void OnBalancerStatusReceived(void* arg, grpc_error_handle error);
220
229
 
221
- void MaybeSendClientLoadReportLocked(grpc_error_handle error);
222
230
  void ClientLoadReportDoneLocked(grpc_error_handle error);
223
231
  void OnInitialRequestSentLocked();
224
232
  void OnBalancerMessageReceivedLocked();
@@ -253,13 +261,11 @@ class GrpcLb : public LoadBalancingPolicy {
253
261
  // Created after the first serverlist is received.
254
262
  RefCountedPtr<GrpcLbClientStats> client_stats_;
255
263
  Duration client_stats_report_interval_;
256
- grpc_timer client_load_report_timer_;
257
- bool client_load_report_timer_callback_pending_ = false;
264
+ absl::optional<EventEngine::TaskHandle> client_load_report_handle_;
258
265
  bool last_client_load_report_counters_were_zero_ = false;
259
266
  bool client_load_report_is_due_ = false;
260
- // The closure used for either the load report timer or the callback for
261
- // completion of sending the load report.
262
- grpc_closure client_load_report_closure_;
267
+ // The closure used for the completion of sending the load report.
268
+ grpc_closure client_load_report_done_closure_;
263
269
  };
264
270
 
265
271
  class SubchannelWrapper : public DelegatingSubchannel {
@@ -374,6 +380,39 @@ class GrpcLb : public LoadBalancingPolicy {
374
380
  PickResult Pick(PickArgs args) override;
375
381
 
376
382
  private:
383
+ // A subchannel call tracker that unrefs the GrpcLbClientStats object
384
+ // in the case where the subchannel call is never actually started,
385
+ // since the client load reporting filter will not be able to do it
386
+ // in that case.
387
+ class SubchannelCallTracker : public SubchannelCallTrackerInterface {
388
+ public:
389
+ SubchannelCallTracker(
390
+ RefCountedPtr<GrpcLbClientStats> client_stats,
391
+ std::unique_ptr<SubchannelCallTrackerInterface> original_call_tracker)
392
+ : client_stats_(std::move(client_stats)),
393
+ original_call_tracker_(std::move(original_call_tracker)) {}
394
+
395
+ void Start() override {
396
+ if (original_call_tracker_ != nullptr) {
397
+ original_call_tracker_->Start();
398
+ }
399
+ // If we're actually starting the subchannel call, then the
400
+ // client load reporting filter will take ownership of the ref
401
+ // passed down to it via metadata.
402
+ client_stats_.release();
403
+ }
404
+
405
+ void Finish(FinishArgs args) override {
406
+ if (original_call_tracker_ != nullptr) {
407
+ original_call_tracker_->Finish(args);
408
+ }
409
+ }
410
+
411
+ private:
412
+ RefCountedPtr<GrpcLbClientStats> client_stats_;
413
+ std::unique_ptr<SubchannelCallTrackerInterface> original_call_tracker_;
414
+ };
415
+
377
416
  // Serverlist to be used for determining drops.
378
417
  RefCountedPtr<Serverlist> serverlist_;
379
418
 
@@ -686,7 +725,10 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
686
725
  // client_load_reporting filter.
687
726
  GrpcLbClientStats* client_stats = subchannel_wrapper->client_stats();
688
727
  if (client_stats != nullptr) {
689
- client_stats->Ref().release(); // Ref passed via metadata.
728
+ complete_pick->subchannel_call_tracker =
729
+ absl::make_unique<SubchannelCallTracker>(
730
+ client_stats->Ref(),
731
+ std::move(complete_pick->subchannel_call_tracker));
690
732
  // The metadata value is a hack: we pretend the pointer points to
691
733
  // a string and rely on the client_load_reporting filter to know
692
734
  // how to interpret it.
@@ -823,7 +865,7 @@ GrpcLb::BalancerCallState::BalancerCallState(
823
865
  OnBalancerMessageReceived, this, grpc_schedule_on_exec_ctx);
824
866
  GRPC_CLOSURE_INIT(&lb_on_balancer_status_received_, OnBalancerStatusReceived,
825
867
  this, grpc_schedule_on_exec_ctx);
826
- GRPC_CLOSURE_INIT(&client_load_report_closure_, MaybeSendClientLoadReport,
868
+ GRPC_CLOSURE_INIT(&client_load_report_done_closure_, ClientLoadReportDone,
827
869
  this, grpc_schedule_on_exec_ctx);
828
870
  const Timestamp deadline =
829
871
  grpclb_policy()->lb_call_timeout_ == Duration::Zero()
@@ -866,8 +908,9 @@ void GrpcLb::BalancerCallState::Orphan() {
866
908
  // up. Otherwise, we are here because grpclb_policy has to orphan a failed
867
909
  // call, then the following cancellation will be a no-op.
868
910
  grpc_call_cancel_internal(lb_call_);
869
- if (client_load_report_timer_callback_pending_) {
870
- grpc_timer_cancel(&client_load_report_timer_);
911
+ if (client_load_report_handle_.has_value() &&
912
+ GetDefaultEventEngine()->Cancel(client_load_report_handle_.value())) {
913
+ Unref(DEBUG_LOCATION, "client_load_report cancelled");
871
914
  }
872
915
  // Note that the initial ref is hold by lb_on_balancer_status_received_
873
916
  // instead of the caller of this function. So the corresponding unref happens
@@ -951,34 +994,23 @@ void GrpcLb::BalancerCallState::StartQuery() {
951
994
  }
952
995
 
953
996
  void GrpcLb::BalancerCallState::ScheduleNextClientLoadReportLocked() {
954
- // InvalidateNow to avoid getting stuck re-initializing this timer
955
- // in a loop while draining the currently-held WorkSerializer.
956
- // Also see https://github.com/grpc/grpc/issues/26079.
957
- ExecCtx::Get()->InvalidateNow();
958
- const Timestamp next_client_load_report_time =
959
- ExecCtx::Get()->Now() + client_stats_report_interval_;
960
- GRPC_CLOSURE_INIT(&client_load_report_closure_, MaybeSendClientLoadReport,
961
- this, grpc_schedule_on_exec_ctx);
962
- grpc_timer_init(&client_load_report_timer_, next_client_load_report_time,
963
- &client_load_report_closure_);
964
- client_load_report_timer_callback_pending_ = true;
997
+ client_load_report_handle_ =
998
+ GetDefaultEventEngine()->RunAfter(client_stats_report_interval_, [this] {
999
+ ApplicationCallbackExecCtx callback_exec_ctx;
1000
+ ExecCtx exec_ctx;
1001
+ MaybeSendClientLoadReport();
1002
+ });
965
1003
  }
966
1004
 
967
- void GrpcLb::BalancerCallState::MaybeSendClientLoadReport(
968
- void* arg, grpc_error_handle error) {
969
- BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
970
- (void)GRPC_ERROR_REF(error); // ref owned by lambda
971
- lb_calld->grpclb_policy()->work_serializer()->Run(
972
- [lb_calld, error]() { lb_calld->MaybeSendClientLoadReportLocked(error); },
973
- DEBUG_LOCATION);
1005
+ void GrpcLb::BalancerCallState::MaybeSendClientLoadReport() {
1006
+ grpclb_policy()->work_serializer()->Run(
1007
+ [this] { MaybeSendClientLoadReportLocked(); }, DEBUG_LOCATION);
974
1008
  }
975
1009
 
976
- void GrpcLb::BalancerCallState::MaybeSendClientLoadReportLocked(
977
- grpc_error_handle error) {
978
- client_load_report_timer_callback_pending_ = false;
979
- if (error != GRPC_ERROR_NONE || this != grpclb_policy()->lb_calld_.get()) {
1010
+ void GrpcLb::BalancerCallState::MaybeSendClientLoadReportLocked() {
1011
+ client_load_report_handle_.reset();
1012
+ if (this != grpclb_policy()->lb_calld_.get()) {
980
1013
  Unref(DEBUG_LOCATION, "client_load_report");
981
- GRPC_ERROR_UNREF(error);
982
1014
  return;
983
1015
  }
984
1016
  // If we've already sent the initial request, then we can go ahead and send
@@ -1031,10 +1063,8 @@ void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
1031
1063
  memset(&op, 0, sizeof(op));
1032
1064
  op.op = GRPC_OP_SEND_MESSAGE;
1033
1065
  op.data.send_message.send_message = send_message_payload_;
1034
- GRPC_CLOSURE_INIT(&client_load_report_closure_, ClientLoadReportDone, this,
1035
- grpc_schedule_on_exec_ctx);
1036
1066
  grpc_call_error call_error = grpc_call_start_batch_and_execute(
1037
- lb_call_, &op, 1, &client_load_report_closure_);
1067
+ lb_call_, &op, 1, &client_load_report_done_closure_);
1038
1068
  if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
1039
1069
  gpr_log(GPR_ERROR,
1040
1070
  "[grpclb %p] lb_calld=%p call_error=%d sending client load report",
@@ -1056,7 +1086,7 @@ void GrpcLb::BalancerCallState::ClientLoadReportDoneLocked(
1056
1086
  grpc_error_handle error) {
1057
1087
  grpc_byte_buffer_destroy(send_message_payload_);
1058
1088
  send_message_payload_ = nullptr;
1059
- if (error != GRPC_ERROR_NONE || this != grpclb_policy()->lb_calld_.get()) {
1089
+ if (!GRPC_ERROR_IS_NONE(error) || this != grpclb_policy()->lb_calld_.get()) {
1060
1090
  Unref(DEBUG_LOCATION, "client_load_report");
1061
1091
  GRPC_ERROR_UNREF(error);
1062
1092
  return;
@@ -1642,7 +1672,7 @@ void GrpcLb::OnBalancerCallRetryTimer(void* arg, grpc_error_handle error) {
1642
1672
 
1643
1673
  void GrpcLb::OnBalancerCallRetryTimerLocked(grpc_error_handle error) {
1644
1674
  retry_timer_callback_pending_ = false;
1645
- if (!shutting_down_ && error == GRPC_ERROR_NONE && lb_calld_ == nullptr) {
1675
+ if (!shutting_down_ && GRPC_ERROR_IS_NONE(error) && lb_calld_ == nullptr) {
1646
1676
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1647
1677
  gpr_log(GPR_INFO, "[grpclb %p] Restarting call to LB server", this);
1648
1678
  }
@@ -1686,7 +1716,7 @@ void GrpcLb::OnFallbackTimerLocked(grpc_error_handle error) {
1686
1716
  // If we receive a serverlist after the timer fires but before this callback
1687
1717
  // actually runs, don't fall back.
1688
1718
  if (fallback_at_startup_checks_pending_ && !shutting_down_ &&
1689
- error == GRPC_ERROR_NONE) {
1719
+ GRPC_ERROR_IS_NONE(error)) {
1690
1720
  gpr_log(GPR_INFO,
1691
1721
  "[grpclb %p] No response from balancer after fallback timeout; "
1692
1722
  "entering fallback mode",
@@ -1807,7 +1837,7 @@ void GrpcLb::OnSubchannelCacheTimer(void* arg, grpc_error_handle error) {
1807
1837
  }
1808
1838
 
1809
1839
  void GrpcLb::OnSubchannelCacheTimerLocked(grpc_error_handle error) {
1810
- if (subchannel_cache_timer_pending_ && error == GRPC_ERROR_NONE) {
1840
+ if (subchannel_cache_timer_pending_ && GRPC_ERROR_IS_NONE(error)) {
1811
1841
  auto it = cached_subchannels_.begin();
1812
1842
  if (it != cached_subchannels_.end()) {
1813
1843
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
@@ -1842,7 +1872,7 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory {
1842
1872
 
1843
1873
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
1844
1874
  const Json& json, grpc_error_handle* error) const override {
1845
- GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
1875
+ GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
1846
1876
  if (json.type() == Json::Type::JSON_NULL) {
1847
1877
  return MakeRefCounted<GrpcLbConfig>(nullptr, "");
1848
1878
  }
@@ -1873,7 +1903,7 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory {
1873
1903
  RefCountedPtr<LoadBalancingPolicy::Config> child_policy_config =
1874
1904
  LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1875
1905
  *child_policy_config_json, &parse_error);
1876
- if (parse_error != GRPC_ERROR_NONE) {
1906
+ if (!GRPC_ERROR_IS_NONE(parse_error)) {
1877
1907
  std::vector<grpc_error_handle> child_errors;
1878
1908
  child_errors.push_back(parse_error);
1879
1909
  error_list.push_back(
@@ -20,7 +20,7 @@
20
20
 
21
21
  #include <stddef.h>
22
22
 
23
- #include "absl/container/inlined_vector.h"
23
+ #include <memory>
24
24
 
25
25
  #include "src/core/lib/channel/channel_args.h"
26
26
  #include "src/core/lib/gpr/useful.h"
@@ -295,7 +295,6 @@ OrcaProducer::OrcaProducer(RefCountedPtr<Subchannel> subchannel)
295
295
  auto connectivity_watcher = MakeRefCounted<ConnectivityWatcher>(WeakRef());
296
296
  connectivity_watcher_ = connectivity_watcher.get();
297
297
  subchannel_->WatchConnectivityState(
298
- connected_subchannel_ == nullptr ? GRPC_CHANNEL_IDLE : GRPC_CHANNEL_READY,
299
298
  /*health_check_service_name=*/absl::nullopt,
300
299
  std::move(connectivity_watcher));
301
300
  }
@@ -31,7 +31,6 @@
31
31
  #include <utility>
32
32
  #include <vector>
33
33
 
34
- #include "absl/container/inlined_vector.h"
35
34
  #include "absl/memory/memory.h"
36
35
  #include "absl/random/random.h"
37
36
  #include "absl/status/status.h"
@@ -49,6 +48,7 @@
49
48
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
50
49
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
51
50
  #include "src/core/ext/filters/client_channel/subchannel_interface.h"
51
+ #include "src/core/lib/address_utils/sockaddr_utils.h"
52
52
  #include "src/core/lib/channel/channel_args.h"
53
53
  #include "src/core/lib/debug/trace.h"
54
54
  #include "src/core/lib/gpr/env.h"
@@ -154,10 +154,7 @@ class OutlierDetectionLb : public LoadBalancingPolicy {
154
154
 
155
155
  void Uneject();
156
156
 
157
- grpc_connectivity_state CheckConnectivityState() override;
158
-
159
157
  void WatchConnectivityState(
160
- grpc_connectivity_state initial_state,
161
158
  std::unique_ptr<ConnectivityStateWatcherInterface> watcher) override;
162
159
 
163
160
  void CancelConnectivityStateWatch(
@@ -174,30 +171,39 @@ class OutlierDetectionLb : public LoadBalancingPolicy {
174
171
  WatcherWrapper(std::unique_ptr<
175
172
  SubchannelInterface::ConnectivityStateWatcherInterface>
176
173
  watcher,
177
- grpc_connectivity_state initial_state, bool ejected)
178
- : watcher_(std::move(watcher)),
179
- last_seen_state_(initial_state),
180
- ejected_(ejected) {}
174
+ bool ejected)
175
+ : watcher_(std::move(watcher)), ejected_(ejected) {}
181
176
 
182
177
  void Eject() {
183
178
  ejected_ = true;
184
- if (last_seen_state_ != GRPC_CHANNEL_TRANSIENT_FAILURE) {
185
- watcher_->OnConnectivityStateChange(GRPC_CHANNEL_TRANSIENT_FAILURE);
179
+ if (last_seen_state_.has_value()) {
180
+ watcher_->OnConnectivityStateChange(
181
+ GRPC_CHANNEL_TRANSIENT_FAILURE,
182
+ absl::UnavailableError(
183
+ "subchannel ejected by outlier detection"));
186
184
  }
187
185
  }
188
186
 
189
187
  void Uneject() {
190
188
  ejected_ = false;
191
- if (last_seen_state_ != GRPC_CHANNEL_TRANSIENT_FAILURE) {
192
- watcher_->OnConnectivityStateChange(last_seen_state_);
189
+ if (last_seen_state_.has_value()) {
190
+ watcher_->OnConnectivityStateChange(*last_seen_state_,
191
+ last_seen_status_);
193
192
  }
194
193
  }
195
194
 
196
- void OnConnectivityStateChange(
197
- grpc_connectivity_state new_state) override {
195
+ void OnConnectivityStateChange(grpc_connectivity_state new_state,
196
+ absl::Status status) override {
197
+ const bool send_update = !last_seen_state_.has_value() || !ejected_;
198
198
  last_seen_state_ = new_state;
199
- if (!ejected_) {
200
- watcher_->OnConnectivityStateChange(new_state);
199
+ last_seen_status_ = status;
200
+ if (send_update) {
201
+ if (ejected_) {
202
+ new_state = GRPC_CHANNEL_TRANSIENT_FAILURE;
203
+ status = absl::UnavailableError(
204
+ "subchannel ejected by outlier detection");
205
+ }
206
+ watcher_->OnConnectivityStateChange(new_state, status);
201
207
  }
202
208
  }
203
209
 
@@ -208,7 +214,8 @@ class OutlierDetectionLb : public LoadBalancingPolicy {
208
214
  private:
209
215
  std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
210
216
  watcher_;
211
- grpc_connectivity_state last_seen_state_;
217
+ absl::optional<grpc_connectivity_state> last_seen_state_;
218
+ absl::Status last_seen_status_;
212
219
  bool ejected_;
213
220
  };
214
221
 
@@ -418,21 +425,13 @@ void OutlierDetectionLb::SubchannelWrapper::Uneject() {
418
425
  }
419
426
  }
420
427
 
421
- grpc_connectivity_state
422
- OutlierDetectionLb::SubchannelWrapper::CheckConnectivityState() {
423
- if (ejected_) return GRPC_CHANNEL_TRANSIENT_FAILURE;
424
- return wrapped_subchannel()->CheckConnectivityState();
425
- }
426
-
427
428
  void OutlierDetectionLb::SubchannelWrapper::WatchConnectivityState(
428
- grpc_connectivity_state initial_state,
429
429
  std::unique_ptr<ConnectivityStateWatcherInterface> watcher) {
430
430
  ConnectivityStateWatcherInterface* watcher_ptr = watcher.get();
431
- auto watcher_wrapper = absl::make_unique<WatcherWrapper>(
432
- std::move(watcher), initial_state, ejected_);
431
+ auto watcher_wrapper =
432
+ absl::make_unique<WatcherWrapper>(std::move(watcher), ejected_);
433
433
  watchers_.emplace(watcher_ptr, watcher_wrapper.get());
434
- wrapped_subchannel()->WatchConnectivityState(initial_state,
435
- std::move(watcher_wrapper));
434
+ wrapped_subchannel()->WatchConnectivityState(std::move(watcher_wrapper));
436
435
  }
437
436
 
438
437
  void OutlierDetectionLb::SubchannelWrapper::CancelConnectivityStateWatch(
@@ -556,10 +555,9 @@ OutlierDetectionLb::~OutlierDetectionLb() {
556
555
 
557
556
  std::string OutlierDetectionLb::MakeKeyForAddress(
558
557
  const ServerAddress& address) {
559
- // Strip off attributes to construct the key.
560
- return ServerAddress(address.address(),
561
- grpc_channel_args_copy(address.args()))
562
- .ToString();
558
+ // Use only the address, not the attributes.
559
+ auto addr_str = grpc_sockaddr_to_string(&address.address(), false);
560
+ return addr_str.ok() ? addr_str.value() : addr_str.status().ToString();
563
561
  }
564
562
 
565
563
  void OutlierDetectionLb::ShutdownLocked() {
@@ -785,7 +783,7 @@ void OutlierDetectionLb::EjectionTimer::OnTimer(void* arg,
785
783
  }
786
784
 
787
785
  void OutlierDetectionLb::EjectionTimer::OnTimerLocked(grpc_error_handle error) {
788
- if (error == GRPC_ERROR_NONE && timer_pending_) {
786
+ if (GRPC_ERROR_IS_NONE(error) && timer_pending_) {
789
787
  std::map<SubchannelState*, double> success_rate_ejection_candidates;
790
788
  std::map<SubchannelState*, double> failure_percentage_ejection_candidates;
791
789
  size_t ejected_host_count = 0;
@@ -918,7 +916,7 @@ class OutlierDetectionLbFactory : public LoadBalancingPolicyFactory {
918
916
 
919
917
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
920
918
  const Json& json, grpc_error_handle* error) const override {
921
- GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
919
+ GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
922
920
  if (json.type() == Json::Type::JSON_NULL) {
923
921
  // This policy was configured in the deprecated loadBalancingPolicy
924
922
  // field or in the client API.
@@ -1002,7 +1000,7 @@ class OutlierDetectionLbFactory : public LoadBalancingPolicyFactory {
1002
1000
  child_policy = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1003
1001
  it->second, &parse_error);
1004
1002
  if (child_policy == nullptr) {
1005
- GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
1003
+ GPR_DEBUG_ASSERT(!GRPC_ERROR_IS_NONE(parse_error));
1006
1004
  std::vector<grpc_error_handle> child_errors;
1007
1005
  child_errors.push_back(parse_error);
1008
1006
  error_list.push_back(