grpc 1.41.1 → 1.42.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (416) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +55 -43
  3. data/include/grpc/event_engine/event_engine.h +82 -42
  4. data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
  5. data/include/grpc/event_engine/memory_allocator.h +210 -0
  6. data/include/grpc/grpc.h +4 -0
  7. data/include/grpc/grpc_security.h +18 -0
  8. data/include/grpc/grpc_security_constants.h +1 -0
  9. data/include/grpc/impl/codegen/port_platform.h +7 -0
  10. data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
  11. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
  12. data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
  13. data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
  14. data/src/core/ext/filters/client_channel/client_channel.h +74 -27
  15. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  16. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  17. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
  18. data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +4 -5
  20. data/src/core/ext/filters/client_channel/connector.h +18 -18
  21. data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
  22. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
  23. data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
  24. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
  31. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
  32. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
  33. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
  34. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
  42. data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
  43. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
  44. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
  49. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  50. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
  51. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
  52. data/src/core/ext/filters/client_channel/resolver.h +1 -1
  53. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
  54. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
  55. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
  57. data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
  58. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  59. data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
  60. data/src/core/ext/filters/client_channel/server_address.h +1 -1
  61. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
  62. data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
  63. data/src/core/ext/filters/client_channel/subchannel.h +29 -49
  64. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  65. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  66. data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
  67. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  68. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  69. data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
  70. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
  71. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
  72. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  73. data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
  74. data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
  75. data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
  76. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
  77. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
  78. data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
  79. data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
  80. data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
  81. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  82. data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
  83. data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
  84. data/src/core/ext/service_config/service_config_call_data.h +72 -0
  85. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
  86. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
  87. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
  88. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
  89. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
  90. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
  91. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
  92. data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
  93. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
  94. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
  95. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  96. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
  97. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
  98. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  99. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
  100. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
  102. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
  103. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
  107. data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
  108. data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
  109. data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
  110. data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
  111. data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
  112. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
  113. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
  114. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
  119. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
  120. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
  121. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
  122. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
  123. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
  124. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
  125. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
  126. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
  127. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
  128. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
  129. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
  130. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  131. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
  132. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  133. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  134. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  135. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  136. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
  137. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
  138. data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
  139. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
  140. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
  141. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
  142. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
  143. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
  144. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
  145. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
  146. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
  147. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
  148. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
  149. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
  150. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
  151. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
  152. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
  153. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
  154. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  155. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
  156. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
  157. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
  158. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
  159. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
  160. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
  161. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
  162. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  163. data/src/core/ext/xds/xds_api.cc +325 -362
  164. data/src/core/ext/xds/xds_api.h +134 -82
  165. data/src/core/ext/xds/xds_bootstrap.h +10 -0
  166. data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
  167. data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
  168. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  169. data/src/core/ext/xds/xds_client.cc +527 -314
  170. data/src/core/ext/xds/xds_client.h +42 -37
  171. data/src/core/ext/xds/xds_client_stats.h +1 -1
  172. data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
  173. data/src/core/lib/address_utils/parse_address.cc +2 -0
  174. data/src/core/lib/avl/avl.cc +5 -5
  175. data/src/core/lib/backoff/backoff.cc +1 -1
  176. data/src/core/lib/channel/channel_args.cc +24 -6
  177. data/src/core/lib/channel/channel_args.h +9 -0
  178. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  179. data/src/core/lib/channel/channel_trace.cc +1 -1
  180. data/src/core/lib/channel/channel_trace.h +1 -1
  181. data/src/core/lib/channel/channelz.cc +3 -3
  182. data/src/core/lib/channel/channelz.h +2 -2
  183. data/src/core/lib/channel/channelz_registry.cc +1 -1
  184. data/src/core/lib/channel/channelz_registry.h +1 -1
  185. data/src/core/lib/channel/connected_channel.cc +1 -3
  186. data/src/core/lib/channel/connected_channel.h +1 -2
  187. data/src/core/lib/compression/compression.cc +2 -2
  188. data/src/core/lib/compression/compression_args.cc +6 -4
  189. data/src/core/lib/compression/compression_internal.cc +2 -2
  190. data/src/core/lib/compression/compression_internal.h +1 -1
  191. data/src/core/lib/config/core_configuration.cc +44 -2
  192. data/src/core/lib/config/core_configuration.h +39 -1
  193. data/src/core/lib/debug/stats.cc +1 -1
  194. data/src/core/lib/debug/stats_data.cc +13 -13
  195. data/src/core/lib/gpr/atm.cc +1 -1
  196. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  197. data/src/core/lib/gpr/string.cc +2 -2
  198. data/src/core/lib/gpr/tls.h +1 -1
  199. data/src/core/lib/gpr/useful.h +79 -32
  200. data/src/core/lib/gprpp/arena.h +10 -0
  201. data/src/core/lib/gprpp/bitset.h +38 -16
  202. data/src/core/lib/gprpp/chunked_vector.h +211 -0
  203. data/src/core/lib/gprpp/construct_destruct.h +1 -1
  204. data/src/core/lib/gprpp/match.h +1 -1
  205. data/src/core/lib/gprpp/memory.h +6 -0
  206. data/src/core/lib/gprpp/overload.h +1 -1
  207. data/src/core/lib/gprpp/status_helper.cc +23 -3
  208. data/src/core/lib/gprpp/status_helper.h +12 -1
  209. data/src/core/lib/gprpp/table.h +411 -0
  210. data/src/core/lib/http/httpcli.cc +200 -182
  211. data/src/core/lib/http/parser.cc +2 -2
  212. data/src/core/lib/iomgr/call_combiner.cc +28 -10
  213. data/src/core/lib/iomgr/combiner.cc +6 -21
  214. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
  215. data/src/core/lib/iomgr/error.cc +113 -52
  216. data/src/core/lib/iomgr/error.h +50 -9
  217. data/src/core/lib/iomgr/error_cfstream.cc +5 -0
  218. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
  219. data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
  220. data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
  221. data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
  222. data/src/core/lib/iomgr/event_engine/closure.h +10 -1
  223. data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
  224. data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
  225. data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
  226. data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
  227. data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
  228. data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
  229. data/src/core/lib/iomgr/exec_ctx.cc +1 -9
  230. data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
  231. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
  232. data/src/core/lib/iomgr/executor.cc +6 -20
  233. data/src/core/lib/iomgr/iomgr.cc +3 -1
  234. data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
  235. data/src/core/lib/iomgr/iomgr_internal.h +3 -2
  236. data/src/core/lib/iomgr/load_file.cc +2 -2
  237. data/src/core/lib/iomgr/lockfree_event.cc +18 -0
  238. data/src/core/lib/iomgr/pollset_custom.cc +1 -1
  239. data/src/core/lib/iomgr/pollset_custom.h +1 -1
  240. data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
  241. data/src/core/lib/iomgr/resource_quota.cc +13 -11
  242. data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
  243. data/src/core/lib/iomgr/socket_mutator.cc +2 -2
  244. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
  246. data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
  247. data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
  248. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  249. data/src/core/lib/iomgr/tcp_posix.cc +4 -5
  250. data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
  251. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
  252. data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
  253. data/src/core/lib/iomgr/tcp_windows.cc +2 -2
  254. data/src/core/lib/iomgr/timer_generic.cc +13 -13
  255. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  256. data/src/core/lib/json/json_util.cc +68 -0
  257. data/src/core/lib/json/json_util.h +57 -99
  258. data/src/core/lib/json/json_writer.cc +0 -3
  259. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  260. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  261. data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
  262. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
  263. data/src/core/lib/security/context/security_context.cc +4 -2
  264. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  265. data/src/core/lib/security/credentials/credentials.cc +4 -2
  266. data/src/core/lib/security/credentials/credentials.h +6 -1
  267. data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
  268. data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
  269. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
  270. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
  271. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
  272. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
  273. data/src/core/lib/security/security_connector/security_connector.cc +9 -4
  274. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  275. data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
  276. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
  277. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
  278. data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
  279. data/src/core/lib/security/transport/security_handshaker.cc +73 -43
  280. data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
  281. data/src/core/lib/security/transport/tsi_error.cc +3 -5
  282. data/src/core/lib/slice/slice.cc +0 -16
  283. data/src/core/lib/slice/slice_api.cc +39 -0
  284. data/src/core/lib/slice/slice_buffer.cc +5 -5
  285. data/src/core/lib/slice/slice_intern.cc +8 -13
  286. data/src/core/lib/slice/slice_internal.h +1 -244
  287. data/src/core/lib/slice/slice_refcount.cc +17 -0
  288. data/src/core/lib/slice/slice_refcount.h +121 -0
  289. data/src/core/lib/slice/slice_refcount_base.h +173 -0
  290. data/src/core/lib/slice/slice_split.cc +100 -0
  291. data/src/core/lib/slice/slice_split.h +40 -0
  292. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  293. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  294. data/src/core/lib/slice/static_slice.cc +529 -0
  295. data/src/core/lib/slice/static_slice.h +331 -0
  296. data/src/core/lib/surface/builtins.cc +49 -0
  297. data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
  298. data/src/core/lib/surface/call.cc +103 -120
  299. data/src/core/lib/surface/call.h +0 -6
  300. data/src/core/lib/surface/channel.cc +19 -32
  301. data/src/core/lib/surface/channel.h +0 -9
  302. data/src/core/lib/surface/channel_init.cc +23 -76
  303. data/src/core/lib/surface/channel_init.h +52 -44
  304. data/src/core/lib/surface/completion_queue.cc +6 -5
  305. data/src/core/lib/surface/init.cc +0 -39
  306. data/src/core/lib/surface/init_secure.cc +17 -14
  307. data/src/core/lib/surface/lame_client.cc +18 -11
  308. data/src/core/lib/surface/lame_client.h +1 -1
  309. data/src/core/lib/surface/server.cc +25 -17
  310. data/src/core/lib/surface/server.h +17 -10
  311. data/src/core/lib/surface/validate_metadata.cc +5 -2
  312. data/src/core/lib/surface/version.cc +2 -2
  313. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  314. data/src/core/lib/transport/error_utils.cc +42 -17
  315. data/src/core/lib/transport/error_utils.h +1 -1
  316. data/src/core/lib/transport/metadata.cc +31 -10
  317. data/src/core/lib/transport/metadata.h +2 -1
  318. data/src/core/lib/transport/metadata_batch.cc +35 -371
  319. data/src/core/lib/transport/metadata_batch.h +905 -71
  320. data/src/core/lib/transport/parsed_metadata.h +263 -0
  321. data/src/core/lib/transport/pid_controller.cc +4 -4
  322. data/src/core/lib/transport/static_metadata.cc +714 -846
  323. data/src/core/lib/transport/static_metadata.h +115 -379
  324. data/src/core/lib/transport/status_metadata.cc +1 -0
  325. data/src/core/lib/transport/transport.cc +4 -5
  326. data/src/core/lib/transport/transport_op_string.cc +40 -20
  327. data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
  328. data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
  329. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  330. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  331. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
  332. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
  333. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  334. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  335. data/src/core/tsi/fake_transport_security.cc +15 -7
  336. data/src/core/tsi/local_transport_security.cc +36 -73
  337. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
  338. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
  339. data/src/core/tsi/ssl_transport_security.cc +10 -2
  340. data/src/core/tsi/transport_security.cc +12 -0
  341. data/src/core/tsi/transport_security.h +16 -1
  342. data/src/core/tsi/transport_security_interface.h +26 -0
  343. data/src/ruby/ext/grpc/extconf.rb +12 -9
  344. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  345. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  346. data/src/ruby/lib/grpc/version.rb +1 -1
  347. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
  348. data/src/ruby/spec/client_server_spec.rb +1 -1
  349. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
  350. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
  351. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  352. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +20 -21
  353. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +104 -114
  354. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +13 -0
  355. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  356. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  357. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  358. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  359. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  360. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  361. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +3 -6
  362. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
  363. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
  364. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
  365. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
  366. data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
  367. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  368. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +0 -1
  369. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +72 -45
  370. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
  371. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +2 -2
  372. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +479 -15
  373. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -564
  374. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +0 -1
  375. data/third_party/re2/re2/compile.cc +91 -109
  376. data/third_party/re2/re2/dfa.cc +27 -39
  377. data/third_party/re2/re2/filtered_re2.cc +18 -2
  378. data/third_party/re2/re2/filtered_re2.h +10 -5
  379. data/third_party/re2/re2/nfa.cc +1 -1
  380. data/third_party/re2/re2/parse.cc +42 -23
  381. data/third_party/re2/re2/perl_groups.cc +34 -34
  382. data/third_party/re2/re2/prefilter.cc +3 -2
  383. data/third_party/re2/re2/prog.cc +182 -4
  384. data/third_party/re2/re2/prog.h +28 -9
  385. data/third_party/re2/re2/re2.cc +87 -118
  386. data/third_party/re2/re2/re2.h +156 -141
  387. data/third_party/re2/re2/regexp.cc +12 -5
  388. data/third_party/re2/re2/regexp.h +8 -2
  389. data/third_party/re2/re2/set.cc +31 -9
  390. data/third_party/re2/re2/set.h +9 -4
  391. data/third_party/re2/re2/simplify.cc +11 -3
  392. data/third_party/re2/re2/tostring.cc +1 -1
  393. data/third_party/re2/re2/walker-inl.h +1 -1
  394. data/third_party/re2/util/mutex.h +2 -2
  395. data/third_party/re2/util/pcre.h +3 -3
  396. metadata +75 -63
  397. data/include/grpc/event_engine/slice_allocator.h +0 -71
  398. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
  399. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
  400. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  401. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  402. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  403. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  404. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
  405. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
  406. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  407. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  408. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  409. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
  410. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
  411. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  412. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  413. data/src/core/lib/iomgr/udp_server.cc +0 -747
  414. data/src/core/lib/iomgr/udp_server.h +0 -103
  415. data/src/core/lib/transport/authority_override.cc +0 -40
  416. data/src/core/lib/transport/authority_override.h +0 -37
@@ -149,7 +149,7 @@ void NativeDnsResolver::ShutdownLocked() {
149
149
 
150
150
  void NativeDnsResolver::OnNextResolution(void* arg, grpc_error_handle error) {
151
151
  NativeDnsResolver* r = static_cast<NativeDnsResolver*>(arg);
152
- GRPC_ERROR_REF(error); // ref owned by lambda
152
+ (void)GRPC_ERROR_REF(error); // ref owned by lambda
153
153
  r->work_serializer_->Run([r, error]() { r->OnNextResolutionLocked(error); },
154
154
  DEBUG_LOCATION);
155
155
  }
@@ -165,7 +165,7 @@ void NativeDnsResolver::OnNextResolutionLocked(grpc_error_handle error) {
165
165
 
166
166
  void NativeDnsResolver::OnResolved(void* arg, grpc_error_handle error) {
167
167
  NativeDnsResolver* r = static_cast<NativeDnsResolver*>(arg);
168
- GRPC_ERROR_REF(error); // owned by lambda
168
+ (void)GRPC_ERROR_REF(error); // owned by lambda
169
169
  r->work_serializer_->Run([r, error]() { r->OnResolvedLocked(error); },
170
170
  DEBUG_LOCATION);
171
171
  }
@@ -291,6 +291,10 @@ class NativeDnsResolverFactory : public ResolverFactory {
291
291
  gpr_log(GPR_ERROR, "authority based dns uri's not supported");
292
292
  return false;
293
293
  }
294
+ if (absl::StripPrefix(uri.path(), "/").empty()) {
295
+ gpr_log(GPR_ERROR, "no server name supplied in dns URI");
296
+ return false;
297
+ }
294
298
  return true;
295
299
  }
296
300
 
@@ -324,7 +324,9 @@ void ResponseGeneratorChannelArgDestroy(void* p) {
324
324
  generator->Unref();
325
325
  }
326
326
 
327
- int ResponseGeneratorChannelArgCmp(void* a, void* b) { return GPR_ICMP(a, b); }
327
+ int ResponseGeneratorChannelArgCmp(void* a, void* b) {
328
+ return QsortCompare(a, b);
329
+ }
328
330
 
329
331
  } // namespace
330
332
 
@@ -235,7 +235,7 @@ class XdsResolver : public Resolver {
235
235
  void MaybeAddCluster(const std::string& name);
236
236
  grpc_error_handle CreateMethodConfig(
237
237
  const XdsApi::Route& route,
238
- const XdsApi::Route::ClusterWeight* cluster_weight,
238
+ const XdsApi::Route::RouteAction::ClusterWeight* cluster_weight,
239
239
  RefCountedPtr<ServiceConfig>* method_config);
240
240
 
241
241
  RefCountedPtr<XdsResolver> resolver_;
@@ -311,7 +311,7 @@ XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver)
311
311
 
312
312
  void XdsResolver::Notifier::RunInExecCtx(void* arg, grpc_error_handle error) {
313
313
  Notifier* self = static_cast<Notifier*>(arg);
314
- GRPC_ERROR_REF(error);
314
+ (void)GRPC_ERROR_REF(error);
315
315
  self->resolver_->work_serializer_->Run(
316
316
  [self, error]() { self->RunInWorkSerializer(error); }, DEBUG_LOCATION);
317
317
  }
@@ -392,30 +392,34 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
392
392
  route_table_.emplace_back();
393
393
  auto& route_entry = route_table_.back();
394
394
  route_entry.route = route;
395
- // If the route doesn't specify a timeout, set its timeout to the global
396
- // one.
397
- if (!route.max_stream_duration.has_value()) {
398
- route_entry.route.max_stream_duration =
399
- resolver_->current_listener_.http_connection_manager
400
- .http_max_stream_duration;
401
- }
402
- if (route.weighted_clusters.empty()) {
403
- *error = CreateMethodConfig(route_entry.route, nullptr,
404
- &route_entry.method_config);
405
- MaybeAddCluster(route.cluster_name);
406
- } else {
407
- uint32_t end = 0;
408
- for (const auto& weighted_cluster : route_entry.route.weighted_clusters) {
409
- Route::ClusterWeightState cluster_weight_state;
410
- *error = CreateMethodConfig(route_entry.route, &weighted_cluster,
411
- &cluster_weight_state.method_config);
412
- if (*error != GRPC_ERROR_NONE) return;
413
- end += weighted_cluster.weight;
414
- cluster_weight_state.range_end = end;
415
- cluster_weight_state.cluster = weighted_cluster.name;
416
- route_entry.weighted_cluster_state.push_back(
417
- std::move(cluster_weight_state));
418
- MaybeAddCluster(weighted_cluster.name);
395
+ auto* route_action =
396
+ absl::get_if<XdsApi::Route::RouteAction>(&route_entry.route.action);
397
+ if (route_action != nullptr) {
398
+ // If the route doesn't specify a timeout, set its timeout to the global
399
+ // one.
400
+ if (!route_action->max_stream_duration.has_value()) {
401
+ route_action->max_stream_duration =
402
+ resolver_->current_listener_.http_connection_manager
403
+ .http_max_stream_duration;
404
+ }
405
+ if (route_action->weighted_clusters.empty()) {
406
+ *error = CreateMethodConfig(route_entry.route, nullptr,
407
+ &route_entry.method_config);
408
+ MaybeAddCluster(route_action->cluster_name);
409
+ } else {
410
+ uint32_t end = 0;
411
+ for (const auto& weighted_cluster : route_action->weighted_clusters) {
412
+ Route::ClusterWeightState cluster_weight_state;
413
+ *error = CreateMethodConfig(route_entry.route, &weighted_cluster,
414
+ &cluster_weight_state.method_config);
415
+ if (*error != GRPC_ERROR_NONE) return;
416
+ end += weighted_cluster.weight;
417
+ cluster_weight_state.range_end = end;
418
+ cluster_weight_state.cluster = weighted_cluster.name;
419
+ route_entry.weighted_cluster_state.push_back(
420
+ std::move(cluster_weight_state));
421
+ MaybeAddCluster(weighted_cluster.name);
422
+ }
419
423
  }
420
424
  }
421
425
  }
@@ -447,7 +451,7 @@ XdsResolver::XdsConfigSelector::~XdsConfigSelector() {
447
451
  const XdsHttpFilterImpl::FilterConfig* FindFilterConfigOverride(
448
452
  const std::string& instance_name,
449
453
  const XdsApi::RdsUpdate::VirtualHost& vhost, const XdsApi::Route& route,
450
- const XdsApi::Route::ClusterWeight* cluster_weight) {
454
+ const XdsApi::Route::RouteAction::ClusterWeight* cluster_weight) {
451
455
  // Check ClusterWeight, if any.
452
456
  if (cluster_weight != nullptr) {
453
457
  auto it = cluster_weight->typed_per_filter_config.find(instance_name);
@@ -465,11 +469,14 @@ const XdsHttpFilterImpl::FilterConfig* FindFilterConfigOverride(
465
469
 
466
470
  grpc_error_handle XdsResolver::XdsConfigSelector::CreateMethodConfig(
467
471
  const XdsApi::Route& route,
468
- const XdsApi::Route::ClusterWeight* cluster_weight,
472
+ const XdsApi::Route::RouteAction::ClusterWeight* cluster_weight,
469
473
  RefCountedPtr<ServiceConfig>* method_config) {
470
474
  std::vector<std::string> fields;
475
+ const auto& route_action =
476
+ absl::get<XdsApi::Route::RouteAction>(route.action);
471
477
  // Set retry policy if any.
472
- if (route.retry_policy.has_value()) {
478
+ if (route_action.retry_policy.has_value() &&
479
+ !route_action.retry_policy->retry_on.Empty()) {
473
480
  std::vector<std::string> retry_parts;
474
481
  retry_parts.push_back(absl::StrFormat(
475
482
  "\"retryPolicy\": {\n"
@@ -477,25 +484,27 @@ grpc_error_handle XdsResolver::XdsConfigSelector::CreateMethodConfig(
477
484
  " \"initialBackoff\": \"%d.%09ds\",\n"
478
485
  " \"maxBackoff\": \"%d.%09ds\",\n"
479
486
  " \"backoffMultiplier\": 2,\n",
480
- route.retry_policy->num_retries + 1,
481
- route.retry_policy->retry_back_off.base_interval.seconds,
482
- route.retry_policy->retry_back_off.base_interval.nanos,
483
- route.retry_policy->retry_back_off.max_interval.seconds,
484
- route.retry_policy->retry_back_off.max_interval.nanos));
487
+ route_action.retry_policy->num_retries + 1,
488
+ route_action.retry_policy->retry_back_off.base_interval.seconds,
489
+ route_action.retry_policy->retry_back_off.base_interval.nanos,
490
+ route_action.retry_policy->retry_back_off.max_interval.seconds,
491
+ route_action.retry_policy->retry_back_off.max_interval.nanos));
485
492
  std::vector<std::string> code_parts;
486
- if (route.retry_policy->retry_on.Contains(GRPC_STATUS_CANCELLED)) {
493
+ if (route_action.retry_policy->retry_on.Contains(GRPC_STATUS_CANCELLED)) {
487
494
  code_parts.push_back(" \"CANCELLED\"");
488
495
  }
489
- if (route.retry_policy->retry_on.Contains(GRPC_STATUS_DEADLINE_EXCEEDED)) {
496
+ if (route_action.retry_policy->retry_on.Contains(
497
+ GRPC_STATUS_DEADLINE_EXCEEDED)) {
490
498
  code_parts.push_back(" \"DEADLINE_EXCEEDED\"");
491
499
  }
492
- if (route.retry_policy->retry_on.Contains(GRPC_STATUS_INTERNAL)) {
500
+ if (route_action.retry_policy->retry_on.Contains(GRPC_STATUS_INTERNAL)) {
493
501
  code_parts.push_back(" \"INTERNAL\"");
494
502
  }
495
- if (route.retry_policy->retry_on.Contains(GRPC_STATUS_RESOURCE_EXHAUSTED)) {
503
+ if (route_action.retry_policy->retry_on.Contains(
504
+ GRPC_STATUS_RESOURCE_EXHAUSTED)) {
496
505
  code_parts.push_back(" \"RESOURCE_EXHAUSTED\"");
497
506
  }
498
- if (route.retry_policy->retry_on.Contains(GRPC_STATUS_UNAVAILABLE)) {
507
+ if (route_action.retry_policy->retry_on.Contains(GRPC_STATUS_UNAVAILABLE)) {
499
508
  code_parts.push_back(" \"UNAVAILABLE\"");
500
509
  }
501
510
  retry_parts.push_back(
@@ -505,12 +514,13 @@ grpc_error_handle XdsResolver::XdsConfigSelector::CreateMethodConfig(
505
514
  fields.emplace_back(absl::StrJoin(retry_parts, ""));
506
515
  }
507
516
  // Set timeout.
508
- if (route.max_stream_duration.has_value() &&
509
- (route.max_stream_duration->seconds != 0 ||
510
- route.max_stream_duration->nanos != 0)) {
511
- fields.emplace_back(absl::StrFormat(" \"timeout\": \"%d.%09ds\"",
512
- route.max_stream_duration->seconds,
513
- route.max_stream_duration->nanos));
517
+ if (route_action.max_stream_duration.has_value() &&
518
+ (route_action.max_stream_duration->seconds != 0 ||
519
+ route_action.max_stream_duration->nanos != 0)) {
520
+ fields.emplace_back(
521
+ absl::StrFormat(" \"timeout\": \"%d.%09ds\"",
522
+ route_action.max_stream_duration->seconds,
523
+ route_action.max_stream_duration->nanos));
514
524
  }
515
525
  // Handle xDS HTTP filters.
516
526
  std::map<std::string, std::vector<std::string>> per_filter_configs;
@@ -597,8 +607,7 @@ absl::optional<absl::string_view> GetHeaderValue(
597
607
  } else if (header_name == "content-type") {
598
608
  return "application/grpc";
599
609
  }
600
- return grpc_metadata_batch_get_value(initial_metadata, header_name,
601
- concatenated_value);
610
+ return initial_metadata->GetValue(header_name, concatenated_value);
602
611
  }
603
612
 
604
613
  bool HeadersMatch(const std::vector<HeaderMatcher>& header_matchers,
@@ -614,9 +623,9 @@ bool HeadersMatch(const std::vector<HeaderMatcher>& header_matchers,
614
623
  }
615
624
 
616
625
  absl::optional<uint64_t> HeaderHashHelper(
617
- const XdsApi::Route::HashPolicy& policy,
626
+ const XdsApi::Route::RouteAction::HashPolicy& policy,
618
627
  grpc_metadata_batch* initial_metadata) {
619
- GPR_ASSERT(policy.type == XdsApi::Route::HashPolicy::HEADER);
628
+ GPR_ASSERT(policy.type == XdsApi::Route::RouteAction::HashPolicy::HEADER);
620
629
  std::string value_buffer;
621
630
  absl::optional<absl::string_view> header_value =
622
631
  GetHeaderValue(initial_metadata, policy.header_name, &value_buffer);
@@ -660,10 +669,20 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
660
669
  continue;
661
670
  }
662
671
  // Found a route match
672
+ const auto* route_action =
673
+ absl::get_if<XdsApi::Route::RouteAction>(&entry.route.action);
674
+ if (route_action == nullptr) {
675
+ CallConfig call_config;
676
+ call_config.error = grpc_error_set_int(
677
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING(
678
+ "Matching route has inappropriate action"),
679
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
680
+ return call_config;
681
+ }
663
682
  absl::string_view cluster_name;
664
683
  RefCountedPtr<ServiceConfig> method_config;
665
- if (entry.route.weighted_clusters.empty()) {
666
- cluster_name = entry.route.cluster_name;
684
+ if (route_action->weighted_clusters.empty()) {
685
+ cluster_name = route_action->cluster_name;
667
686
  method_config = entry.method_config;
668
687
  } else {
669
688
  const uint32_t key =
@@ -695,13 +714,13 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
695
714
  GPR_ASSERT(it != clusters_.end());
696
715
  // Generate a hash.
697
716
  absl::optional<uint64_t> hash;
698
- for (const auto& hash_policy : entry.route.hash_policies) {
717
+ for (const auto& hash_policy : route_action->hash_policies) {
699
718
  absl::optional<uint64_t> new_hash;
700
719
  switch (hash_policy.type) {
701
- case XdsApi::Route::HashPolicy::HEADER:
720
+ case XdsApi::Route::RouteAction::HashPolicy::HEADER:
702
721
  new_hash = HeaderHashHelper(hash_policy, args.initial_metadata);
703
722
  break;
704
- case XdsApi::Route::HashPolicy::CHANNEL_ID:
723
+ case XdsApi::Route::RouteAction::HashPolicy::CHANNEL_ID:
705
724
  new_hash = static_cast<uint64_t>(
706
725
  reinterpret_cast<uintptr_t>(resolver_.get()));
707
726
  break;
@@ -767,12 +786,6 @@ void XdsResolver::StartLocked() {
767
786
  }
768
787
  grpc_pollset_set_add_pollset_set(xds_client_->interested_parties(),
769
788
  interested_parties_);
770
- channelz::ChannelNode* parent_channelz_node =
771
- grpc_channel_args_find_pointer<channelz::ChannelNode>(
772
- args_, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
773
- if (parent_channelz_node != nullptr) {
774
- xds_client_->AddChannelzLinkage(parent_channelz_node);
775
- }
776
789
  auto watcher = absl::make_unique<ListenerWatcher>(Ref());
777
790
  listener_watcher_ = watcher.get();
778
791
  xds_client_->WatchListenerData(server_name_, std::move(watcher));
@@ -791,12 +804,6 @@ void XdsResolver::ShutdownLocked() {
791
804
  xds_client_->CancelRouteConfigDataWatch(
792
805
  server_name_, route_config_watcher_, /*delay_unsubscription=*/false);
793
806
  }
794
- channelz::ChannelNode* parent_channelz_node =
795
- grpc_channel_args_find_pointer<channelz::ChannelNode>(
796
- args_, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
797
- if (parent_channelz_node != nullptr) {
798
- xds_client_->RemoveChannelzLinkage(parent_channelz_node);
799
- }
800
807
  grpc_pollset_set_del_pollset_set(xds_client_->interested_parties(),
801
808
  interested_parties_);
802
809
  xds_client_.reset();
@@ -920,13 +927,15 @@ void XdsResolver::GenerateResult() {
920
927
  grpc_error_handle error = GRPC_ERROR_NONE;
921
928
  auto config_selector = MakeRefCounted<XdsConfigSelector>(Ref(), &error);
922
929
  if (error != GRPC_ERROR_NONE) {
923
- OnError(error);
930
+ OnError(grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS,
931
+ GRPC_STATUS_UNAVAILABLE));
924
932
  return;
925
933
  }
926
934
  Result result;
927
935
  error = CreateServiceConfig(&result.service_config);
928
936
  if (error != GRPC_ERROR_NONE) {
929
- OnError(error);
937
+ OnError(grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS,
938
+ GRPC_STATUS_UNAVAILABLE));
930
939
  return;
931
940
  }
932
941
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
@@ -24,7 +24,7 @@
24
24
  #include <grpc/impl/codegen/grpc_types.h>
25
25
 
26
26
  #include "src/core/ext/filters/client_channel/server_address.h"
27
- #include "src/core/ext/filters/client_channel/service_config.h"
27
+ #include "src/core/ext/service_config/service_config.h"
28
28
  #include "src/core/lib/gprpp/orphanable.h"
29
29
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
30
30
  #include "src/core/lib/iomgr/iomgr.h"
@@ -36,6 +36,8 @@ namespace grpc_core {
36
36
  struct ResolverArgs {
37
37
  /// The parsed URI to resolve.
38
38
  URI uri;
39
+ /// The URI string.
40
+ std::string uri_string;
39
41
  /// Channel args to be included in resolver results.
40
42
  const grpc_channel_args* args = nullptr;
41
43
  /// Used to drive I/O in the name resolution process.
@@ -73,7 +73,7 @@ class RegistryState {
73
73
  ResolverFactory* factory =
74
74
  tmp_uri.ok() ? LookupResolverFactory(tmp_uri->scheme()) : nullptr;
75
75
  if (factory != nullptr) {
76
- *uri = *tmp_uri;
76
+ *uri = std::move(*tmp_uri);
77
77
  return factory;
78
78
  }
79
79
  *canonical_target = absl::StrCat(default_prefix_.get(), target);
@@ -81,7 +81,7 @@ class RegistryState {
81
81
  factory =
82
82
  tmp_uri2.ok() ? LookupResolverFactory(tmp_uri2->scheme()) : nullptr;
83
83
  if (factory != nullptr) {
84
- *uri = *tmp_uri2;
84
+ *uri = std::move(*tmp_uri2);
85
85
  return factory;
86
86
  }
87
87
  if (!tmp_uri.ok() || !tmp_uri2.ok()) {
@@ -158,18 +158,16 @@ OrphanablePtr<Resolver> ResolverRegistry::CreateResolver(
158
158
  std::shared_ptr<WorkSerializer> work_serializer,
159
159
  std::unique_ptr<Resolver::ResultHandler> result_handler) {
160
160
  GPR_ASSERT(g_state != nullptr);
161
- std::string canonical_target;
162
161
  ResolverArgs resolver_args;
163
162
  ResolverFactory* factory = g_state->FindResolverFactory(
164
- target, &resolver_args.uri, &canonical_target);
163
+ target, &resolver_args.uri, &resolver_args.uri_string);
164
+ if (factory == nullptr) return nullptr;
165
+ if (resolver_args.uri_string.empty()) resolver_args.uri_string = target;
165
166
  resolver_args.args = args;
166
167
  resolver_args.pollset_set = pollset_set;
167
168
  resolver_args.work_serializer = std::move(work_serializer);
168
169
  resolver_args.result_handler = std::move(result_handler);
169
- OrphanablePtr<Resolver> resolver =
170
- factory == nullptr ? nullptr
171
- : factory->CreateResolver(std::move(resolver_args));
172
- return resolver;
170
+ return factory->CreateResolver(std::move(resolver_args));
173
171
  }
174
172
 
175
173
  std::string ResolverRegistry::GetDefaultAuthority(absl::string_view target) {
@@ -100,7 +100,7 @@ ClientChannelServiceConfigParser::ParseGlobalParams(
100
100
  grpc_error_handle parse_error = GRPC_ERROR_NONE;
101
101
  parsed_lb_config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
102
102
  it->second, &parse_error);
103
- if (parsed_lb_config == nullptr) {
103
+ if (parse_error != GRPC_ERROR_NONE) {
104
104
  std::vector<grpc_error_handle> lb_errors;
105
105
  lb_errors.push_back(parse_error);
106
106
  error_list.push_back(GRPC_ERROR_CREATE_FROM_VECTOR(
@@ -24,7 +24,7 @@
24
24
  #include "src/core/ext/filters/client_channel/lb_policy.h"
25
25
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
26
26
  #include "src/core/ext/filters/client_channel/resolver.h"
27
- #include "src/core/ext/filters/client_channel/service_config.h"
27
+ #include "src/core/ext/service_config/service_config_parser.h"
28
28
  #include "src/core/lib/channel/status_util.h"
29
29
  #include "src/core/lib/gprpp/ref_counted.h"
30
30
  #include "src/core/lib/gprpp/ref_counted_ptr.h"