grpc 1.46.3-x86_64-linux → 1.47.0-x86_64-linux

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (487) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +49 -97
  3. data/include/grpc/event_engine/event_engine.h +42 -7
  4. data/include/grpc/event_engine/memory_allocator.h +0 -15
  5. data/include/grpc/event_engine/port.h +1 -1
  6. data/include/grpc/event_engine/slice.h +286 -0
  7. data/include/grpc/event_engine/slice_buffer.h +112 -0
  8. data/include/grpc/grpc_security.h +11 -0
  9. data/include/grpc/impl/codegen/port_platform.h +100 -36
  10. data/include/grpc/impl/codegen/slice.h +1 -1
  11. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +18 -30
  12. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +4 -1
  13. data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
  14. data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +5 -5
  16. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +42 -20
  18. data/src/core/ext/filters/client_channel/client_channel.cc +60 -17
  19. data/src/core/ext/filters/client_channel/client_channel.h +26 -6
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  22. data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
  23. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
  24. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
  25. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  26. data/src/core/ext/filters/client_channel/config_selector.h +7 -5
  27. data/src/core/ext/filters/client_channel/connector.h +8 -2
  28. data/src/core/ext/filters/client_channel/dynamic_filters.cc +13 -2
  29. data/src/core/ext/filters/client_channel/dynamic_filters.h +11 -1
  30. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  31. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
  32. data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
  33. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
  34. data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
  35. data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
  37. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  39. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +9 -3
  42. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -19
  43. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
  45. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
  46. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
  47. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
  51. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +60 -52
  52. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -60
  53. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +157 -96
  54. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +2 -0
  55. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +45 -10
  56. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -171
  57. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +39 -36
  58. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +30 -5
  59. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +99 -23
  60. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
  61. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -4
  62. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +23 -3
  63. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +75 -11
  64. data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
  65. data/src/core/ext/filters/client_channel/lb_policy.h +18 -24
  66. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
  67. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  68. data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
  69. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  70. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  71. data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
  72. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
  73. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
  74. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +23 -5
  75. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +134 -43
  76. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
  77. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +26 -9
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
  82. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  83. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  84. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +30 -7
  85. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -14
  86. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
  87. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +59 -13
  88. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +13 -1
  89. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
  90. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +15 -11
  91. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +89 -33
  92. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -11
  93. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
  94. data/src/core/ext/filters/client_channel/retry_filter.cc +42 -2
  95. data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -9
  96. data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
  97. data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
  98. data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
  99. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -5
  100. data/src/core/ext/filters/client_channel/subchannel.cc +156 -160
  101. data/src/core/ext/filters/client_channel/subchannel.h +80 -20
  102. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
  103. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  104. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
  105. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
  106. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +16 -2
  107. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +12 -0
  108. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -2
  109. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -4
  110. data/src/core/ext/filters/http/client/http_client_filter.cc +14 -5
  111. data/src/core/ext/filters/http/client/http_client_filter.h +7 -1
  112. data/src/core/ext/filters/http/client_authority_filter.cc +5 -10
  113. data/src/core/ext/filters/http/http_filters_plugin.cc +7 -8
  114. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +1 -0
  115. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +3 -1
  116. data/src/core/ext/filters/http/server/http_server_filter.cc +80 -247
  117. data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
  118. data/src/core/ext/filters/message_size/message_size_filter.cc +20 -26
  119. data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
  120. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -0
  121. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +101 -135
  122. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
  123. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -15
  124. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
  125. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
  126. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  127. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  128. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +69 -20
  129. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +5 -0
  130. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
  131. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
  132. data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -2
  133. data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -2
  134. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  135. data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -1
  136. data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -1
  137. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
  138. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  139. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
  140. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  141. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
  142. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  143. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -3
  144. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  145. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -1
  146. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  147. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
  148. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
  149. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
  150. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
  151. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -7
  152. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
  153. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +55 -37
  154. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
  155. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  156. data/src/core/ext/transport/chttp2/transport/internal.h +24 -3
  157. data/src/core/ext/transport/chttp2/transport/parsing.cc +27 -6
  158. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -9
  159. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  160. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  161. data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
  162. data/src/core/ext/transport/chttp2/transport/writing.cc +38 -2
  163. data/src/core/ext/transport/inproc/inproc_transport.cc +8 -5
  164. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  165. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
  166. data/src/core/ext/xds/certificate_provider_store.cc +4 -2
  167. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  168. data/src/core/ext/xds/xds_certificate_provider.cc +4 -1
  169. data/src/core/ext/xds/xds_certificate_provider.h +1 -1
  170. data/src/core/ext/xds/xds_channel_stack_modifier.cc +5 -5
  171. data/src/core/ext/xds/xds_client.cc +46 -22
  172. data/src/core/ext/xds/xds_cluster.cc +106 -16
  173. data/src/core/ext/xds/xds_cluster.h +3 -0
  174. data/src/core/ext/xds/xds_http_fault_filter.cc +3 -3
  175. data/src/core/ext/xds/xds_listener.cc +19 -9
  176. data/src/core/ext/xds/xds_server_config_fetcher.cc +2 -1
  177. data/src/core/lib/address_utils/sockaddr_utils.cc +56 -23
  178. data/src/core/lib/address_utils/sockaddr_utils.h +7 -4
  179. data/src/core/lib/avl/avl.h +3 -1
  180. data/src/core/lib/channel/call_finalization.h +4 -0
  181. data/src/core/lib/channel/call_tracer.h +8 -2
  182. data/src/core/lib/channel/channel_args.cc +41 -22
  183. data/src/core/lib/channel/channel_args.h +33 -3
  184. data/src/core/lib/channel/channel_args_preconditioning.cc +3 -3
  185. data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
  186. data/src/core/lib/channel/channel_stack.cc +41 -3
  187. data/src/core/lib/channel/channel_stack.h +49 -3
  188. data/src/core/lib/channel/channel_stack_builder.cc +9 -19
  189. data/src/core/lib/channel/channel_stack_builder.h +15 -27
  190. data/src/core/lib/channel/channel_stack_builder_impl.cc +36 -41
  191. data/src/core/lib/channel/channel_stack_builder_impl.h +3 -6
  192. data/src/core/lib/channel/channel_trace.cc +8 -13
  193. data/src/core/lib/channel/channel_trace.h +6 -3
  194. data/src/core/lib/channel/channelz.cc +8 -13
  195. data/src/core/lib/channel/channelz.h +13 -4
  196. data/src/core/lib/channel/channelz_registry.cc +7 -14
  197. data/src/core/lib/channel/channelz_registry.h +10 -9
  198. data/src/core/lib/channel/connected_channel.cc +21 -31
  199. data/src/core/lib/channel/connected_channel.h +1 -0
  200. data/src/core/lib/channel/promise_based_filter.cc +444 -189
  201. data/src/core/lib/channel/promise_based_filter.h +160 -27
  202. data/src/core/lib/channel/status_util.cc +2 -0
  203. data/src/core/lib/channel/status_util.h +0 -3
  204. data/src/core/lib/compression/compression_internal.cc +45 -10
  205. data/src/core/lib/compression/compression_internal.h +1 -1
  206. data/src/core/lib/config/core_configuration.cc +3 -0
  207. data/src/core/lib/config/core_configuration.h +2 -1
  208. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
  209. data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
  210. data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
  211. data/src/core/lib/event_engine/event_engine.cc +12 -2
  212. data/src/core/lib/event_engine/event_engine_factory.h +5 -0
  213. data/src/core/lib/event_engine/handle_containers.h +67 -0
  214. data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
  215. data/src/core/lib/event_engine/iomgr_engine.h +118 -0
  216. data/src/core/lib/event_engine/memory_allocator.cc +12 -4
  217. data/src/core/lib/event_engine/resolved_address.cc +4 -2
  218. data/src/core/lib/event_engine/slice.cc +102 -0
  219. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  220. data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
  221. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
  222. data/src/core/lib/gpr/log.cc +5 -0
  223. data/src/core/lib/gpr/tls.h +3 -5
  224. data/src/core/lib/gprpp/bitset.h +5 -1
  225. data/src/core/lib/gprpp/chunked_vector.h +4 -0
  226. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  227. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  228. data/src/core/lib/gprpp/examine_stack.h +0 -1
  229. data/src/core/lib/gprpp/fork.cc +3 -6
  230. data/src/core/lib/gprpp/global_config.h +2 -4
  231. data/src/core/lib/gprpp/global_config_env.cc +3 -2
  232. data/src/core/lib/gprpp/global_config_env.h +3 -1
  233. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  234. data/src/core/lib/gprpp/host_port.cc +2 -0
  235. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  236. data/src/core/lib/gprpp/match.h +2 -0
  237. data/src/core/lib/gprpp/memory.h +1 -5
  238. data/src/core/lib/gprpp/orphanable.h +1 -4
  239. data/src/core/lib/gprpp/ref_counted.h +1 -3
  240. data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
  241. data/src/core/lib/gprpp/stat.h +0 -2
  242. data/src/core/lib/gprpp/stat_posix.cc +7 -2
  243. data/src/core/lib/gprpp/status_helper.cc +8 -4
  244. data/src/core/lib/gprpp/status_helper.h +4 -0
  245. data/src/core/lib/gprpp/sync.h +3 -1
  246. data/src/core/lib/gprpp/table.h +10 -0
  247. data/src/core/lib/gprpp/thd.h +2 -5
  248. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  249. data/src/core/lib/gprpp/thd_windows.cc +2 -0
  250. data/src/core/lib/gprpp/time.cc +8 -0
  251. data/src/core/lib/gprpp/time.h +6 -1
  252. data/src/core/lib/gprpp/time_util.cc +4 -0
  253. data/src/core/lib/gprpp/time_util.h +1 -1
  254. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  255. data/src/core/lib/http/format_request.cc +29 -0
  256. data/src/core/lib/http/format_request.h +2 -0
  257. data/src/core/lib/http/httpcli.cc +88 -81
  258. data/src/core/lib/http/httpcli.h +39 -7
  259. data/src/core/lib/http/httpcli_security_connector.cc +3 -4
  260. data/src/core/lib/iomgr/endpoint.cc +4 -4
  261. data/src/core/lib/iomgr/endpoint.h +6 -4
  262. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -4
  263. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  264. data/src/core/lib/iomgr/ev_posix.cc +1 -4
  265. data/src/core/lib/iomgr/exec_ctx.h +1 -2
  266. data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
  267. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  268. data/src/core/lib/iomgr/iomgr.cc +0 -1
  269. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
  270. data/src/core/lib/iomgr/pollset_set.h +1 -2
  271. data/src/core/lib/iomgr/port.h +25 -6
  272. data/src/core/lib/iomgr/resolve_address.cc +8 -0
  273. data/src/core/lib/iomgr/resolve_address.h +21 -14
  274. data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
  275. data/src/core/lib/iomgr/resolve_address_posix.cc +8 -14
  276. data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
  277. data/src/core/lib/iomgr/resolve_address_windows.cc +7 -14
  278. data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
  279. data/src/core/lib/iomgr/sockaddr.h +2 -3
  280. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  281. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  282. data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
  283. data/src/core/lib/iomgr/tcp_client_cfstream.cc +10 -2
  284. data/src/core/lib/iomgr/tcp_client_posix.cc +12 -5
  285. data/src/core/lib/iomgr/tcp_client_windows.cc +13 -6
  286. data/src/core/lib/iomgr/tcp_posix.cc +9 -27
  287. data/src/core/lib/iomgr/tcp_server_posix.cc +26 -12
  288. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +30 -27
  289. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -4
  290. data/src/core/lib/iomgr/tcp_server_windows.cc +13 -5
  291. data/src/core/lib/iomgr/tcp_windows.cc +7 -4
  292. data/src/core/lib/json/json.h +1 -2
  293. data/src/core/lib/json/json_reader.cc +9 -1
  294. data/src/core/lib/json/json_util.cc +7 -0
  295. data/src/core/lib/json/json_util.h +10 -1
  296. data/src/core/lib/json/json_writer.cc +6 -1
  297. data/src/core/lib/promise/activity.cc +1 -1
  298. data/src/core/lib/promise/activity.h +6 -6
  299. data/src/core/lib/promise/arena_promise.h +11 -1
  300. data/src/core/lib/promise/call_push_pull.h +4 -0
  301. data/src/core/lib/promise/context.h +1 -1
  302. data/src/core/lib/promise/detail/basic_seq.h +2 -2
  303. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  304. data/src/core/lib/promise/latch.h +0 -1
  305. data/src/core/lib/promise/loop.h +1 -0
  306. data/src/core/lib/promise/race.h +0 -1
  307. data/src/core/lib/promise/seq.h +0 -2
  308. data/src/core/lib/promise/sleep.cc +2 -0
  309. data/src/core/lib/promise/sleep.h +10 -0
  310. data/src/core/lib/promise/try_seq.h +2 -2
  311. data/src/core/lib/resolver/resolver_factory.h +1 -2
  312. data/src/core/lib/resolver/server_address.cc +9 -3
  313. data/src/core/lib/resolver/server_address.h +4 -4
  314. data/src/core/lib/resource_quota/api.cc +14 -1
  315. data/src/core/lib/resource_quota/api.h +4 -1
  316. data/src/core/lib/resource_quota/arena.cc +0 -6
  317. data/src/core/lib/resource_quota/arena.h +1 -2
  318. data/src/core/lib/resource_quota/memory_quota.cc +47 -5
  319. data/src/core/lib/resource_quota/memory_quota.h +24 -5
  320. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  321. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  322. data/src/core/lib/resource_quota/thread_quota.h +4 -0
  323. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -0
  324. data/src/core/lib/security/credentials/alts/alts_credentials.cc +8 -2
  325. data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
  326. data/src/core/lib/security/credentials/call_creds_util.cc +2 -0
  327. data/src/core/lib/security/credentials/channel_creds_registry.h +1 -0
  328. data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -3
  329. data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -4
  330. data/src/core/lib/security/credentials/credentials.h +17 -10
  331. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +81 -0
  332. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +8 -0
  333. data/src/core/lib/security/credentials/external/external_account_credentials.cc +3 -0
  334. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -0
  335. data/src/core/lib/security/credentials/fake/fake_credentials.cc +13 -3
  336. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  337. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -15
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
  339. data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -1
  340. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  341. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +8 -2
  342. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +4 -4
  343. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -2
  344. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  345. data/src/core/lib/security/credentials/local/local_credentials.cc +8 -2
  346. data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
  347. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -6
  348. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
  349. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +4 -1
  350. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -1
  351. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -2
  352. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +4 -4
  353. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +10 -0
  354. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -7
  355. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +26 -1
  356. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +28 -4
  357. data/src/core/lib/security/credentials/tls/tls_credentials.cc +10 -0
  358. data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
  359. data/src/core/lib/security/credentials/xds/xds_credentials.cc +12 -3
  360. data/src/core/lib/security/credentials/xds/xds_credentials.h +5 -5
  361. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
  362. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
  363. data/src/core/lib/security/security_connector/security_connector.cc +1 -1
  364. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  365. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -1
  366. data/src/core/lib/security/transport/client_auth_filter.cc +6 -8
  367. data/src/core/lib/security/transport/secure_endpoint.cc +23 -12
  368. data/src/core/lib/security/transport/security_handshaker.cc +5 -5
  369. data/src/core/lib/security/transport/security_handshaker.h +1 -1
  370. data/src/core/lib/security/transport/server_auth_filter.cc +3 -2
  371. data/src/core/lib/service_config/service_config.h +4 -8
  372. data/src/core/lib/service_config/service_config_call_data.h +4 -1
  373. data/src/core/lib/service_config/service_config_impl.cc +7 -0
  374. data/src/core/lib/service_config/service_config_impl.h +9 -2
  375. data/src/core/lib/service_config/service_config_parser.cc +8 -0
  376. data/src/core/lib/service_config/service_config_parser.h +7 -0
  377. data/src/core/lib/slice/b64.cc +1 -1
  378. data/src/core/lib/slice/b64.h +2 -0
  379. data/src/core/lib/slice/percent_encoding.cc +4 -1
  380. data/src/core/lib/slice/percent_encoding.h +0 -6
  381. data/src/core/lib/slice/slice.cc +2 -1
  382. data/src/core/lib/slice/slice.h +10 -5
  383. data/src/core/lib/slice/slice_api.cc +1 -1
  384. data/src/core/lib/slice/slice_buffer.cc +50 -23
  385. data/src/core/lib/slice/slice_buffer.h +106 -0
  386. data/src/core/lib/slice/slice_buffer_api.cc +35 -0
  387. data/src/core/lib/slice/slice_internal.h +4 -3
  388. data/src/core/lib/slice/slice_refcount.h +2 -3
  389. data/src/core/lib/slice/slice_refcount_base.h +2 -3
  390. data/src/core/lib/slice/slice_split.cc +3 -0
  391. data/src/core/lib/slice/slice_split.h +0 -4
  392. data/src/core/lib/slice/slice_string_helpers.cc +4 -0
  393. data/src/core/lib/slice/slice_string_helpers.h +1 -4
  394. data/src/core/lib/surface/builtins.cc +7 -2
  395. data/src/core/lib/surface/byte_buffer.cc +7 -1
  396. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  397. data/src/core/lib/surface/call.cc +41 -26
  398. data/src/core/lib/surface/call.h +16 -2
  399. data/src/core/lib/surface/call_details.cc +4 -4
  400. data/src/core/lib/surface/call_log_batch.cc +7 -1
  401. data/src/core/lib/surface/call_test_only.h +4 -1
  402. data/src/core/lib/surface/channel.cc +179 -242
  403. data/src/core/lib/surface/channel.h +94 -57
  404. data/src/core/lib/surface/channel_init.h +2 -0
  405. data/src/core/lib/surface/channel_ping.cc +8 -2
  406. data/src/core/lib/surface/channel_stack_type.cc +0 -2
  407. data/src/core/lib/surface/channel_stack_type.h +0 -2
  408. data/src/core/lib/surface/completion_queue.cc +14 -6
  409. data/src/core/lib/surface/completion_queue.h +5 -1
  410. data/src/core/lib/surface/completion_queue_factory.cc +1 -0
  411. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  412. data/src/core/lib/surface/event_string.cc +1 -7
  413. data/src/core/lib/surface/event_string.h +1 -1
  414. data/src/core/lib/surface/init.cc +17 -45
  415. data/src/core/lib/surface/init.h +0 -8
  416. data/src/core/lib/surface/lame_client.cc +64 -110
  417. data/src/core/lib/surface/lame_client.h +40 -2
  418. data/src/core/lib/surface/metadata_array.cc +2 -0
  419. data/src/core/lib/surface/server.cc +69 -56
  420. data/src/core/lib/surface/server.h +39 -9
  421. data/src/core/lib/surface/validate_metadata.cc +2 -5
  422. data/src/core/lib/surface/validate_metadata.h +3 -0
  423. data/src/core/lib/surface/version.cc +2 -2
  424. data/src/core/lib/transport/bdp_estimator.cc +3 -1
  425. data/src/core/lib/transport/bdp_estimator.h +2 -3
  426. data/src/core/lib/transport/byte_stream.cc +4 -3
  427. data/src/core/lib/transport/byte_stream.h +5 -1
  428. data/src/core/lib/transport/connectivity_state.cc +6 -4
  429. data/src/core/lib/transport/connectivity_state.h +2 -3
  430. data/src/core/lib/transport/error_utils.cc +4 -2
  431. data/src/core/lib/transport/error_utils.h +5 -1
  432. data/src/core/lib/{channel → transport}/handshaker.cc +9 -4
  433. data/src/core/lib/{channel → transport}/handshaker.h +13 -6
  434. data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
  435. data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
  436. data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
  437. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +24 -10
  438. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
  439. data/src/core/lib/transport/metadata_batch.cc +287 -0
  440. data/src/core/lib/transport/metadata_batch.h +133 -264
  441. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  442. data/src/core/lib/transport/parsed_metadata.h +10 -3
  443. data/src/core/lib/transport/status_conversion.cc +2 -0
  444. data/src/core/lib/transport/status_conversion.h +2 -2
  445. data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
  446. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  447. data/src/core/lib/transport/timeout_encoding.cc +2 -6
  448. data/src/core/lib/transport/timeout_encoding.h +5 -1
  449. data/src/core/lib/transport/transport.cc +18 -17
  450. data/src/core/lib/transport/transport.h +28 -2
  451. data/src/core/lib/transport/transport_impl.h +10 -0
  452. data/src/core/lib/transport/transport_op_string.cc +9 -10
  453. data/src/core/lib/uri/uri_parser.cc +11 -3
  454. data/src/core/lib/uri/uri_parser.h +0 -2
  455. data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
  456. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
  457. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
  458. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
  459. data/src/ruby/ext/grpc/extconf.rb +2 -2
  460. data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
  461. data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
  462. data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
  463. data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
  464. data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
  465. data/src/ruby/lib/grpc/grpc_c.so +0 -0
  466. data/src/ruby/lib/grpc/version.rb +1 -1
  467. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  468. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  469. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
  470. metadata +36 -29
  471. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  472. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  473. data/src/core/lib/event_engine/sockaddr.h +0 -44
  474. data/src/core/lib/gprpp/capture.h +0 -76
  475. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  476. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  477. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  478. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  479. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  480. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  481. data/src/core/lib/iomgr/event_engine/promise.h +0 -51
  482. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  483. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
  484. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  485. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  486. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  487. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
@@ -21,22 +21,26 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <inttypes.h>
24
25
  #include <string.h>
25
26
 
27
+ #include <memory>
28
+ #include <string>
29
+ #include <utility>
30
+
26
31
  #include "absl/container/inlined_vector.h"
27
32
 
28
- #include <grpc/support/alloc.h>
33
+ #include <grpc/impl/codegen/connectivity_state.h>
34
+ #include <grpc/impl/codegen/grpc_types.h>
35
+ #include <grpc/support/log.h>
29
36
 
30
- #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
37
+ #include "src/core/ext/filters/client_channel/lb_policy.h"
31
38
  #include "src/core/ext/filters/client_channel/subchannel_interface.h"
32
- #include "src/core/lib/address_utils/sockaddr_utils.h"
33
- #include "src/core/lib/channel/channel_args.h"
34
- #include "src/core/lib/debug/trace.h"
39
+ #include "src/core/lib/gprpp/debug_location.h"
35
40
  #include "src/core/lib/gprpp/manual_constructor.h"
36
41
  #include "src/core/lib/gprpp/orphanable.h"
37
- #include "src/core/lib/gprpp/ref_counted.h"
38
42
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
39
- #include "src/core/lib/iomgr/closure.h"
43
+ #include "src/core/lib/iomgr/iomgr_fwd.h"
40
44
  #include "src/core/lib/resolver/server_address.h"
41
45
  #include "src/core/lib/transport/connectivity_state.h"
42
46
 
@@ -191,7 +195,7 @@ class SubchannelList : public InternallyRefCounted<SubchannelListType> {
191
195
 
192
196
  // Accessors.
193
197
  LoadBalancingPolicy* policy() const { return policy_; }
194
- TraceFlag* tracer() const { return tracer_; }
198
+ const char* tracer() const { return tracer_; }
195
199
 
196
200
  // Resets connection backoff of all subchannels.
197
201
  // TODO(roth): We will probably need to rethink this as part of moving
@@ -204,7 +208,7 @@ class SubchannelList : public InternallyRefCounted<SubchannelListType> {
204
208
  }
205
209
 
206
210
  protected:
207
- SubchannelList(LoadBalancingPolicy* policy, TraceFlag* tracer,
211
+ SubchannelList(LoadBalancingPolicy* policy, const char* tracer,
208
212
  ServerAddressList addresses,
209
213
  LoadBalancingPolicy::ChannelControlHelper* helper,
210
214
  const grpc_channel_args& args);
@@ -220,7 +224,7 @@ class SubchannelList : public InternallyRefCounted<SubchannelListType> {
220
224
  // Backpointer to owning policy.
221
225
  LoadBalancingPolicy* policy_;
222
226
 
223
- TraceFlag* tracer_;
227
+ const char* tracer_;
224
228
 
225
229
  // The list of subchannels.
226
230
  SubchannelVector subchannels_;
@@ -242,12 +246,12 @@ class SubchannelList : public InternallyRefCounted<SubchannelListType> {
242
246
  template <typename SubchannelListType, typename SubchannelDataType>
243
247
  void SubchannelData<SubchannelListType, SubchannelDataType>::Watcher::
244
248
  OnConnectivityStateChange(grpc_connectivity_state new_state) {
245
- if (GRPC_TRACE_FLAG_ENABLED(*subchannel_list_->tracer())) {
249
+ if (GPR_UNLIKELY(subchannel_list_->tracer() != nullptr)) {
246
250
  gpr_log(GPR_INFO,
247
251
  "[%s %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
248
252
  " (subchannel %p): connectivity changed: state=%s, "
249
253
  "shutting_down=%d, pending_watcher=%p",
250
- subchannel_list_->tracer()->name(), subchannel_list_->policy(),
254
+ subchannel_list_->tracer(), subchannel_list_->policy(),
251
255
  subchannel_list_.get(), subchannel_data_->Index(),
252
256
  subchannel_list_->num_subchannels(),
253
257
  subchannel_data_->subchannel_.get(),
@@ -286,11 +290,11 @@ template <typename SubchannelListType, typename SubchannelDataType>
286
290
  void SubchannelData<SubchannelListType, SubchannelDataType>::
287
291
  UnrefSubchannelLocked(const char* reason) {
288
292
  if (subchannel_ != nullptr) {
289
- if (GRPC_TRACE_FLAG_ENABLED(*subchannel_list_->tracer())) {
293
+ if (GPR_UNLIKELY(subchannel_list_->tracer() != nullptr)) {
290
294
  gpr_log(GPR_INFO,
291
295
  "[%s %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
292
296
  " (subchannel %p): unreffing subchannel (%s)",
293
- subchannel_list_->tracer()->name(), subchannel_list_->policy(),
297
+ subchannel_list_->tracer(), subchannel_list_->policy(),
294
298
  subchannel_list_, Index(), subchannel_list_->num_subchannels(),
295
299
  subchannel_.get(), reason);
296
300
  }
@@ -309,11 +313,11 @@ void SubchannelData<SubchannelListType,
309
313
  template <typename SubchannelListType, typename SubchannelDataType>
310
314
  void SubchannelData<SubchannelListType,
311
315
  SubchannelDataType>::StartConnectivityWatchLocked() {
312
- if (GRPC_TRACE_FLAG_ENABLED(*subchannel_list_->tracer())) {
316
+ if (GPR_UNLIKELY(subchannel_list_->tracer() != nullptr)) {
313
317
  gpr_log(GPR_INFO,
314
318
  "[%s %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
315
319
  " (subchannel %p): starting watch (from %s)",
316
- subchannel_list_->tracer()->name(), subchannel_list_->policy(),
320
+ subchannel_list_->tracer(), subchannel_list_->policy(),
317
321
  subchannel_list_, Index(), subchannel_list_->num_subchannels(),
318
322
  subchannel_.get(), ConnectivityStateName(connectivity_state_));
319
323
  }
@@ -329,11 +333,11 @@ void SubchannelData<SubchannelListType,
329
333
  template <typename SubchannelListType, typename SubchannelDataType>
330
334
  void SubchannelData<SubchannelListType, SubchannelDataType>::
331
335
  CancelConnectivityWatchLocked(const char* reason) {
332
- if (GRPC_TRACE_FLAG_ENABLED(*subchannel_list_->tracer())) {
336
+ if (GPR_UNLIKELY(subchannel_list_->tracer() != nullptr)) {
333
337
  gpr_log(GPR_INFO,
334
338
  "[%s %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
335
339
  " (subchannel %p): canceling connectivity watch (%s)",
336
- subchannel_list_->tracer()->name(), subchannel_list_->policy(),
340
+ subchannel_list_->tracer(), subchannel_list_->policy(),
337
341
  subchannel_list_, Index(), subchannel_list_->num_subchannels(),
338
342
  subchannel_.get(), reason);
339
343
  }
@@ -355,17 +359,17 @@ void SubchannelData<SubchannelListType, SubchannelDataType>::ShutdownLocked() {
355
359
 
356
360
  template <typename SubchannelListType, typename SubchannelDataType>
357
361
  SubchannelList<SubchannelListType, SubchannelDataType>::SubchannelList(
358
- LoadBalancingPolicy* policy, TraceFlag* tracer, ServerAddressList addresses,
362
+ LoadBalancingPolicy* policy, const char* tracer,
363
+ ServerAddressList addresses,
359
364
  LoadBalancingPolicy::ChannelControlHelper* helper,
360
365
  const grpc_channel_args& args)
361
- : InternallyRefCounted<SubchannelListType>(
362
- GRPC_TRACE_FLAG_ENABLED(*tracer) ? "SubchannelList" : nullptr),
366
+ : InternallyRefCounted<SubchannelListType>(tracer),
363
367
  policy_(policy),
364
368
  tracer_(tracer) {
365
- if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
369
+ if (GPR_UNLIKELY(tracer_ != nullptr)) {
366
370
  gpr_log(GPR_INFO,
367
371
  "[%s %p] Creating subchannel list %p for %" PRIuPTR " subchannels",
368
- tracer_->name(), policy, this, addresses.size());
372
+ tracer_, policy, this, addresses.size());
369
373
  }
370
374
  subchannels_.reserve(addresses.size());
371
375
  // Create a subchannel for each address.
@@ -374,20 +378,19 @@ SubchannelList<SubchannelListType, SubchannelDataType>::SubchannelList(
374
378
  helper->CreateSubchannel(address, args);
375
379
  if (subchannel == nullptr) {
376
380
  // Subchannel could not be created.
377
- if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
381
+ if (GPR_UNLIKELY(tracer_ != nullptr)) {
378
382
  gpr_log(GPR_INFO,
379
- "[%s %p] could not create subchannel for address %s, "
380
- "ignoring",
381
- tracer_->name(), policy_, address.ToString().c_str());
383
+ "[%s %p] could not create subchannel for address %s, ignoring",
384
+ tracer_, policy_, address.ToString().c_str());
382
385
  }
383
386
  continue;
384
387
  }
385
- if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
388
+ if (GPR_UNLIKELY(tracer_ != nullptr)) {
386
389
  gpr_log(GPR_INFO,
387
390
  "[%s %p] subchannel list %p index %" PRIuPTR
388
391
  ": Created subchannel %p for address %s",
389
- tracer_->name(), policy_, this, subchannels_.size(),
390
- subchannel.get(), address.ToString().c_str());
392
+ tracer_, policy_, this, subchannels_.size(), subchannel.get(),
393
+ address.ToString().c_str());
391
394
  }
392
395
  subchannels_.emplace_back();
393
396
  subchannels_.back().Init(this, std::move(address), std::move(subchannel));
@@ -396,9 +399,9 @@ SubchannelList<SubchannelListType, SubchannelDataType>::SubchannelList(
396
399
 
397
400
  template <typename SubchannelListType, typename SubchannelDataType>
398
401
  SubchannelList<SubchannelListType, SubchannelDataType>::~SubchannelList() {
399
- if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
400
- gpr_log(GPR_INFO, "[%s %p] Destroying subchannel_list %p", tracer_->name(),
401
- policy_, this);
402
+ if (GPR_UNLIKELY(tracer_ != nullptr)) {
403
+ gpr_log(GPR_INFO, "[%s %p] Destroying subchannel_list %p", tracer_, policy_,
404
+ this);
402
405
  }
403
406
  for (auto& sd : subchannels_) {
404
407
  sd.Destroy();
@@ -407,9 +410,9 @@ SubchannelList<SubchannelListType, SubchannelDataType>::~SubchannelList() {
407
410
 
408
411
  template <typename SubchannelListType, typename SubchannelDataType>
409
412
  void SubchannelList<SubchannelListType, SubchannelDataType>::ShutdownLocked() {
410
- if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
411
- gpr_log(GPR_INFO, "[%s %p] Shutting down subchannel_list %p",
412
- tracer_->name(), policy_, this);
413
+ if (GPR_UNLIKELY(tracer_ != nullptr)) {
414
+ gpr_log(GPR_INFO, "[%s %p] Shutting down subchannel_list %p", tracer_,
415
+ policy_, this);
413
416
  }
414
417
  GPR_ASSERT(!shutting_down_);
415
418
  shutting_down_ = true;
@@ -16,27 +16,52 @@
16
16
 
17
17
  #include <grpc/support/port_platform.h>
18
18
 
19
- #include <inttypes.h>
20
- #include <limits.h>
21
- #include <string.h>
19
+ #include <stdlib.h>
20
+
21
+ #include <algorithm>
22
+ #include <cstdint>
23
+ #include <map>
24
+ #include <memory>
25
+ #include <string>
26
+ #include <utility>
27
+ #include <vector>
22
28
 
23
29
  #include "absl/container/inlined_vector.h"
30
+ #include "absl/memory/memory.h"
31
+ #include "absl/status/status.h"
32
+ #include "absl/status/statusor.h"
24
33
  #include "absl/strings/str_cat.h"
34
+ #include "absl/strings/string_view.h"
25
35
 
26
- #include <grpc/grpc.h>
36
+ #include <grpc/impl/codegen/connectivity_state.h>
37
+ #include <grpc/impl/codegen/grpc_types.h>
38
+ #include <grpc/support/log.h>
27
39
 
28
40
  #include "src/core/ext/filters/client_channel/lb_policy.h"
29
41
  #include "src/core/ext/filters/client_channel/lb_policy/address_filtering.h"
30
42
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
31
43
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
32
44
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
45
+ #include "src/core/ext/filters/client_channel/subchannel_interface.h"
33
46
  #include "src/core/lib/channel/channel_args.h"
47
+ #include "src/core/lib/debug/trace.h"
34
48
  #include "src/core/lib/gpr/string.h"
49
+ #include "src/core/lib/gprpp/debug_location.h"
35
50
  #include "src/core/lib/gprpp/orphanable.h"
51
+ #include "src/core/lib/gprpp/ref_counted.h"
36
52
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
53
+ #include "src/core/lib/gprpp/time.h"
54
+ #include "src/core/lib/iomgr/closure.h"
55
+ #include "src/core/lib/iomgr/error.h"
56
+ #include "src/core/lib/iomgr/exec_ctx.h"
57
+ #include "src/core/lib/iomgr/pollset_set.h"
37
58
  #include "src/core/lib/iomgr/timer.h"
38
59
  #include "src/core/lib/iomgr/work_serializer.h"
39
- #include "src/core/lib/transport/error_utils.h"
60
+ #include "src/core/lib/json/json.h"
61
+ #include "src/core/lib/resolver/server_address.h"
62
+ #include "src/core/lib/transport/connectivity_state.h"
63
+
64
+ // IWYU pragma: no_include <type_traits>
40
65
 
41
66
  namespace grpc_core {
42
67
 
@@ -16,24 +16,57 @@
16
16
 
17
17
  #include <grpc/support/port_platform.h>
18
18
 
19
- #include <string.h>
20
-
19
+ #include <algorithm>
20
+ #include <map>
21
+ #include <memory>
22
+ #include <set>
23
+ #include <string>
24
+ #include <utility>
25
+ #include <vector>
26
+
27
+ #include "absl/memory/memory.h"
28
+ #include "absl/status/status.h"
29
+ #include "absl/status/statusor.h"
21
30
  #include "absl/strings/str_cat.h"
31
+ #include "absl/strings/string_view.h"
32
+ #include "absl/types/optional.h"
33
+
34
+ #include <grpc/grpc.h>
35
+ #include <grpc/grpc_security.h>
36
+ #include <grpc/impl/codegen/connectivity_state.h>
37
+ #include <grpc/impl/codegen/grpc_types.h>
38
+ #include <grpc/support/log.h>
22
39
 
23
40
  #include "src/core/ext/filters/client_channel/lb_policy.h"
41
+ #include "src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h"
24
42
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
25
43
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
44
+ #include "src/core/ext/filters/client_channel/subchannel_interface.h"
45
+ #include "src/core/ext/xds/certificate_provider_store.h"
46
+ #include "src/core/ext/xds/xds_bootstrap.h"
26
47
  #include "src/core/ext/xds/xds_certificate_provider.h"
27
48
  #include "src/core/ext/xds/xds_client.h"
28
49
  #include "src/core/ext/xds/xds_cluster.h"
50
+ #include "src/core/ext/xds/xds_common_types.h"
51
+ #include "src/core/ext/xds/xds_resource_type_impl.h"
29
52
  #include "src/core/lib/channel/channel_args.h"
30
- #include "src/core/lib/gprpp/memory.h"
53
+ #include "src/core/lib/debug/trace.h"
54
+ #include "src/core/lib/gprpp/debug_location.h"
31
55
  #include "src/core/lib/gprpp/orphanable.h"
32
56
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
33
- #include "src/core/lib/iomgr/closure.h"
34
- #include "src/core/lib/iomgr/exec_ctx.h"
57
+ #include "src/core/lib/gprpp/time.h"
58
+ #include "src/core/lib/gprpp/unique_type_name.h"
59
+ #include "src/core/lib/iomgr/error.h"
60
+ #include "src/core/lib/iomgr/pollset_set.h"
61
+ #include "src/core/lib/iomgr/work_serializer.h"
62
+ #include "src/core/lib/json/json.h"
63
+ #include "src/core/lib/matchers/matchers.h"
64
+ #include "src/core/lib/resolver/server_address.h"
65
+ #include "src/core/lib/security/credentials/credentials.h"
66
+ #include "src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h"
67
+ #include "src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h"
35
68
  #include "src/core/lib/security/credentials/xds/xds_credentials.h"
36
- #include "src/core/lib/transport/error_utils.h"
69
+ #include "src/core/lib/transport/connectivity_state.h"
37
70
 
38
71
  namespace grpc_core {
39
72
 
@@ -43,6 +76,8 @@ namespace {
43
76
 
44
77
  constexpr char kCds[] = "cds_experimental";
45
78
 
79
+ constexpr int kMaxAggregateClusterRecursionDepth = 16;
80
+
46
81
  // Config for this LB policy.
47
82
  class CdsLbConfig : public LoadBalancingPolicy::Config {
48
83
  public:
@@ -137,8 +172,8 @@ class CdsLb : public LoadBalancingPolicy {
137
172
  void ShutdownLocked() override;
138
173
 
139
174
  absl::StatusOr<bool> GenerateDiscoveryMechanismForCluster(
140
- const std::string& name, Json::Array* discovery_mechanisms,
141
- std::set<std::string>* clusters_needed);
175
+ const std::string& name, int depth, Json::Array* discovery_mechanisms,
176
+ std::set<std::string>* clusters_added);
142
177
  void OnClusterChanged(const std::string& name,
143
178
  XdsClusterResource cluster_data);
144
179
  void OnError(const std::string& name, absl::Status status);
@@ -192,8 +227,7 @@ void CdsLb::Helper::UpdateState(grpc_connectivity_state state,
192
227
  std::unique_ptr<SubchannelPicker> picker) {
193
228
  if (parent_->shutting_down_ || parent_->child_policy_ == nullptr) return;
194
229
  if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
195
- gpr_log(GPR_INFO,
196
- "[cdslb %p] state updated by child: %s message_state: (%s)", this,
230
+ gpr_log(GPR_INFO, "[cdslb %p] state updated by child: %s (%s)", this,
197
231
  ConnectivityStateName(state), status.ToString().c_str());
198
232
  }
199
233
  parent_->channel_control_helper()->UpdateState(state, status,
@@ -314,13 +348,16 @@ void CdsLb::UpdateLocked(UpdateArgs args) {
314
348
  // mechanism config, adds it to *discovery_mechanisms, and returns true.
315
349
  //
316
350
  // For aggregate clusters, may call itself recursively. Returns an
317
- // error if there is a loop in the aggregate cluster graph.
351
+ // error if depth exceeds kMaxAggregateClusterRecursionDepth.
318
352
  absl::StatusOr<bool> CdsLb::GenerateDiscoveryMechanismForCluster(
319
- const std::string& name, Json::Array* discovery_mechanisms,
320
- std::set<std::string>* clusters_needed) {
321
- if (!clusters_needed->insert(name).second) {
322
- return absl::FailedPreconditionError(absl::StrCat(
323
- "aggregate cluster graph contains a loop for cluster ", name));
353
+ const std::string& name, int depth, Json::Array* discovery_mechanisms,
354
+ std::set<std::string>* clusters_added) {
355
+ if (depth == kMaxAggregateClusterRecursionDepth) {
356
+ return absl::FailedPreconditionError(
357
+ "aggregate cluster graph exceeds max depth");
358
+ }
359
+ if (!clusters_added->insert(name).second) {
360
+ return true; // Discovery mechanism already added from some other branch.
324
361
  }
325
362
  auto& state = watchers_[name];
326
363
  // Create a new watcher if needed.
@@ -344,7 +381,7 @@ absl::StatusOr<bool> CdsLb::GenerateDiscoveryMechanismForCluster(
344
381
  for (const std::string& child_name :
345
382
  state.update->prioritized_cluster_names) {
346
383
  auto result = GenerateDiscoveryMechanismForCluster(
347
- child_name, discovery_mechanisms, clusters_needed);
384
+ child_name, depth + 1, discovery_mechanisms, clusters_added);
348
385
  if (!result.ok()) return result;
349
386
  if (!*result) missing_cluster = true;
350
387
  }
@@ -354,6 +391,45 @@ absl::StatusOr<bool> CdsLb::GenerateDiscoveryMechanismForCluster(
354
391
  {"clusterName", name},
355
392
  {"max_concurrent_requests", state.update->max_concurrent_requests},
356
393
  };
394
+ if (state.update->outlier_detection.has_value()) {
395
+ auto& outlier_detection_update = state.update->outlier_detection.value();
396
+ Json::Object outlier_detection;
397
+ outlier_detection["interval"] =
398
+ outlier_detection_update.interval.ToJsonString();
399
+ outlier_detection["baseEjectionTime"] =
400
+ outlier_detection_update.base_ejection_time.ToJsonString();
401
+ outlier_detection["maxEjectionTime"] =
402
+ outlier_detection_update.max_ejection_time.ToJsonString();
403
+ outlier_detection["maxEjectionPercent"] =
404
+ outlier_detection_update.max_ejection_percent;
405
+ if (outlier_detection_update.success_rate_ejection.has_value()) {
406
+ outlier_detection["successRateEjection"] = Json::Object{
407
+ {"stdevFactor",
408
+ outlier_detection_update.success_rate_ejection->stdev_factor},
409
+ {"enforcementPercentage",
410
+ outlier_detection_update.success_rate_ejection
411
+ ->enforcement_percentage},
412
+ {"minimumHosts",
413
+ outlier_detection_update.success_rate_ejection->minimum_hosts},
414
+ {"requestVolume",
415
+ outlier_detection_update.success_rate_ejection->request_volume},
416
+ };
417
+ }
418
+ if (outlier_detection_update.failure_percentage_ejection.has_value()) {
419
+ outlier_detection["failurePercentageEjection"] = Json::Object{
420
+ {"threshold",
421
+ outlier_detection_update.failure_percentage_ejection->threshold},
422
+ {"enforcementPercentage",
423
+ outlier_detection_update.failure_percentage_ejection
424
+ ->enforcement_percentage},
425
+ {"minimumHosts",
426
+ outlier_detection_update.failure_percentage_ejection->minimum_hosts},
427
+ {"requestVolume", outlier_detection_update
428
+ .failure_percentage_ejection->request_volume},
429
+ };
430
+ }
431
+ mechanism["outlierDetection"] = std::move(outlier_detection);
432
+ }
357
433
  switch (state.update->cluster_type) {
358
434
  case XdsClusterResource::ClusterType::EDS:
359
435
  mechanism["type"] = "EDS";
@@ -403,9 +479,9 @@ void CdsLb::OnClusterChanged(const std::string& name,
403
479
  // just started up and not all watchers have returned data yet), then don't
404
480
  // update the child policy at all.
405
481
  Json::Array discovery_mechanisms;
406
- std::set<std::string> clusters_needed;
482
+ std::set<std::string> clusters_added;
407
483
  auto result = GenerateDiscoveryMechanismForCluster(
408
- config_->cluster(), &discovery_mechanisms, &clusters_needed);
484
+ config_->cluster(), /*depth=*/0, &discovery_mechanisms, &clusters_added);
409
485
  if (!result.ok()) {
410
486
  return OnError(name, result.status());
411
487
  }
@@ -480,10 +556,10 @@ void CdsLb::OnClusterChanged(const std::string& name,
480
556
  }
481
557
  child_policy_->UpdateLocked(std::move(args));
482
558
  }
483
- // Remove entries in watchers_ for any clusters not in clusters_needed
559
+ // Remove entries in watchers_ for any clusters not in clusters_added
484
560
  for (auto it = watchers_.begin(); it != watchers_.end();) {
485
561
  const std::string& cluster_name = it->first;
486
- if (clusters_needed.find(cluster_name) != clusters_needed.end()) {
562
+ if (clusters_added.find(cluster_name) != clusters_added.end()) {
487
563
  ++it;
488
564
  continue;
489
565
  }
@@ -506,8 +582,8 @@ void CdsLb::OnError(const std::string& name, absl::Status status) {
506
582
  if (child_policy_ == nullptr) {
507
583
  channel_control_helper()->UpdateState(
508
584
  GRPC_CHANNEL_TRANSIENT_FAILURE, status,
509
- absl::make_unique<TransientFailurePicker>(
510
- absl::UnavailableError(status.ToString())));
585
+ absl::make_unique<TransientFailurePicker>(absl::UnavailableError(
586
+ absl::StrCat(name, ": ", status.ToString()))));
511
587
  }
512
588
  }
513
589
 
@@ -19,6 +19,12 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
+ #include <memory>
23
+ #include <string>
24
+ #include <utility>
25
+
26
+ #include "absl/memory/memory.h"
27
+
22
28
  #include "src/core/ext/xds/xds_client_stats.h"
23
29
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
24
30
  #include "src/core/lib/resolver/server_address.h"
@@ -16,11 +16,29 @@
16
16
 
17
17
  #include <grpc/support/port_platform.h>
18
18
 
19
- #include <atomic>
19
+ #include <stddef.h>
20
+ #include <stdint.h>
20
21
 
22
+ #include <algorithm>
23
+ #include <atomic>
24
+ #include <map>
25
+ #include <memory>
26
+ #include <string>
27
+ #include <utility>
28
+ #include <vector>
29
+
30
+ #include "absl/base/thread_annotations.h"
31
+ #include "absl/memory/memory.h"
32
+ #include "absl/status/status.h"
33
+ #include "absl/status/statusor.h"
34
+ #include "absl/strings/str_cat.h"
21
35
  #include "absl/strings/string_view.h"
36
+ #include "absl/types/optional.h"
37
+ #include "absl/types/variant.h"
22
38
 
23
- #include <grpc/grpc.h>
39
+ #include <grpc/impl/codegen/connectivity_state.h>
40
+ #include <grpc/impl/codegen/grpc_types.h>
41
+ #include <grpc/support/log.h>
24
42
 
25
43
  #include "src/core/ext/filters/client_channel/lb_policy.h"
26
44
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
@@ -28,16 +46,24 @@
28
46
  #include "src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h"
29
47
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
30
48
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
49
+ #include "src/core/ext/filters/client_channel/subchannel_interface.h"
50
+ #include "src/core/ext/xds/xds_bootstrap.h"
31
51
  #include "src/core/ext/xds/xds_client.h"
32
52
  #include "src/core/ext/xds/xds_client_stats.h"
33
53
  #include "src/core/ext/xds/xds_endpoint.h"
34
54
  #include "src/core/lib/channel/channel_args.h"
35
- #include "src/core/lib/gpr/env.h"
55
+ #include "src/core/lib/debug/trace.h"
36
56
  #include "src/core/lib/gpr/string.h"
57
+ #include "src/core/lib/gprpp/debug_location.h"
37
58
  #include "src/core/lib/gprpp/orphanable.h"
59
+ #include "src/core/lib/gprpp/ref_counted.h"
38
60
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
39
61
  #include "src/core/lib/gprpp/sync.h"
40
- #include "src/core/lib/iomgr/work_serializer.h"
62
+ #include "src/core/lib/iomgr/error.h"
63
+ #include "src/core/lib/iomgr/pollset_set.h"
64
+ #include "src/core/lib/json/json.h"
65
+ #include "src/core/lib/resolver/server_address.h"
66
+ #include "src/core/lib/transport/connectivity_state.h"
41
67
 
42
68
  namespace grpc_core {
43
69
 
@@ -16,28 +16,48 @@
16
16
 
17
17
  #include <grpc/support/port_platform.h>
18
18
 
19
+ #include <stddef.h>
20
+
21
+ #include <algorithm>
22
+ #include <map>
23
+ #include <memory>
19
24
  #include <set>
20
25
  #include <string>
26
+ #include <utility>
21
27
  #include <vector>
22
28
 
29
+ #include "absl/memory/memory.h"
23
30
  #include "absl/status/status.h"
31
+ #include "absl/status/statusor.h"
24
32
  #include "absl/strings/str_cat.h"
25
33
  #include "absl/strings/string_view.h"
26
34
 
27
- #include <grpc/grpc.h>
35
+ #include <grpc/impl/codegen/connectivity_state.h>
36
+ #include <grpc/impl/codegen/grpc_types.h>
37
+ #include <grpc/support/log.h>
28
38
 
29
39
  #include "src/core/ext/filters/client_channel/lb_policy.h"
30
40
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
31
41
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
32
42
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
33
43
  #include "src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h"
44
+ #include "src/core/ext/filters/client_channel/subchannel_interface.h"
34
45
  #include "src/core/lib/channel/channel_args.h"
35
- #include "src/core/lib/gpr/string.h"
46
+ #include "src/core/lib/debug/trace.h"
47
+ #include "src/core/lib/gprpp/debug_location.h"
36
48
  #include "src/core/lib/gprpp/orphanable.h"
49
+ #include "src/core/lib/gprpp/ref_counted.h"
37
50
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
51
+ #include "src/core/lib/gprpp/time.h"
52
+ #include "src/core/lib/iomgr/closure.h"
53
+ #include "src/core/lib/iomgr/error.h"
54
+ #include "src/core/lib/iomgr/exec_ctx.h"
55
+ #include "src/core/lib/iomgr/pollset_set.h"
38
56
  #include "src/core/lib/iomgr/timer.h"
39
57
  #include "src/core/lib/iomgr/work_serializer.h"
40
- #include "src/core/lib/transport/error_utils.h"
58
+ #include "src/core/lib/json/json.h"
59
+ #include "src/core/lib/resolver/server_address.h"
60
+ #include "src/core/lib/transport/connectivity_state.h"
41
61
 
42
62
  #define GRPC_XDS_CLUSTER_MANAGER_CHILD_RETENTION_INTERVAL_MS (15 * 60 * 1000)
43
63