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
@@ -36,6 +36,7 @@
36
36
  #include <grpc/impl/codegen/grpc_types.h>
37
37
  #include <grpc/support/log.h>
38
38
 
39
+ #include "src/core/ext/filters/client_channel/client_channel.h"
39
40
  #include "src/core/ext/filters/client_channel/lb_policy.h"
40
41
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
41
42
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
@@ -196,7 +197,6 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
196
197
 
197
198
  RefCountedPtr<ChildPickerWrapper> picker_wrapper_;
198
199
  grpc_connectivity_state connectivity_state_ = GRPC_CHANNEL_IDLE;
199
- bool seen_failure_since_ready_ = false;
200
200
 
201
201
  // States for delayed removal.
202
202
  grpc_timer delayed_removal_timer_;
@@ -228,8 +228,10 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
228
228
 
229
229
  XdsClusterManagerLb::PickResult XdsClusterManagerLb::ClusterPicker::Pick(
230
230
  PickArgs args) {
231
+ auto* call_state = static_cast<ClientChannel::LoadBalancedCall::LbCallState*>(
232
+ args.call_state);
231
233
  auto cluster_name =
232
- args.call_state->ExperimentalGetCallAttribute(kXdsClusterAttribute);
234
+ call_state->GetCallAttribute(XdsClusterAttributeTypeName());
233
235
  auto it = cluster_map_.find(cluster_name);
234
236
  if (it != cluster_map_.end()) {
235
237
  return it->second->Pick(args);
@@ -532,7 +534,7 @@ void XdsClusterManagerLb::ClusterChild::OnDelayedRemovalTimer(
532
534
  void XdsClusterManagerLb::ClusterChild::OnDelayedRemovalTimerLocked(
533
535
  grpc_error_handle error) {
534
536
  delayed_removal_timer_callback_pending_ = false;
535
- if (error == GRPC_ERROR_NONE && !shutdown_) {
537
+ if (GRPC_ERROR_IS_NONE(error) && !shutdown_) {
536
538
  xds_cluster_manager_policy_->children_.erase(name_);
537
539
  }
538
540
  Unref(DEBUG_LOCATION, "ClusterChild+timer");
@@ -574,19 +576,13 @@ void XdsClusterManagerLb::ClusterChild::Helper::UpdateState(
574
576
  MakeRefCounted<ChildPickerWrapper>(xds_cluster_manager_child_->name_,
575
577
  std::move(picker));
576
578
  // Decide what state to report for aggregation purposes.
577
- // If we haven't seen a failure since the last time we were in state
578
- // READY, then we report the state change as-is. However, once we do see
579
- // a failure, we report TRANSIENT_FAILURE and ignore any subsequent state
580
- // changes until we go back into state READY.
581
- if (!xds_cluster_manager_child_->seen_failure_since_ready_) {
582
- if (state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
583
- xds_cluster_manager_child_->seen_failure_since_ready_ = true;
584
- }
585
- } else {
586
- if (state != GRPC_CHANNEL_READY) return;
587
- xds_cluster_manager_child_->seen_failure_since_ready_ = false;
579
+ // If the last recorded state was TRANSIENT_FAILURE and the new state
580
+ // is something other than READY, don't change the state.
581
+ if (xds_cluster_manager_child_->connectivity_state_ !=
582
+ GRPC_CHANNEL_TRANSIENT_FAILURE ||
583
+ state == GRPC_CHANNEL_READY) {
584
+ xds_cluster_manager_child_->connectivity_state_ = state;
588
585
  }
589
- xds_cluster_manager_child_->connectivity_state_ = state;
590
586
  // Notify the LB policy.
591
587
  xds_cluster_manager_child_->xds_cluster_manager_policy_->UpdateStateLocked();
592
588
  }
@@ -631,7 +627,7 @@ class XdsClusterManagerLbFactory : public LoadBalancingPolicyFactory {
631
627
 
632
628
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
633
629
  const Json& json, grpc_error_handle* error) const override {
634
- GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
630
+ GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
635
631
  if (json.type() == Json::Type::JSON_NULL) {
636
632
  // xds_cluster_manager was mentioned as a policy in the deprecated
637
633
  // loadBalancingPolicy field or in the client API.
@@ -702,7 +698,7 @@ class XdsClusterManagerLbFactory : public LoadBalancingPolicyFactory {
702
698
  *child_config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
703
699
  it->second, &parse_error);
704
700
  if (*child_config == nullptr) {
705
- GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
701
+ GPR_DEBUG_ASSERT(!GRPC_ERROR_IS_NONE(parse_error));
706
702
  std::vector<grpc_error_handle> child_errors;
707
703
  child_errors.push_back(parse_error);
708
704
  error_list.push_back(
@@ -933,7 +933,7 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
933
933
  grpc_error_handle error = GRPC_ERROR_NONE;
934
934
  RefCountedPtr<LoadBalancingPolicy::Config> config =
935
935
  LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(json, &error);
936
- if (error != GRPC_ERROR_NONE) {
936
+ if (!GRPC_ERROR_IS_NONE(error)) {
937
937
  // This should never happen, but if it does, we basically have no
938
938
  // way to fix it, so we put the channel in TRANSIENT_FAILURE.
939
939
  gpr_log(GPR_ERROR,
@@ -1032,7 +1032,7 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1032
1032
 
1033
1033
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
1034
1034
  const Json& json, grpc_error_handle* error) const override {
1035
- GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
1035
+ GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
1036
1036
  if (json.type() == Json::Type::JSON_NULL) {
1037
1037
  // xds_cluster_resolver was mentioned as a policy in the deprecated
1038
1038
  // loadBalancingPolicy field or in the client API.
@@ -1152,7 +1152,7 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1152
1152
  grpc_error_handle parse_error;
1153
1153
  discovery_mechanism->lrs_load_reporting_server.emplace(
1154
1154
  XdsBootstrap::XdsServer::Parse(it->second, &parse_error));
1155
- if (parse_error != GRPC_ERROR_NONE) {
1155
+ if (!GRPC_ERROR_IS_NONE(parse_error)) {
1156
1156
  error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
1157
1157
  absl::StrCat("errors parsing lrs_load_reporting_server")));
1158
1158
  error_list.push_back(parse_error);
@@ -106,13 +106,6 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
106
106
  /// It is more efficient to use this than to allocate memory directly
107
107
  /// for allocations that need to be made on a per-call basis.
108
108
  virtual void* Alloc(size_t size) = 0;
109
-
110
- /// EXPERIMENTAL API.
111
- /// Returns the value of the call attribute \a key.
112
- /// Keys are static strings, so an attribute can be accessed by an LB
113
- /// policy implementation only if it knows about the internal key.
114
- /// Returns a null string_view if key not found.
115
- virtual absl::string_view ExperimentalGetCallAttribute(const char* key) = 0;
116
109
  };
117
110
 
118
111
  /// Interface for accessing metadata.
@@ -28,7 +28,6 @@
28
28
  #include <utility>
29
29
  #include <vector>
30
30
 
31
- #include "absl/container/inlined_vector.h"
32
31
  #include "absl/strings/str_cat.h"
33
32
  #include "absl/strings/str_format.h"
34
33
  #include "absl/strings/str_join.h"
@@ -65,8 +64,7 @@ class RegistryState {
65
64
  }
66
65
 
67
66
  private:
68
- absl::InlinedVector<std::unique_ptr<LoadBalancingPolicyFactory>, 10>
69
- factories_;
67
+ std::vector<std::unique_ptr<LoadBalancingPolicyFactory>> factories_;
70
68
  };
71
69
 
72
70
  RegistryState* g_state = nullptr;
@@ -170,11 +168,11 @@ grpc_error_handle ParseLoadBalancingConfigHelper(
170
168
  RefCountedPtr<LoadBalancingPolicy::Config>
171
169
  LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
172
170
  const Json& json, grpc_error_handle* error) {
173
- GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
171
+ GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
174
172
  GPR_ASSERT(g_state != nullptr);
175
173
  Json::Object::const_iterator policy;
176
174
  *error = ParseLoadBalancingConfigHelper(json, &policy);
177
- if (*error != GRPC_ERROR_NONE) {
175
+ if (!GRPC_ERROR_IS_NONE(*error)) {
178
176
  return nullptr;
179
177
  }
180
178
  // Find factory.
@@ -20,7 +20,6 @@
20
20
 
21
21
  #include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
22
22
 
23
- #include <algorithm>
24
23
  #include <memory>
25
24
  #include <utility>
26
25
  #include <vector>
@@ -14,6 +14,8 @@
14
14
 
15
15
  #include <grpc/support/port_platform.h>
16
16
 
17
+ #include <algorithm>
18
+
17
19
  #include "src/core/lib/iomgr/port.h" // IWYU pragma: keep
18
20
 
19
21
  #ifdef GRPC_HAVE_UNIX_SOCKET
@@ -126,7 +128,7 @@ class BinderResolverFactory : public ResolverFactory {
126
128
  return false;
127
129
  }
128
130
  grpc_error_handle error = BinderAddrPopulate(uri.path(), &addr);
129
- if (error != GRPC_ERROR_NONE) {
131
+ if (!GRPC_ERROR_IS_NONE(error)) {
130
132
  gpr_log(GPR_ERROR, "%s", grpc_error_std_string(error).c_str());
131
133
  GRPC_ERROR_UNREF(error);
132
134
  return false;
@@ -200,14 +200,14 @@ bool ValueInJsonArray(const Json::Array& array, const char* value) {
200
200
  std::string ChooseServiceConfig(char* service_config_choice_json,
201
201
  grpc_error_handle* error) {
202
202
  Json json = Json::Parse(service_config_choice_json, error);
203
- if (*error != GRPC_ERROR_NONE) return "";
203
+ if (!GRPC_ERROR_IS_NONE(*error)) return "";
204
204
  if (json.type() != Json::Type::ARRAY) {
205
205
  *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
206
206
  "Service Config Choices, error: should be of type array");
207
207
  return "";
208
208
  }
209
209
  const Json* service_config = nullptr;
210
- absl::InlinedVector<grpc_error_handle, 4> error_list;
210
+ std::vector<grpc_error_handle> error_list;
211
211
  for (const Json& choice : json.array_value()) {
212
212
  if (choice.type() != Json::Type::OBJECT) {
213
213
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
@@ -300,7 +300,7 @@ void AresClientChannelDNSResolver::AresRequestWrapper::OnResolved(
300
300
  std::string service_config_string =
301
301
  ChooseServiceConfig(service_config_json_, &service_config_error);
302
302
  RefCountedPtr<ServiceConfig> service_config;
303
- if (service_config_error == GRPC_ERROR_NONE &&
303
+ if (GRPC_ERROR_IS_NONE(service_config_error) &&
304
304
  !service_config_string.empty()) {
305
305
  GRPC_CARES_TRACE_LOG("resolver:%p selected service config choice: %s",
306
306
  this, service_config_string.c_str());
@@ -308,7 +308,7 @@ void AresClientChannelDNSResolver::AresRequestWrapper::OnResolved(
308
308
  service_config_string,
309
309
  &service_config_error);
310
310
  }
311
- if (service_config_error != GRPC_ERROR_NONE) {
311
+ if (!GRPC_ERROR_IS_NONE(service_config_error)) {
312
312
  result.service_config = absl::UnavailableError(
313
313
  absl::StrCat("failed to parse service config: ",
314
314
  grpc_error_std_string(service_config_error)));
@@ -438,7 +438,7 @@ class AresDNSResolver : public DNSResolver {
438
438
  }
439
439
  grpc_pollset_set_del_pollset_set(request->pollset_set_,
440
440
  request->interested_parties_);
441
- if (error != GRPC_ERROR_NONE) {
441
+ if (!GRPC_ERROR_IS_NONE(error)) {
442
442
  request->on_resolve_address_done_(grpc_error_to_absl_status(error));
443
443
  return;
444
444
  }
@@ -563,7 +563,7 @@ void grpc_resolver_dns_ares_init() {
563
563
  if (grpc_core::UseAresDnsResolver()) {
564
564
  address_sorting_init();
565
565
  grpc_error_handle error = grpc_ares_init();
566
- if (error != GRPC_ERROR_NONE) {
566
+ if (!GRPC_ERROR_IS_NONE(error)) {
567
567
  GRPC_LOG_IF_ERROR("grpc_ares_init() failed", error);
568
568
  return;
569
569
  }
@@ -435,7 +435,7 @@ class GrpcPolledFdWindows {
435
435
  GPR_ASSERT(!connect_done_);
436
436
  connect_done_ = true;
437
437
  GPR_ASSERT(wsa_connect_error_ == 0);
438
- if (error == GRPC_ERROR_NONE) {
438
+ if (GRPC_ERROR_IS_NONE(error)) {
439
439
  DWORD transferred_bytes = 0;
440
440
  DWORD flags;
441
441
  BOOL wsa_success =
@@ -579,7 +579,7 @@ class GrpcPolledFdWindows {
579
579
  // the entire resolution attempt. Doing so will allow the "inject broken
580
580
  // nameserver list" test to pass on Windows.
581
581
  void OnIocpReadableLocked(grpc_error_handle error) {
582
- if (error == GRPC_ERROR_NONE) {
582
+ if (GRPC_ERROR_IS_NONE(error)) {
583
583
  if (winsocket_->read_info.wsa_error != 0) {
584
584
  /* WSAEMSGSIZE would be due to receiving more data
585
585
  * than our read buffer's fixed capacity. Assume that
@@ -596,7 +596,7 @@ class GrpcPolledFdWindows {
596
596
  }
597
597
  }
598
598
  }
599
- if (error == GRPC_ERROR_NONE) {
599
+ if (GRPC_ERROR_IS_NONE(error)) {
600
600
  read_buf_ = grpc_slice_sub_no_ref(
601
601
  read_buf_, 0, winsocket_->read_info.bytes_transferred);
602
602
  read_buf_has_data_ = true;
@@ -620,7 +620,7 @@ class GrpcPolledFdWindows {
620
620
  void OnIocpWriteableLocked(grpc_error_handle error) {
621
621
  GRPC_CARES_TRACE_LOG("OnIocpWriteableInner. fd:|%s|", GetName());
622
622
  GPR_ASSERT(socket_type_ == SOCK_STREAM);
623
- if (error == GRPC_ERROR_NONE) {
623
+ if (GRPC_ERROR_IS_NONE(error)) {
624
624
  if (winsocket_->write_info.wsa_error != 0) {
625
625
  error = GRPC_WSA_ERROR(winsocket_->write_info.wsa_error,
626
626
  "OnIocpWriteableInner");
@@ -632,7 +632,7 @@ class GrpcPolledFdWindows {
632
632
  }
633
633
  }
634
634
  GPR_ASSERT(tcp_write_state_ == WRITE_PENDING);
635
- if (error == GRPC_ERROR_NONE) {
635
+ if (GRPC_ERROR_IS_NONE(error)) {
636
636
  tcp_write_state_ = WRITE_WAITING_FOR_VERIFICATION_UPON_RETRY;
637
637
  write_buf_ = grpc_slice_sub_no_ref(
638
638
  write_buf_, 0, winsocket_->write_info.bytes_transferred);
@@ -18,6 +18,11 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
+ #include <algorithm>
22
+ #include <vector>
23
+
24
+ #include "src/core/lib/iomgr/sockaddr.h"
25
+
21
26
  // IWYU pragma: no_include <arpa/nameser.h>
22
27
  // IWYU pragma: no_include <inttypes.h>
23
28
  // IWYU pragma: no_include <netdb.h>
@@ -289,7 +294,7 @@ static void on_timeout(void* arg, grpc_error_handle error) {
289
294
  "err=%s",
290
295
  driver->request, driver, driver->shutting_down,
291
296
  grpc_error_std_string(error).c_str());
292
- if (!driver->shutting_down && error == GRPC_ERROR_NONE) {
297
+ if (!driver->shutting_down && GRPC_ERROR_IS_NONE(error)) {
293
298
  grpc_ares_ev_driver_shutdown_locked(driver);
294
299
  }
295
300
  grpc_ares_ev_driver_unref(driver);
@@ -315,7 +320,7 @@ static void on_ares_backup_poll_alarm(void* arg, grpc_error_handle error) {
315
320
  "err=%s",
316
321
  driver->request, driver, driver->shutting_down,
317
322
  grpc_error_std_string(error).c_str());
318
- if (!driver->shutting_down && error == GRPC_ERROR_NONE) {
323
+ if (!driver->shutting_down && GRPC_ERROR_IS_NONE(error)) {
319
324
  fd_node* fdn = driver->fds;
320
325
  while (fdn != nullptr) {
321
326
  if (!fdn->already_shutdown) {
@@ -357,7 +362,7 @@ static void on_readable(void* arg, grpc_error_handle error) {
357
362
  fdn->readable_registered = false;
358
363
  GRPC_CARES_TRACE_LOG("request:%p readable on %s", fdn->ev_driver->request,
359
364
  fdn->grpc_polled_fd->GetName());
360
- if (error == GRPC_ERROR_NONE) {
365
+ if (GRPC_ERROR_IS_NONE(error)) {
361
366
  do {
362
367
  ares_process_fd(ev_driver->channel, as, ARES_SOCKET_BAD);
363
368
  } while (fdn->grpc_polled_fd->IsFdStillReadableLocked());
@@ -383,7 +388,7 @@ static void on_writable(void* arg, grpc_error_handle error) {
383
388
  fdn->writable_registered = false;
384
389
  GRPC_CARES_TRACE_LOG("request:%p writable on %s", ev_driver->request,
385
390
  fdn->grpc_polled_fd->GetName());
386
- if (error == GRPC_ERROR_NONE) {
391
+ if (GRPC_ERROR_IS_NONE(error)) {
387
392
  ares_process_fd(ev_driver->channel, ARES_SOCKET_BAD, as);
388
393
  } else {
389
394
  // If error is not GRPC_ERROR_NONE, it means the fd has been shutdown or
@@ -848,7 +853,7 @@ void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
848
853
  }
849
854
  error = grpc_ares_ev_driver_create_locked(&r->ev_driver, interested_parties,
850
855
  query_timeout_ms, r);
851
- if (error != GRPC_ERROR_NONE) goto error_cleanup;
856
+ if (!GRPC_ERROR_IS_NONE(error)) goto error_cleanup;
852
857
  // If dns_server is specified, use it.
853
858
  if (dns_server != nullptr && dns_server[0] != '\0') {
854
859
  GRPC_CARES_TRACE_LOG("request:%p Using DNS server %s", r, dns_server);
@@ -18,12 +18,12 @@
18
18
 
19
19
  #include <limits.h>
20
20
 
21
+ #include <algorithm>
21
22
  #include <memory>
22
23
  #include <string>
23
24
  #include <utility>
24
25
  #include <vector>
25
26
 
26
- #include "absl/container/inlined_vector.h"
27
27
  #include "absl/functional/bind_front.h"
28
28
  #include "absl/memory/memory.h"
29
29
  #include "absl/status/status.h"
@@ -76,6 +76,16 @@ class NativeClientChannelDNSResolver : public PollingResolver {
76
76
  OrphanablePtr<Orphanable> StartRequest() override;
77
77
 
78
78
  private:
79
+ // No-op request class, used so that the PollingResolver code knows
80
+ // when there is a request in flight, even if the request is not
81
+ // actually cancellable.
82
+ class Request : public Orphanable {
83
+ public:
84
+ Request() = default;
85
+
86
+ void Orphan() override {}
87
+ };
88
+
79
89
  void OnResolved(
80
90
  absl::StatusOr<std::vector<grpc_resolved_address>> addresses_or);
81
91
  };
@@ -115,8 +125,7 @@ OrphanablePtr<Orphanable> NativeClientChannelDNSResolver::StartRequest() {
115
125
  gpr_log(GPR_DEBUG, "[dns_resolver=%p] starting request=%p", this,
116
126
  DNSResolver::HandleToString(dns_request_handle).c_str());
117
127
  }
118
- // Not cancellable.
119
- return nullptr;
128
+ return MakeOrphanable<Request>();
120
129
  }
121
130
 
122
131
  void NativeClientChannelDNSResolver::OnResolved(
@@ -151,14 +151,14 @@ void FakeResolver::MaybeSendResultLocked() {
151
151
  result_handler_->ReportResult(std::move(result));
152
152
  return_failure_ = false;
153
153
  } else if (has_next_result_) {
154
- Result result;
155
- result.addresses = std::move(next_result_.addresses);
156
- result.service_config = std::move(next_result_.service_config);
157
154
  // When both next_results_ and channel_args_ contain an arg with the same
158
155
  // name, only the one in next_results_ will be kept since next_results_ is
159
156
  // before channel_args_.
160
- result.args = grpc_channel_args_union(next_result_.args, channel_args_);
161
- result_handler_->ReportResult(std::move(result));
157
+ grpc_channel_args* new_args =
158
+ grpc_channel_args_union(next_result_.args, channel_args_);
159
+ grpc_channel_args_destroy(next_result_.args);
160
+ next_result_.args = new_args;
161
+ result_handler_->ReportResult(std::move(next_result_));
162
162
  has_next_result_ = false;
163
163
  }
164
164
  }
@@ -23,7 +23,6 @@
23
23
  #include <memory>
24
24
  #include <random>
25
25
  #include <string>
26
- #include <type_traits>
27
26
  #include <utility>
28
27
 
29
28
  #include "absl/memory/memory.h"
@@ -216,7 +215,7 @@ void GoogleCloud2ProdResolver::ZoneQuery::OnDone(
216
215
  GoogleCloud2ProdResolver* resolver, const grpc_http_response* response,
217
216
  grpc_error_handle error) {
218
217
  absl::StatusOr<std::string> zone;
219
- if (error != GRPC_ERROR_NONE) {
218
+ if (!GRPC_ERROR_IS_NONE(error)) {
220
219
  zone = absl::UnknownError(
221
220
  absl::StrCat("error fetching zone from metadata server: ",
222
221
  grpc_error_std_string(error)));
@@ -257,11 +256,11 @@ GoogleCloud2ProdResolver::IPv6Query::IPv6Query(
257
256
  void GoogleCloud2ProdResolver::IPv6Query::OnDone(
258
257
  GoogleCloud2ProdResolver* resolver, const grpc_http_response* response,
259
258
  grpc_error_handle error) {
260
- if (error != GRPC_ERROR_NONE) {
259
+ if (!GRPC_ERROR_IS_NONE(error)) {
261
260
  gpr_log(GPR_ERROR, "error fetching IPv6 address from metadata server: %s",
262
261
  grpc_error_std_string(error).c_str());
263
262
  }
264
- resolver->IPv6QueryDone(error == GRPC_ERROR_NONE && response->status == 200);
263
+ resolver->IPv6QueryDone(GRPC_ERROR_IS_NONE(error) && response->status == 200);
265
264
  GRPC_ERROR_UNREF(error);
266
265
  }
267
266
 
@@ -107,7 +107,7 @@ void PollingResolver::OnNextResolutionLocked(grpc_error_handle error) {
107
107
  this, grpc_error_std_string(error).c_str(), shutdown_);
108
108
  }
109
109
  have_next_resolution_timer_ = false;
110
- if (error == GRPC_ERROR_NONE && !shutdown_) {
110
+ if (GRPC_ERROR_IS_NONE(error) && !shutdown_) {
111
111
  StartResolvingLocked();
112
112
  }
113
113
  Unref(DEBUG_LOCATION, "retry-timer");
@@ -16,6 +16,7 @@
16
16
 
17
17
  #include <grpc/support/port_platform.h>
18
18
 
19
+ #include <algorithm>
19
20
  #include <memory>
20
21
  #include <string>
21
22
  #include <type_traits>
@@ -28,7 +28,6 @@
28
28
  #include <utility>
29
29
  #include <vector>
30
30
 
31
- #include "absl/container/inlined_vector.h"
32
31
  #include "absl/memory/memory.h"
33
32
  #include "absl/meta/type_traits.h"
34
33
  #include "absl/random/random.h"
@@ -45,6 +44,8 @@
45
44
  #include "absl/types/variant.h"
46
45
  #include "re2/re2.h"
47
46
 
47
+ #include "src/core/lib/gprpp/unique_type_name.h"
48
+
48
49
  #define XXH_INLINE_ALL
49
50
  #include "xxhash.h"
50
51
 
@@ -63,7 +64,7 @@
63
64
  #include "src/core/ext/xds/xds_route_config.h"
64
65
  #include "src/core/ext/xds/xds_routing.h"
65
66
  #include "src/core/lib/channel/channel_args.h"
66
- #include "src/core/lib/channel/channel_stack_builder.h"
67
+ #include "src/core/lib/channel/channel_fwd.h"
67
68
  #include "src/core/lib/channel/status_util.h"
68
69
  #include "src/core/lib/config/core_configuration.h"
69
70
  #include "src/core/lib/debug/trace.h"
@@ -94,7 +95,10 @@ namespace grpc_core {
94
95
 
95
96
  TraceFlag grpc_xds_resolver_trace(false, "xds_resolver");
96
97
 
97
- const char* kXdsClusterAttribute = "xds_cluster_name";
98
+ UniqueTypeName XdsClusterAttributeTypeName() {
99
+ static UniqueTypeName::Factory kFactory("xds_cluster_name");
100
+ return kFactory.Create();
101
+ }
98
102
 
99
103
  namespace {
100
104
 
@@ -182,7 +186,9 @@ class XdsResolver : public Resolver {
182
186
  Ref().release(); // ref held by lambda
183
187
  resolver_->work_serializer_->Run(
184
188
  [this]() {
185
- resolver_->OnResourceDoesNotExist();
189
+ resolver_->OnResourceDoesNotExist(
190
+ absl::StrCat(resolver_->lds_resource_name_,
191
+ ": xDS listener resource does not exist"));
186
192
  Unref();
187
193
  },
188
194
  DEBUG_LOCATION);
@@ -221,7 +227,9 @@ class XdsResolver : public Resolver {
221
227
  Ref().release(); // ref held by lambda
222
228
  resolver_->work_serializer_->Run(
223
229
  [this]() {
224
- resolver_->OnResourceDoesNotExist();
230
+ resolver_->OnResourceDoesNotExist(absl::StrCat(
231
+ resolver_->route_config_name_,
232
+ ": xDS route configuration resource does not exist"));
225
233
  Unref();
226
234
  },
227
235
  DEBUG_LOCATION);
@@ -328,7 +336,7 @@ class XdsResolver : public Resolver {
328
336
 
329
337
  XdsRouteConfigResource::Route route;
330
338
  RefCountedPtr<ServiceConfig> method_config;
331
- absl::InlinedVector<ClusterWeightState, 2> weighted_cluster_state;
339
+ std::vector<ClusterWeightState> weighted_cluster_state;
332
340
 
333
341
  bool operator==(const Route& other) const;
334
342
  };
@@ -352,7 +360,7 @@ class XdsResolver : public Resolver {
352
360
  void OnListenerUpdate(XdsListenerResource listener);
353
361
  void OnRouteConfigUpdate(XdsRouteConfigResource rds_update);
354
362
  void OnError(absl::string_view context, absl::Status status);
355
- void OnResourceDoesNotExist();
363
+ void OnResourceDoesNotExist(std::string context);
356
364
 
357
365
  absl::StatusOr<RefCountedPtr<ServiceConfig>> CreateServiceConfig();
358
366
  void GenerateResult();
@@ -487,7 +495,7 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
487
495
  Route::ClusterWeightState cluster_weight_state;
488
496
  *error = CreateMethodConfig(route_entry.route, &weighted_cluster,
489
497
  &cluster_weight_state.method_config);
490
- if (*error != GRPC_ERROR_NONE) return;
498
+ if (!GRPC_ERROR_IS_NONE(*error)) return;
491
499
  end += weighted_cluster.weight;
492
500
  cluster_weight_state.range_end = end;
493
501
  cluster_weight_state.cluster = weighted_cluster.name;
@@ -591,7 +599,7 @@ grpc_error_handle XdsResolver::XdsConfigSelector::CreateMethodConfig(
591
599
  resolver_->current_listener_.http_connection_manager.http_filters,
592
600
  resolver_->current_virtual_host_, route, cluster_weight,
593
601
  grpc_channel_args_copy(resolver_->args_));
594
- if (result.error != GRPC_ERROR_NONE) {
602
+ if (!GRPC_ERROR_IS_NONE(result.error)) {
595
603
  return result.error;
596
604
  }
597
605
  for (const auto& p : result.per_filter_configs) {
@@ -764,13 +772,13 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
764
772
  method_config->GetMethodParsedConfigVector(grpc_empty_slice());
765
773
  call_config.service_config = std::move(method_config);
766
774
  }
767
- call_config.call_attributes[kXdsClusterAttribute] = it->first;
775
+ call_config.call_attributes[XdsClusterAttributeTypeName()] = it->first;
768
776
  std::string hash_string = absl::StrCat(hash.value());
769
777
  char* hash_value =
770
778
  static_cast<char*>(args.arena->Alloc(hash_string.size() + 1));
771
779
  memcpy(hash_value, hash_string.c_str(), hash_string.size());
772
780
  hash_value[hash_string.size()] = '\0';
773
- call_config.call_attributes[kRequestRingHashAttribute] = hash_value;
781
+ call_config.call_attributes[RequestHashAttributeName()] = hash_value;
774
782
  call_config.call_dispatch_controller =
775
783
  args.arena->New<XdsCallDispatchController>(it->second->Ref());
776
784
  return call_config;
@@ -783,7 +791,7 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
783
791
  void XdsResolver::StartLocked() {
784
792
  grpc_error_handle error = GRPC_ERROR_NONE;
785
793
  xds_client_ = XdsClient::GetOrCreate(args_, &error);
786
- if (error != GRPC_ERROR_NONE) {
794
+ if (!GRPC_ERROR_IS_NONE(error)) {
787
795
  gpr_log(GPR_ERROR,
788
796
  "Failed to create xds client -- channel will remain in "
789
797
  "TRANSIENT_FAILURE: %s",
@@ -972,7 +980,7 @@ void XdsResolver::OnError(absl::string_view context, absl::Status status) {
972
980
  result_handler_->ReportResult(std::move(result));
973
981
  }
974
982
 
975
- void XdsResolver::OnResourceDoesNotExist() {
983
+ void XdsResolver::OnResourceDoesNotExist(std::string context) {
976
984
  gpr_log(GPR_ERROR,
977
985
  "[xds_resolver %p] LDS/RDS resource does not exist -- clearing "
978
986
  "update and returning empty service config",
@@ -986,6 +994,7 @@ void XdsResolver::OnResourceDoesNotExist() {
986
994
  grpc_error_handle error = GRPC_ERROR_NONE;
987
995
  result.service_config = ServiceConfigImpl::Create(args_, "{}", &error);
988
996
  GPR_ASSERT(*result.service_config != nullptr);
997
+ result.resolution_note = std::move(context);
989
998
  result.args = grpc_channel_args_copy(args_);
990
999
  result_handler_->ReportResult(std::move(result));
991
1000
  }
@@ -1031,7 +1040,7 @@ XdsResolver::CreateServiceConfig() {
1031
1040
  grpc_error_handle error = GRPC_ERROR_NONE;
1032
1041
  absl::StatusOr<RefCountedPtr<ServiceConfig>> result =
1033
1042
  ServiceConfigImpl::Create(args_, json.c_str(), &error);
1034
- if (error != GRPC_ERROR_NONE) {
1043
+ if (!GRPC_ERROR_IS_NONE(error)) {
1035
1044
  result = grpc_error_to_absl_status(error);
1036
1045
  GRPC_ERROR_UNREF(error);
1037
1046
  }
@@ -1044,7 +1053,7 @@ void XdsResolver::GenerateResult() {
1044
1053
  // state map, and then CreateServiceConfig for LB policies.
1045
1054
  grpc_error_handle error = GRPC_ERROR_NONE;
1046
1055
  auto config_selector = MakeRefCounted<XdsConfigSelector>(Ref(), &error);
1047
- if (error != GRPC_ERROR_NONE) {
1056
+ if (!GRPC_ERROR_IS_NONE(error)) {
1048
1057
  OnError("could not create ConfigSelector",
1049
1058
  absl::UnavailableError(grpc_error_std_string(error)));
1050
1059
  GRPC_ERROR_UNREF(error);
@@ -19,9 +19,11 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
+ #include "src/core/lib/gprpp/unique_type_name.h"
23
+
22
24
  namespace grpc_core {
23
25
 
24
- extern const char* kXdsClusterAttribute;
26
+ UniqueTypeName XdsClusterAttributeTypeName();
25
27
 
26
28
  } // namespace grpc_core
27
29