grpc 1.50.0 → 1.51.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 (459) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +131 -42
  3. data/include/grpc/event_engine/event_engine.h +10 -3
  4. data/include/grpc/event_engine/slice_buffer.h +17 -0
  5. data/include/grpc/grpc.h +0 -10
  6. data/include/grpc/impl/codegen/grpc_types.h +1 -5
  7. data/include/grpc/impl/codegen/port_platform.h +0 -3
  8. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +19 -13
  9. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -0
  10. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  11. data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -5
  12. data/src/core/ext/filters/client_channel/client_channel.cc +120 -140
  13. data/src/core/ext/filters/client_channel/client_channel.h +3 -4
  14. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +0 -2
  15. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  16. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  17. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
  18. data/src/core/ext/filters/client_channel/connector.h +1 -1
  19. data/src/core/ext/filters/client_channel/dynamic_filters.cc +20 -47
  20. data/src/core/ext/filters/client_channel/dynamic_filters.h +7 -8
  21. data/src/core/ext/filters/client_channel/health/health_check_client.cc +3 -4
  22. data/src/core/ext/filters/client_channel/http_proxy.cc +0 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
  24. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +5 -0
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +8 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +35 -44
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -3
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +3 -4
  30. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +41 -29
  32. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +9 -11
  34. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -12
  35. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +8 -10
  36. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +26 -27
  37. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +7 -9
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +44 -26
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +17 -27
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +13 -7
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +48 -47
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -126
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -9
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -32
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +22 -23
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +50 -52
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +2 -4
  53. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
  54. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +34 -26
  55. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
  56. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
  57. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +63 -46
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +80 -102
  59. data/src/core/ext/filters/client_channel/retry_service_config.cc +192 -234
  60. data/src/core/ext/filters/client_channel/retry_service_config.h +20 -23
  61. data/src/core/ext/filters/client_channel/retry_throttle.cc +8 -8
  62. data/src/core/ext/filters/client_channel/retry_throttle.h +8 -7
  63. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  64. data/src/core/ext/filters/client_channel/subchannel.cc +21 -25
  65. data/src/core/ext/filters/client_channel/subchannel.h +2 -2
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +11 -12
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +13 -14
  68. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -4
  70. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  71. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
  72. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -16
  73. data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
  74. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +13 -13
  75. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +34 -34
  76. data/src/core/ext/filters/http/server/http_server_filter.cc +26 -25
  77. data/src/core/ext/filters/message_size/message_size_filter.cc +86 -117
  78. data/src/core/ext/filters/message_size/message_size_filter.h +22 -15
  79. data/src/core/ext/filters/rbac/rbac_filter.cc +12 -12
  80. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +728 -530
  81. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -3
  82. data/src/core/ext/filters/server_config_selector/server_config_selector.h +1 -1
  83. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -7
  84. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +17 -21
  85. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +57 -72
  86. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
  87. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +212 -253
  89. data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -11
  90. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -3
  91. data/src/core/ext/transport/chttp2/transport/frame_data.cc +16 -15
  92. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  93. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +13 -13
  94. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -3
  95. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +10 -7
  96. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +15 -17
  97. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +5 -4
  98. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -6
  99. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -1
  100. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +31 -39
  102. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +7 -6
  103. data/src/core/ext/transport/chttp2/transport/internal.h +24 -8
  104. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -52
  105. data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
  106. data/src/core/ext/transport/chttp2/transport/varint.h +11 -8
  107. data/src/core/ext/transport/chttp2/transport/writing.cc +16 -16
  108. data/src/core/ext/transport/inproc/inproc_transport.cc +97 -115
  109. data/src/core/ext/xds/certificate_provider_store.cc +4 -4
  110. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -7
  111. data/src/core/ext/xds/xds_api.cc +15 -68
  112. data/src/core/ext/xds/xds_api.h +3 -7
  113. data/src/core/ext/xds/xds_bootstrap.h +0 -1
  114. data/src/core/ext/xds/xds_bootstrap_grpc.cc +3 -12
  115. data/src/core/ext/xds/xds_bootstrap_grpc.h +16 -1
  116. data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
  117. data/src/core/ext/xds/xds_channel_stack_modifier.cc +0 -1
  118. data/src/core/ext/xds/xds_client.cc +122 -90
  119. data/src/core/ext/xds/xds_client.h +7 -2
  120. data/src/core/ext/xds/xds_client_grpc.cc +5 -24
  121. data/src/core/ext/xds/xds_cluster.cc +291 -183
  122. data/src/core/ext/xds/xds_cluster.h +11 -15
  123. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +32 -29
  124. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +35 -16
  125. data/src/core/ext/xds/xds_common_types.cc +208 -141
  126. data/src/core/ext/xds/xds_common_types.h +19 -13
  127. data/src/core/ext/xds/xds_endpoint.cc +214 -129
  128. data/src/core/ext/xds/xds_endpoint.h +4 -7
  129. data/src/core/ext/xds/xds_http_fault_filter.cc +56 -43
  130. data/src/core/ext/xds/xds_http_fault_filter.h +13 -21
  131. data/src/core/ext/xds/xds_http_filters.cc +60 -73
  132. data/src/core/ext/xds/xds_http_filters.h +67 -19
  133. data/src/core/ext/xds/xds_http_rbac_filter.cc +152 -207
  134. data/src/core/ext/xds/xds_http_rbac_filter.h +12 -15
  135. data/src/core/ext/xds/xds_lb_policy_registry.cc +122 -169
  136. data/src/core/ext/xds/xds_lb_policy_registry.h +10 -11
  137. data/src/core/ext/xds/xds_listener.cc +459 -417
  138. data/src/core/ext/xds/xds_listener.h +43 -47
  139. data/src/core/ext/xds/xds_resource_type.h +3 -11
  140. data/src/core/ext/xds/xds_resource_type_impl.h +8 -13
  141. data/src/core/ext/xds/xds_route_config.cc +94 -80
  142. data/src/core/ext/xds/xds_route_config.h +10 -10
  143. data/src/core/ext/xds/xds_routing.cc +2 -1
  144. data/src/core/ext/xds/xds_routing.h +2 -0
  145. data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -94
  146. data/src/core/ext/xds/xds_transport_grpc.cc +4 -5
  147. data/src/core/lib/address_utils/parse_address.cc +11 -10
  148. data/src/core/lib/channel/channel_args.h +16 -1
  149. data/src/core/lib/channel/channel_stack.cc +23 -20
  150. data/src/core/lib/channel/channel_stack.h +17 -4
  151. data/src/core/lib/channel/channel_stack_builder.cc +4 -7
  152. data/src/core/lib/channel/channel_stack_builder.h +14 -6
  153. data/src/core/lib/channel/channel_stack_builder_impl.cc +25 -7
  154. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -0
  155. data/src/core/lib/channel/channel_trace.cc +4 -5
  156. data/src/core/lib/channel/channelz.cc +1 -1
  157. data/src/core/lib/channel/connected_channel.cc +695 -35
  158. data/src/core/lib/channel/connected_channel.h +0 -4
  159. data/src/core/lib/channel/promise_based_filter.cc +1004 -140
  160. data/src/core/lib/channel/promise_based_filter.h +364 -87
  161. data/src/core/lib/compression/message_compress.cc +5 -5
  162. data/src/core/lib/debug/event_log.cc +88 -0
  163. data/src/core/lib/debug/event_log.h +81 -0
  164. data/src/core/lib/debug/histogram_view.cc +69 -0
  165. data/src/core/lib/{slice/slice_refcount.cc → debug/histogram_view.h} +15 -13
  166. data/src/core/lib/debug/stats.cc +22 -119
  167. data/src/core/lib/debug/stats.h +29 -35
  168. data/src/core/lib/debug/stats_data.cc +224 -73
  169. data/src/core/lib/debug/stats_data.h +263 -122
  170. data/src/core/lib/event_engine/common_closures.h +71 -0
  171. data/src/core/lib/event_engine/default_event_engine.cc +38 -15
  172. data/src/core/lib/event_engine/default_event_engine.h +15 -3
  173. data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -4
  174. data/src/core/lib/event_engine/memory_allocator.cc +1 -1
  175. data/src/core/lib/event_engine/poller.h +10 -4
  176. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
  177. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
  178. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
  179. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  180. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  181. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  182. data/src/core/lib/event_engine/{executor/threaded_executor.cc → posix_engine/event_poller_posix_default.h} +13 -16
  183. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  184. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  185. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
  186. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  187. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
  188. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
  189. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +453 -18
  190. data/src/core/lib/event_engine/posix_engine/posix_engine.h +148 -24
  191. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  192. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
  193. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
  194. data/src/core/lib/event_engine/posix_engine/timer.h +9 -8
  195. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +57 -194
  196. data/src/core/lib/event_engine/posix_engine/timer_manager.h +21 -49
  197. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
  198. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
  199. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
  200. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  201. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
  202. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  203. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  204. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  205. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  206. data/src/core/lib/event_engine/slice.cc +7 -6
  207. data/src/core/lib/event_engine/slice_buffer.cc +2 -2
  208. data/src/core/lib/event_engine/thread_pool.cc +106 -25
  209. data/src/core/lib/event_engine/thread_pool.h +32 -9
  210. data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
  211. data/src/core/lib/event_engine/windows/windows_engine.cc +18 -12
  212. data/src/core/lib/event_engine/windows/windows_engine.h +8 -4
  213. data/src/core/lib/experiments/config.cc +1 -1
  214. data/src/core/lib/experiments/experiments.cc +13 -2
  215. data/src/core/lib/experiments/experiments.h +8 -1
  216. data/src/core/lib/gpr/cpu_linux.cc +6 -2
  217. data/src/core/lib/gpr/log_linux.cc +3 -4
  218. data/src/core/lib/gpr/string.h +1 -1
  219. data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
  220. data/src/core/lib/gprpp/load_file.cc +75 -0
  221. data/src/core/lib/gprpp/load_file.h +33 -0
  222. data/src/core/lib/gprpp/per_cpu.h +46 -0
  223. data/src/core/lib/gprpp/stat_posix.cc +5 -4
  224. data/src/core/lib/gprpp/stat_windows.cc +3 -2
  225. data/src/core/lib/gprpp/status_helper.h +1 -3
  226. data/src/core/lib/gprpp/strerror.cc +41 -0
  227. data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/strerror.h} +9 -13
  228. data/src/core/lib/gprpp/thd_windows.cc +1 -2
  229. data/src/core/lib/gprpp/time.cc +3 -4
  230. data/src/core/lib/gprpp/time.h +13 -2
  231. data/src/core/lib/gprpp/validation_errors.h +18 -1
  232. data/src/core/lib/http/httpcli.cc +40 -44
  233. data/src/core/lib/http/httpcli.h +6 -5
  234. data/src/core/lib/http/httpcli_security_connector.cc +4 -6
  235. data/src/core/lib/http/parser.cc +54 -65
  236. data/src/core/lib/iomgr/buffer_list.cc +105 -116
  237. data/src/core/lib/iomgr/buffer_list.h +60 -44
  238. data/src/core/lib/iomgr/call_combiner.cc +11 -10
  239. data/src/core/lib/iomgr/call_combiner.h +3 -4
  240. data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
  241. data/src/core/lib/iomgr/closure.h +49 -5
  242. data/src/core/lib/iomgr/combiner.cc +2 -2
  243. data/src/core/lib/iomgr/endpoint.h +1 -1
  244. data/src/core/lib/iomgr/endpoint_cfstream.cc +26 -25
  245. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
  246. data/src/core/lib/iomgr/error.cc +27 -42
  247. data/src/core/lib/iomgr/error.h +22 -152
  248. data/src/core/lib/iomgr/ev_apple.cc +4 -4
  249. data/src/core/lib/iomgr/ev_epoll1_linux.cc +26 -25
  250. data/src/core/lib/iomgr/ev_poll_posix.cc +27 -31
  251. data/src/core/lib/iomgr/exec_ctx.cc +3 -4
  252. data/src/core/lib/iomgr/exec_ctx.h +2 -3
  253. data/src/core/lib/iomgr/executor.cc +1 -2
  254. data/src/core/lib/iomgr/internal_errqueue.cc +3 -1
  255. data/src/core/lib/iomgr/iocp_windows.cc +1 -0
  256. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  257. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -1
  258. data/src/core/lib/iomgr/iomgr_windows.cc +2 -1
  259. data/src/core/lib/iomgr/load_file.cc +5 -9
  260. data/src/core/lib/iomgr/lockfree_event.cc +10 -10
  261. data/src/core/lib/iomgr/pollset_windows.cc +4 -4
  262. data/src/core/lib/iomgr/python_util.h +2 -2
  263. data/src/core/lib/iomgr/resolve_address.cc +8 -3
  264. data/src/core/lib/iomgr/resolve_address.h +3 -4
  265. data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
  266. data/src/core/lib/iomgr/resolve_address_posix.cc +14 -25
  267. data/src/core/lib/iomgr/resolve_address_posix.h +1 -2
  268. data/src/core/lib/iomgr/resolve_address_windows.cc +14 -17
  269. data/src/core/lib/iomgr/resolve_address_windows.h +1 -2
  270. data/src/core/lib/iomgr/socket_utils_common_posix.cc +30 -29
  271. data/src/core/lib/iomgr/socket_utils_posix.cc +1 -0
  272. data/src/core/lib/iomgr/socket_utils_posix.h +2 -2
  273. data/src/core/lib/iomgr/socket_windows.cc +2 -2
  274. data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -10
  275. data/src/core/lib/iomgr/tcp_client_posix.cc +31 -35
  276. data/src/core/lib/iomgr/tcp_client_windows.cc +8 -12
  277. data/src/core/lib/iomgr/tcp_posix.cc +92 -108
  278. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -34
  279. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  280. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +18 -21
  281. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -13
  282. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
  283. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -29
  284. data/src/core/lib/iomgr/tcp_windows.cc +27 -34
  285. data/src/core/lib/iomgr/timer.h +8 -8
  286. data/src/core/lib/iomgr/timer_generic.cc +9 -15
  287. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
  288. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -3
  289. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
  290. data/src/core/lib/json/json_channel_args.h +42 -0
  291. data/src/core/lib/json/json_object_loader.cc +7 -2
  292. data/src/core/lib/json/json_object_loader.h +22 -0
  293. data/src/core/lib/json/json_util.cc +5 -5
  294. data/src/core/lib/json/json_util.h +4 -4
  295. data/src/core/lib/load_balancing/lb_policy.cc +1 -1
  296. data/src/core/lib/load_balancing/lb_policy.h +4 -0
  297. data/src/core/lib/load_balancing/subchannel_interface.h +0 -7
  298. data/src/core/lib/matchers/matchers.cc +3 -4
  299. data/src/core/lib/promise/activity.cc +16 -2
  300. data/src/core/lib/promise/activity.h +38 -15
  301. data/src/core/lib/promise/arena_promise.h +80 -51
  302. data/src/core/lib/promise/context.h +13 -6
  303. data/src/core/lib/promise/detail/basic_seq.h +9 -28
  304. data/src/core/lib/promise/detail/promise_factory.h +58 -10
  305. data/src/core/lib/promise/detail/status.h +28 -0
  306. data/src/core/lib/promise/detail/switch.h +1455 -0
  307. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +3 -1
  308. data/src/core/lib/promise/for_each.h +129 -0
  309. data/src/core/lib/promise/loop.h +7 -5
  310. data/src/core/lib/promise/map_pipe.h +87 -0
  311. data/src/core/lib/promise/pipe.cc +19 -0
  312. data/src/core/lib/promise/pipe.h +505 -0
  313. data/src/core/lib/promise/poll.h +13 -0
  314. data/src/core/lib/promise/seq.h +3 -5
  315. data/src/core/lib/promise/sleep.cc +5 -4
  316. data/src/core/lib/promise/sleep.h +1 -2
  317. data/src/core/lib/promise/try_concurrently.h +341 -0
  318. data/src/core/lib/promise/try_seq.h +10 -13
  319. data/src/core/lib/resolver/server_address.cc +1 -0
  320. data/src/core/lib/resolver/server_address.h +1 -3
  321. data/src/core/lib/resource_quota/api.cc +0 -1
  322. data/src/core/lib/resource_quota/arena.cc +19 -0
  323. data/src/core/lib/resource_quota/arena.h +89 -0
  324. data/src/core/lib/resource_quota/memory_quota.cc +1 -0
  325. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +1 -3
  326. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
  327. data/src/core/lib/security/authorization/matchers.cc +25 -22
  328. data/src/core/lib/security/authorization/rbac_policy.cc +2 -3
  329. data/src/core/lib/security/context/security_context.h +10 -0
  330. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
  331. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  332. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +77 -55
  333. data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -3
  334. data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -51
  335. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +17 -21
  336. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +21 -25
  337. data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -0
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -24
  339. data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -0
  340. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -2
  341. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
  342. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -5
  343. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +24 -30
  344. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -5
  345. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -3
  346. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +19 -27
  347. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -11
  348. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -41
  349. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
  350. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +6 -11
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +8 -15
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +2 -6
  354. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +1 -4
  355. data/src/core/lib/security/security_connector/local/local_security_connector.cc +7 -11
  356. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +9 -14
  357. data/src/core/lib/security/security_connector/ssl_utils.cc +5 -7
  358. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -27
  359. data/src/core/lib/security/transport/client_auth_filter.cc +1 -1
  360. data/src/core/lib/security/transport/secure_endpoint.cc +26 -28
  361. data/src/core/lib/security/transport/security_handshaker.cc +53 -53
  362. data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
  363. data/src/core/lib/security/transport/tsi_error.cc +6 -3
  364. data/src/core/lib/security/util/json_util.cc +4 -5
  365. data/src/core/lib/service_config/service_config.h +1 -1
  366. data/src/core/lib/service_config/service_config_impl.cc +111 -158
  367. data/src/core/lib/service_config/service_config_impl.h +14 -17
  368. data/src/core/lib/service_config/service_config_parser.cc +14 -31
  369. data/src/core/lib/service_config/service_config_parser.h +14 -10
  370. data/src/core/lib/slice/b64.cc +2 -2
  371. data/src/core/lib/slice/slice.cc +7 -1
  372. data/src/core/lib/slice/slice.h +19 -6
  373. data/src/core/lib/slice/slice_buffer.cc +13 -14
  374. data/src/core/lib/slice/slice_internal.h +13 -21
  375. data/src/core/lib/slice/slice_refcount.h +34 -19
  376. data/src/core/lib/surface/byte_buffer.cc +3 -4
  377. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  378. data/src/core/lib/surface/call.cc +1366 -239
  379. data/src/core/lib/surface/call.h +44 -0
  380. data/src/core/lib/surface/call_details.cc +3 -3
  381. data/src/core/lib/surface/call_trace.cc +113 -0
  382. data/src/core/lib/surface/call_trace.h +30 -0
  383. data/src/core/lib/surface/channel.cc +44 -49
  384. data/src/core/lib/surface/channel.h +9 -1
  385. data/src/core/lib/surface/channel_ping.cc +1 -1
  386. data/src/core/lib/surface/channel_stack_type.cc +4 -0
  387. data/src/core/lib/surface/channel_stack_type.h +2 -0
  388. data/src/core/lib/surface/completion_queue.cc +38 -52
  389. data/src/core/lib/surface/init.cc +8 -39
  390. data/src/core/lib/surface/init_internally.h +8 -0
  391. data/src/core/lib/surface/lame_client.cc +10 -8
  392. data/src/core/lib/surface/server.cc +48 -70
  393. data/src/core/lib/surface/server.h +3 -4
  394. data/src/core/lib/surface/validate_metadata.cc +11 -12
  395. data/src/core/lib/surface/version.cc +2 -2
  396. data/src/core/lib/transport/connectivity_state.cc +2 -2
  397. data/src/core/lib/transport/error_utils.cc +34 -28
  398. data/src/core/lib/transport/error_utils.h +3 -3
  399. data/src/core/lib/transport/handshaker.cc +14 -14
  400. data/src/core/lib/transport/handshaker.h +1 -1
  401. data/src/core/lib/transport/handshaker_factory.h +26 -0
  402. data/src/core/lib/transport/handshaker_registry.cc +8 -2
  403. data/src/core/lib/transport/handshaker_registry.h +3 -4
  404. data/src/core/lib/transport/http_connect_handshaker.cc +23 -24
  405. data/src/core/lib/transport/metadata_batch.h +17 -1
  406. data/src/core/lib/transport/parsed_metadata.cc +2 -6
  407. data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -20
  408. data/src/core/lib/transport/transport.cc +63 -17
  409. data/src/core/lib/transport/transport.h +64 -68
  410. data/src/core/lib/transport/transport_impl.h +1 -1
  411. data/src/core/lib/transport/transport_op_string.cc +7 -6
  412. data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -10
  413. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -14
  414. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +10 -10
  415. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +8 -8
  416. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
  417. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
  418. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
  419. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  420. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +5 -5
  421. data/src/core/tsi/fake_transport_security.cc +3 -3
  422. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +7 -3
  423. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  424. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +6 -2
  425. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -2
  426. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +0 -3
  427. data/src/ruby/lib/grpc/version.rb +1 -1
  428. data/src/ruby/spec/channel_spec.rb +0 -43
  429. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  430. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  431. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  432. data/third_party/zlib/compress.c +3 -3
  433. data/third_party/zlib/crc32.c +21 -12
  434. data/third_party/zlib/deflate.c +112 -106
  435. data/third_party/zlib/deflate.h +2 -2
  436. data/third_party/zlib/gzlib.c +1 -1
  437. data/third_party/zlib/gzread.c +3 -5
  438. data/third_party/zlib/gzwrite.c +1 -1
  439. data/third_party/zlib/infback.c +10 -7
  440. data/third_party/zlib/inflate.c +5 -2
  441. data/third_party/zlib/inftrees.c +2 -2
  442. data/third_party/zlib/inftrees.h +1 -1
  443. data/third_party/zlib/trees.c +61 -62
  444. data/third_party/zlib/uncompr.c +2 -2
  445. data/third_party/zlib/zconf.h +16 -3
  446. data/third_party/zlib/zlib.h +10 -10
  447. data/third_party/zlib/zutil.c +9 -7
  448. data/third_party/zlib/zutil.h +1 -0
  449. metadata +55 -18
  450. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
  451. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
  452. data/src/core/lib/event_engine/executor/threaded_executor.h +0 -44
  453. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  454. data/src/core/lib/gpr/murmur_hash.h +0 -29
  455. data/src/core/lib/gpr/tls.h +0 -156
  456. data/src/core/lib/promise/call_push_pull.h +0 -148
  457. data/src/core/lib/slice/slice_api.cc +0 -39
  458. data/src/core/lib/slice/slice_buffer_api.cc +0 -35
  459. data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -19,13 +19,11 @@
19
19
  #include <string.h>
20
20
 
21
21
  #include <cstdint>
22
- #include <map>
23
22
  #include <memory>
24
23
  #include <random>
25
24
  #include <string>
26
25
  #include <utility>
27
26
 
28
- #include "absl/memory/memory.h"
29
27
  #include "absl/status/status.h"
30
28
  #include "absl/status/statusor.h"
31
29
  #include "absl/strings/str_cat.h"
@@ -39,6 +37,7 @@
39
37
  #include <grpc/impl/codegen/grpc_types.h>
40
38
  #include <grpc/support/log.h>
41
39
 
40
+ #include "src/core/ext/xds/xds_bootstrap.h"
42
41
  #include "src/core/ext/xds/xds_client_grpc.h"
43
42
  #include "src/core/lib/channel/channel_args.h"
44
43
  #include "src/core/lib/config/core_configuration.h"
@@ -46,6 +45,7 @@
46
45
  #include "src/core/lib/gprpp/env.h"
47
46
  #include "src/core/lib/gprpp/orphanable.h"
48
47
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
48
+ #include "src/core/lib/gprpp/status_helper.h"
49
49
  #include "src/core/lib/gprpp/time.h"
50
50
  #include "src/core/lib/gprpp/work_serializer.h"
51
51
  #include "src/core/lib/http/httpcli.h"
@@ -66,6 +66,8 @@ namespace grpc_core {
66
66
 
67
67
  namespace {
68
68
 
69
+ const char* kC2PAuthority = "traffic-director-c2p.xds.googleapis.com";
70
+
69
71
  class GoogleCloud2ProdResolver : public Resolver {
70
72
  public:
71
73
  explicit GoogleCloud2ProdResolver(ResolverArgs args);
@@ -88,7 +90,7 @@ class GoogleCloud2ProdResolver : public Resolver {
88
90
  private:
89
91
  static void OnHttpRequestDone(void* arg, grpc_error_handle error);
90
92
 
91
- // If error is not GRPC_ERROR_NONE, then it's not safe to look at response.
93
+ // If error is not absl::OkStatus(), then it's not safe to look at response.
92
94
  virtual void OnDone(GoogleCloud2ProdResolver* resolver,
93
95
  const grpc_http_response* response,
94
96
  grpc_error_handle error) = 0;
@@ -189,7 +191,6 @@ void GoogleCloud2ProdResolver::MetadataQuery::OnHttpRequestDone(
189
191
  auto* self = static_cast<MetadataQuery*>(arg);
190
192
  // Hop back into WorkSerializer to call OnDone().
191
193
  // Note: We implicitly pass our ref to the callback here.
192
- (void)GRPC_ERROR_REF(error);
193
194
  self->resolver_->work_serializer_->Run(
194
195
  [self, error]() {
195
196
  self->OnDone(self->resolver_.get(), &self->response_, error);
@@ -212,10 +213,9 @@ void GoogleCloud2ProdResolver::ZoneQuery::OnDone(
212
213
  GoogleCloud2ProdResolver* resolver, const grpc_http_response* response,
213
214
  grpc_error_handle error) {
214
215
  absl::StatusOr<std::string> zone;
215
- if (!GRPC_ERROR_IS_NONE(error)) {
216
- zone = absl::UnknownError(
217
- absl::StrCat("error fetching zone from metadata server: ",
218
- grpc_error_std_string(error)));
216
+ if (!error.ok()) {
217
+ zone = absl::UnknownError(absl::StrCat(
218
+ "error fetching zone from metadata server: ", StatusToString(error)));
219
219
  } else if (response->status != 200) {
220
220
  zone = absl::UnknownError(absl::StrFormat(
221
221
  "zone query received non-200 status: %d", response->status));
@@ -236,7 +236,6 @@ void GoogleCloud2ProdResolver::ZoneQuery::OnDone(
236
236
  } else {
237
237
  resolver->ZoneQueryDone(std::move(*zone));
238
238
  }
239
- GRPC_ERROR_UNREF(error);
240
239
  }
241
240
 
242
241
  //
@@ -253,18 +252,22 @@ GoogleCloud2ProdResolver::IPv6Query::IPv6Query(
253
252
  void GoogleCloud2ProdResolver::IPv6Query::OnDone(
254
253
  GoogleCloud2ProdResolver* resolver, const grpc_http_response* response,
255
254
  grpc_error_handle error) {
256
- if (!GRPC_ERROR_IS_NONE(error)) {
255
+ if (!error.ok()) {
257
256
  gpr_log(GPR_ERROR, "error fetching IPv6 address from metadata server: %s",
258
- grpc_error_std_string(error).c_str());
257
+ StatusToString(error).c_str());
259
258
  }
260
- resolver->IPv6QueryDone(GRPC_ERROR_IS_NONE(error) && response->status == 200);
261
- GRPC_ERROR_UNREF(error);
259
+ resolver->IPv6QueryDone(error.ok() && response->status == 200);
262
260
  }
263
261
 
264
262
  //
265
263
  // GoogleCloud2ProdResolver
266
264
  //
267
265
 
266
+ bool XdsBootstrapConfigured() {
267
+ return GetEnv("GRPC_XDS_BOOTSTRAP").has_value() ||
268
+ GetEnv("GRPC_XDS_BOOTSTRAP_CONFIG").has_value();
269
+ }
270
+
268
271
  GoogleCloud2ProdResolver::GoogleCloud2ProdResolver(ResolverArgs args)
269
272
  : resource_quota_(args.args.GetObjectRef<ResourceQuota>()),
270
273
  work_serializer_(std::move(args.work_serializer)),
@@ -278,18 +281,19 @@ GoogleCloud2ProdResolver::GoogleCloud2ProdResolver(ResolverArgs args)
278
281
  .value_or(false);
279
282
  const bool running_on_gcp =
280
283
  test_only_pretend_running_on_gcp || grpc_alts_is_running_on_gcp();
284
+ const bool federation_enabled = XdsFederationEnabled();
281
285
  if (!running_on_gcp ||
282
- // If the client is already using xDS, we can't use it here, because
283
- // they may be talking to a completely different xDS server than we
284
- // want to.
285
- // TODO(roth): When we implement xDS federation, remove this constraint.
286
- GetEnv("GRPC_XDS_BOOTSTRAP").has_value() ||
287
- GetEnv("GRPC_XDS_BOOTSTRAP_CONFIG").has_value()) {
286
+ // If the client is already using xDS and federation is not enabled,
287
+ // we can't use it here, because they may be talking to a completely
288
+ // different xDS server than we want to.
289
+ // TODO(roth): When we remove xDS federation env var protection,
290
+ // remove this constraint.
291
+ (!federation_enabled && XdsBootstrapConfigured())) {
288
292
  using_dns_ = true;
289
293
  child_resolver_ =
290
294
  CoreConfiguration::Get().resolver_registry().CreateResolver(
291
- absl::StrCat("dns:", name_to_resolve).c_str(), args.args,
292
- args.pollset_set, work_serializer_, std::move(args.result_handler));
295
+ absl::StrCat("dns:", name_to_resolve), args.args, args.pollset_set,
296
+ work_serializer_, std::move(args.result_handler));
293
297
  GPR_ASSERT(child_resolver_ != nullptr);
294
298
  return;
295
299
  }
@@ -302,9 +306,13 @@ GoogleCloud2ProdResolver::GoogleCloud2ProdResolver(ResolverArgs args)
302
306
  metadata_server_name_ = std::move(*test_only_metadata_server_override);
303
307
  }
304
308
  // Create xds resolver.
309
+ std::string xds_uri =
310
+ federation_enabled
311
+ ? absl::StrCat("xds://", kC2PAuthority, "/", name_to_resolve)
312
+ : absl::StrCat("xds:", name_to_resolve);
305
313
  child_resolver_ = CoreConfiguration::Get().resolver_registry().CreateResolver(
306
- absl::StrCat("xds:", name_to_resolve).c_str(), args.args,
307
- args.pollset_set, work_serializer_, std::move(args.result_handler));
314
+ xds_uri, args.args, args.pollset_set, work_serializer_,
315
+ std::move(args.result_handler));
308
316
  GPR_ASSERT(child_resolver_ != nullptr);
309
317
  }
310
318
 
@@ -393,7 +401,7 @@ void GoogleCloud2ProdResolver::StartXdsResolver() {
393
401
  {"xds_servers", xds_server},
394
402
  {"authorities",
395
403
  Json::Object{
396
- {"traffic-director-c2p.xds.googleapis.com",
404
+ {kC2PAuthority,
397
405
  Json::Object{
398
406
  {"xds_servers", std::move(xds_server)},
399
407
  }},
@@ -456,9 +464,9 @@ class ExperimentalGoogleCloud2ProdResolverFactory : public ResolverFactory {
456
464
 
457
465
  void RegisterCloud2ProdResolver(CoreConfiguration::Builder* builder) {
458
466
  builder->resolver_registry()->RegisterResolverFactory(
459
- absl::make_unique<GoogleCloud2ProdResolverFactory>());
467
+ std::make_unique<GoogleCloud2ProdResolverFactory>());
460
468
  builder->resolver_registry()->RegisterResolverFactory(
461
- absl::make_unique<ExperimentalGoogleCloud2ProdResolverFactory>());
469
+ std::make_unique<ExperimentalGoogleCloud2ProdResolverFactory>());
462
470
  }
463
471
 
464
472
  } // namespace grpc_core
@@ -36,6 +36,7 @@
36
36
  #include "src/core/lib/channel/channel_args.h"
37
37
  #include "src/core/lib/gprpp/debug_location.h"
38
38
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
39
+ #include "src/core/lib/gprpp/status_helper.h"
39
40
  #include "src/core/lib/gprpp/work_serializer.h"
40
41
  #include "src/core/lib/iomgr/exec_ctx.h"
41
42
  #include "src/core/lib/iomgr/timer.h"
@@ -106,7 +107,6 @@ void PollingResolver::ShutdownLocked() {
106
107
 
107
108
  void PollingResolver::OnNextResolution(void* arg, grpc_error_handle error) {
108
109
  auto* self = static_cast<PollingResolver*>(arg);
109
- (void)GRPC_ERROR_REF(error); // ref owned by lambda
110
110
  self->work_serializer_->Run(
111
111
  [self, error]() { self->OnNextResolutionLocked(error); }, DEBUG_LOCATION);
112
112
  }
@@ -116,14 +116,13 @@ void PollingResolver::OnNextResolutionLocked(grpc_error_handle error) {
116
116
  gpr_log(GPR_INFO,
117
117
  "[polling resolver %p] re-resolution timer fired: error=\"%s\", "
118
118
  "shutdown_=%d",
119
- this, grpc_error_std_string(error).c_str(), shutdown_);
119
+ this, StatusToString(error).c_str(), shutdown_);
120
120
  }
121
121
  have_next_resolution_timer_ = false;
122
- if (GRPC_ERROR_IS_NONE(error) && !shutdown_) {
122
+ if (error.ok() && !shutdown_) {
123
123
  StartResolvingLocked();
124
124
  }
125
125
  Unref(DEBUG_LOCATION, "retry-timer");
126
- GRPC_ERROR_UNREF(error);
127
126
  }
128
127
 
129
128
  void PollingResolver::OnRequestComplete(Result result) {
@@ -20,9 +20,7 @@
20
20
  #include <memory>
21
21
  #include <string>
22
22
  #include <utility>
23
- #include <vector>
24
23
 
25
- #include "absl/memory/memory.h"
26
24
  #include "absl/status/statusor.h"
27
25
  #include "absl/strings/str_split.h"
28
26
  #include "absl/strings/string_view.h"
@@ -37,7 +35,6 @@
37
35
  #include "src/core/lib/iomgr/resolved_address.h"
38
36
  #include "src/core/lib/resolver/resolver.h"
39
37
  #include "src/core/lib/resolver/resolver_factory.h"
40
- #include "src/core/lib/resolver/resolver_registry.h"
41
38
  #include "src/core/lib/resolver/server_address.h"
42
39
  #include "src/core/lib/uri/uri_parser.h"
43
40
 
@@ -179,14 +176,14 @@ class UnixAbstractResolverFactory : public ResolverFactory {
179
176
 
180
177
  void RegisterSockaddrResolver(CoreConfiguration::Builder* builder) {
181
178
  builder->resolver_registry()->RegisterResolverFactory(
182
- absl::make_unique<IPv4ResolverFactory>());
179
+ std::make_unique<IPv4ResolverFactory>());
183
180
  builder->resolver_registry()->RegisterResolverFactory(
184
- absl::make_unique<IPv6ResolverFactory>());
181
+ std::make_unique<IPv6ResolverFactory>());
185
182
  #ifdef GRPC_HAVE_UNIX_SOCKET
186
183
  builder->resolver_registry()->RegisterResolverFactory(
187
- absl::make_unique<UnixResolverFactory>());
184
+ std::make_unique<UnixResolverFactory>());
188
185
  builder->resolver_registry()->RegisterResolverFactory(
189
- absl::make_unique<UnixAbstractResolverFactory>());
186
+ std::make_unique<UnixAbstractResolverFactory>());
190
187
  #endif
191
188
  }
192
189
 
@@ -27,7 +27,6 @@
27
27
  #include <utility>
28
28
  #include <vector>
29
29
 
30
- #include "absl/memory/memory.h"
31
30
  #include "absl/meta/type_traits.h"
32
31
  #include "absl/random/random.h"
33
32
  #include "absl/status/status.h"
@@ -57,11 +56,9 @@
57
56
  #include "src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h"
58
57
  #include "src/core/ext/xds/xds_bootstrap.h"
59
58
  #include "src/core/ext/xds/xds_bootstrap_grpc.h"
60
- #include "src/core/ext/xds/xds_client.h"
61
59
  #include "src/core/ext/xds/xds_client_grpc.h"
62
60
  #include "src/core/ext/xds/xds_http_filters.h"
63
61
  #include "src/core/ext/xds/xds_listener.h"
64
- #include "src/core/ext/xds/xds_resource_type_impl.h"
65
62
  #include "src/core/ext/xds/xds_route_config.h"
66
63
  #include "src/core/ext/xds/xds_routing.h"
67
64
  #include "src/core/lib/channel/channel_args.h"
@@ -81,11 +78,9 @@
81
78
  #include "src/core/lib/iomgr/pollset_set.h"
82
79
  #include "src/core/lib/resolver/resolver.h"
83
80
  #include "src/core/lib/resolver/resolver_factory.h"
84
- #include "src/core/lib/resolver/resolver_registry.h"
85
81
  #include "src/core/lib/resolver/server_address.h"
86
82
  #include "src/core/lib/resource_quota/arena.h"
87
83
  #include "src/core/lib/service_config/service_config.h"
88
- #include "src/core/lib/service_config/service_config_call_data.h"
89
84
  #include "src/core/lib/service_config/service_config_impl.h"
90
85
  #include "src/core/lib/slice/slice_internal.h"
91
86
  #include "src/core/lib/transport/metadata_batch.h"
@@ -378,7 +373,7 @@ class XdsResolver : public Resolver {
378
373
  // This will not contain the RouteConfiguration, even if it comes with the
379
374
  // LDS response; instead, the relevant VirtualHost from the
380
375
  // RouteConfiguration will be saved in current_virtual_host_.
381
- XdsListenerResource current_listener_;
376
+ XdsListenerResource::HttpConnectionManager current_listener_;
382
377
 
383
378
  std::string route_config_name_;
384
379
  RouteConfigWatcher* route_config_watcher_ = nullptr;
@@ -469,8 +464,7 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
469
464
  // one.
470
465
  if (!route_action->max_stream_duration.has_value()) {
471
466
  route_action->max_stream_duration =
472
- resolver_->current_listener_.http_connection_manager
473
- .http_max_stream_duration;
467
+ resolver_->current_listener_.http_max_stream_duration;
474
468
  }
475
469
  Match(
476
470
  route_action->action,
@@ -525,12 +519,14 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
525
519
  }
526
520
  }
527
521
  // Populate filter list.
528
- for (const auto& http_filter :
529
- resolver_->current_listener_.http_connection_manager.http_filters) {
522
+ const auto& http_filter_registry =
523
+ static_cast<const GrpcXdsBootstrap&>(resolver_->xds_client_->bootstrap())
524
+ .http_filter_registry();
525
+ for (const auto& http_filter : resolver_->current_listener_.http_filters) {
530
526
  // Find filter. This is guaranteed to succeed, because it's checked
531
527
  // at config validation time in the XdsApi code.
532
528
  const XdsHttpFilterImpl* filter_impl =
533
- XdsHttpFilterRegistry::GetFilterForType(
529
+ http_filter_registry.GetFilterForType(
534
530
  http_filter.config.config_proto_type_name);
535
531
  GPR_ASSERT(filter_impl != nullptr);
536
532
  // Add C-core filter to list.
@@ -603,7 +599,9 @@ XdsResolver::XdsConfigSelector::CreateMethodConfig(
603
599
  }
604
600
  // Handle xDS HTTP filters.
605
601
  auto result = XdsRouting::GeneratePerHTTPFilterConfigs(
606
- resolver_->current_listener_.http_connection_manager.http_filters,
602
+ static_cast<const GrpcXdsBootstrap&>(resolver_->xds_client_->bootstrap())
603
+ .http_filter_registry(),
604
+ resolver_->current_listener_.http_filters,
607
605
  resolver_->current_virtual_host_, route, cluster_weight,
608
606
  resolver_->args_);
609
607
  if (!result.ok()) return result.status();
@@ -793,7 +791,7 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
793
791
  //
794
792
 
795
793
  void XdsResolver::StartLocked() {
796
- grpc_error_handle error = GRPC_ERROR_NONE;
794
+ grpc_error_handle error;
797
795
  auto xds_client = GrpcXdsClient::GetOrCreate(args_, "xds resolver");
798
796
  if (!xds_client.ok()) {
799
797
  gpr_log(GPR_ERROR,
@@ -890,39 +888,58 @@ void XdsResolver::OnListenerUpdate(XdsListenerResource listener) {
890
888
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
891
889
  gpr_log(GPR_INFO, "[xds_resolver %p] received updated listener data", this);
892
890
  }
893
- if (xds_client_ == nullptr) {
894
- return;
895
- }
896
- if (listener.http_connection_manager.route_config_name !=
897
- route_config_name_) {
898
- if (route_config_watcher_ != nullptr) {
899
- XdsRouteConfigResourceType::CancelWatch(
900
- xds_client_.get(), route_config_name_, route_config_watcher_,
901
- /*delay_unsubscription=*/
902
- !listener.http_connection_manager.route_config_name.empty());
903
- route_config_watcher_ = nullptr;
904
- }
905
- route_config_name_ =
906
- std::move(listener.http_connection_manager.route_config_name);
907
- if (!route_config_name_.empty()) {
908
- current_virtual_host_.routes.clear();
909
- auto watcher = MakeRefCounted<RouteConfigWatcher>(Ref());
910
- route_config_watcher_ = watcher.get();
911
- XdsRouteConfigResourceType::StartWatch(
912
- xds_client_.get(), route_config_name_, std::move(watcher));
913
- }
914
- }
915
- current_listener_ = std::move(listener);
916
- if (route_config_name_.empty()) {
917
- GPR_ASSERT(
918
- current_listener_.http_connection_manager.rds_update.has_value());
919
- OnRouteConfigUpdate(
920
- std::move(*current_listener_.http_connection_manager.rds_update));
921
- } else {
922
- // HCM may contain newer filter config. We need to propagate the update as
923
- // config selector to the channel
924
- GenerateResult();
891
+ if (xds_client_ == nullptr) return;
892
+ auto* hcm = absl::get_if<XdsListenerResource::HttpConnectionManager>(
893
+ &listener.listener);
894
+ if (hcm == nullptr) {
895
+ return OnError(lds_resource_name_,
896
+ absl::UnavailableError("not an API listener"));
925
897
  }
898
+ current_listener_ = std::move(*hcm);
899
+ MatchMutable(
900
+ &current_listener_.route_config,
901
+ // RDS resource name
902
+ [&](std::string* rds_name) {
903
+ // If the RDS name changed, update the RDS watcher.
904
+ // Note that this will be true on the initial update, because
905
+ // route_config_name_ will be empty.
906
+ if (route_config_name_ != *rds_name) {
907
+ // If we already had a watch (i.e., if the previous config had
908
+ // a different RDS name), stop the previous watch.
909
+ // There will be no previous watch if either (a) this is the
910
+ // initial resource update or (b) the previous Listener had an
911
+ // inlined RouteConfig.
912
+ if (route_config_watcher_ != nullptr) {
913
+ XdsRouteConfigResourceType::CancelWatch(
914
+ xds_client_.get(), route_config_name_, route_config_watcher_,
915
+ /*delay_unsubscription=*/true);
916
+ route_config_watcher_ = nullptr;
917
+ }
918
+ // Start watch for the new RDS resource name.
919
+ route_config_name_ = std::move(*rds_name);
920
+ auto watcher = MakeRefCounted<RouteConfigWatcher>(Ref());
921
+ route_config_watcher_ = watcher.get();
922
+ XdsRouteConfigResourceType::StartWatch(
923
+ xds_client_.get(), route_config_name_, std::move(watcher));
924
+ } else {
925
+ // RDS resource name has not changed, so no watch needs to be
926
+ // updated, but we still need to propagate any changes in the
927
+ // HCM config (e.g., the list of HTTP filters).
928
+ GenerateResult();
929
+ }
930
+ },
931
+ // inlined RouteConfig
932
+ [&](XdsRouteConfigResource* route_config) {
933
+ // If the previous update specified an RDS resource instead of
934
+ // having an inlined RouteConfig, we need to cancel the RDS watch.
935
+ if (route_config_watcher_ != nullptr) {
936
+ XdsRouteConfigResourceType::CancelWatch(
937
+ xds_client_.get(), route_config_name_, route_config_watcher_);
938
+ route_config_watcher_ = nullptr;
939
+ route_config_name_.clear();
940
+ }
941
+ OnRouteConfigUpdate(std::move(*route_config));
942
+ });
926
943
  }
927
944
 
928
945
  namespace {
@@ -1124,7 +1141,7 @@ class XdsResolverFactory : public ResolverFactory {
1124
1141
 
1125
1142
  void RegisterXdsResolver(CoreConfiguration::Builder* builder) {
1126
1143
  builder->resolver_registry()->RegisterResolverFactory(
1127
- absl::make_unique<XdsResolverFactory>());
1144
+ std::make_unique<XdsResolverFactory>());
1128
1145
  }
1129
1146
 
1130
1147
  } // namespace grpc_core