grpc 1.32.0 → 1.35.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 (938) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1078 -3049
  3. data/etc/roots.pem +257 -573
  4. data/include/grpc/compression.h +1 -1
  5. data/include/grpc/grpc.h +15 -7
  6. data/include/grpc/grpc_security.h +222 -171
  7. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  8. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  9. data/include/grpc/impl/codegen/grpc_types.h +10 -8
  10. data/include/grpc/impl/codegen/log.h +0 -2
  11. data/include/grpc/impl/codegen/port_platform.h +22 -55
  12. data/include/grpc/impl/codegen/sync_windows.h +4 -0
  13. data/include/grpc/slice_buffer.h +3 -3
  14. data/include/grpc/support/sync.h +3 -3
  15. data/include/grpc/support/time.h +7 -7
  16. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -4
  17. data/src/core/ext/filters/client_channel/client_channel.cc +2776 -1529
  18. data/src/core/ext/filters/client_channel/client_channel.h +0 -4
  19. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  20. data/src/core/ext/filters/client_channel/config_selector.cc +0 -4
  21. data/src/core/ext/filters/client_channel/config_selector.h +40 -8
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +186 -0
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
  24. data/src/core/ext/filters/client_channel/health/health_check_client.cc +10 -7
  25. data/src/core/ext/filters/client_channel/health/health_check_client.h +4 -4
  26. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +5 -6
  27. data/src/core/ext/filters/client_channel/http_proxy.cc +21 -20
  28. data/src/core/ext/filters/client_channel/lb_policy.cc +6 -2
  29. data/src/core/ext/filters/client_channel/lb_policy.h +6 -7
  30. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +48 -35
  31. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  32. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -3
  33. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +201 -190
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +3 -3
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +4 -4
  39. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +50 -20
  40. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +5 -5
  41. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +14 -34
  42. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +6 -6
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +341 -127
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +52 -24
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +24 -0
  46. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +812 -0
  47. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +722 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1262 -0
  49. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  50. data/src/core/ext/filters/client_channel/resolver.cc +3 -1
  51. data/src/core/ext/filters/client_channel/resolver.h +4 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +9 -16
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -32
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +3 -3
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +454 -16
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +7 -10
  58. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -3
  59. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
  60. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +34 -27
  61. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +618 -366
  62. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +28 -0
  63. data/src/core/ext/filters/client_channel/resolver_factory.h +6 -6
  64. data/src/core/ext/filters/client_channel/resolver_registry.cc +40 -39
  65. data/src/core/ext/filters/client_channel/resolver_registry.h +2 -2
  66. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +29 -74
  67. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +12 -10
  68. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -3
  69. data/src/core/ext/filters/client_channel/retry_throttle.h +4 -2
  70. data/src/core/ext/filters/client_channel/server_address.cc +80 -0
  71. data/src/core/ext/filters/client_channel/server_address.h +21 -36
  72. data/src/core/ext/filters/client_channel/service_config.cc +18 -13
  73. data/src/core/ext/filters/client_channel/service_config.h +8 -5
  74. data/src/core/ext/filters/client_channel/service_config_call_data.h +19 -1
  75. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  76. data/src/core/ext/filters/client_channel/service_config_parser.cc +8 -6
  77. data/src/core/ext/filters/client_channel/service_config_parser.h +8 -5
  78. data/src/core/ext/filters/client_channel/subchannel.cc +51 -64
  79. data/src/core/ext/filters/client_channel/subchannel.h +14 -20
  80. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -5
  81. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -2
  82. data/src/core/ext/filters/deadline/deadline_filter.cc +87 -79
  83. data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
  84. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -1
  85. data/src/core/ext/filters/http/client_authority_filter.cc +6 -6
  86. data/src/core/ext/filters/http/http_filters_plugin.cc +6 -3
  87. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  88. data/src/core/ext/filters/max_age/max_age_filter.cc +1 -1
  89. data/src/core/ext/filters/message_size/message_size_filter.cc +3 -2
  90. data/src/core/ext/filters/message_size/message_size_filter.h +2 -1
  91. data/src/core/ext/filters/workarounds/workaround_utils.cc +1 -1
  92. data/src/core/ext/transport/chttp2/client/authority.cc +3 -3
  93. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +1 -1
  94. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +20 -8
  95. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +21 -10
  96. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +26 -14
  97. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +185 -79
  98. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +12 -5
  99. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
  100. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +28 -42
  101. data/src/core/ext/transport/chttp2/transport/flow_control.cc +10 -2
  102. data/src/core/ext/transport/chttp2/transport/flow_control.h +13 -3
  103. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  104. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
  105. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +6 -6
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -8
  107. data/src/core/ext/transport/chttp2/transport/internal.h +5 -1
  108. data/src/core/ext/transport/chttp2/transport/parsing.cc +18 -3
  109. data/src/core/ext/transport/chttp2/transport/writing.cc +2 -3
  110. data/src/core/ext/transport/inproc/inproc_transport.cc +42 -8
  111. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -0
  112. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  113. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
  114. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +52 -32
  115. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +199 -34
  116. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +13 -13
  117. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +44 -17
  118. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +177 -99
  119. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +642 -202
  120. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  121. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +13 -5
  122. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +22 -22
  123. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +47 -21
  124. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +36 -24
  125. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +133 -39
  126. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +4 -4
  127. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +15 -6
  128. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +45 -44
  129. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +200 -78
  130. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +31 -24
  131. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +107 -47
  132. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  133. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +7 -0
  134. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +53 -0
  135. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +149 -0
  136. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +74 -28
  137. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +248 -43
  138. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +39 -39
  139. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +157 -89
  140. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  141. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +17 -9
  142. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +63 -39
  143. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +254 -60
  144. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  145. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +7 -0
  146. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +2 -2
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +9 -2
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +36 -0
  149. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +92 -0
  150. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +13 -13
  151. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +59 -36
  152. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +16 -16
  153. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +61 -29
  154. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +26 -26
  155. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +101 -66
  156. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  157. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +11 -3
  158. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +46 -26
  159. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +179 -68
  160. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +39 -22
  161. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +149 -48
  162. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +2 -2
  163. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +13 -0
  164. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -17
  165. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +96 -33
  166. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -7
  167. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +38 -22
  168. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +321 -194
  169. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +1228 -443
  170. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +8 -7
  171. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +34 -10
  172. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +3 -3
  173. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +17 -3
  174. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +132 -80
  175. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +516 -166
  176. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +1 -0
  177. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +24 -25
  178. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +96 -71
  179. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +12 -8
  180. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +46 -8
  181. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +71 -29
  182. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +296 -63
  183. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +1 -1
  184. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +7 -0
  185. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  186. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +7 -0
  187. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +41 -31
  188. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +165 -64
  189. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +1 -1
  190. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +7 -0
  191. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +1 -1
  192. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +7 -0
  193. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +7 -7
  194. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +31 -16
  195. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +1 -1
  196. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +7 -0
  197. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +1 -1
  198. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +7 -0
  199. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +5 -5
  200. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +25 -11
  201. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  202. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +7 -0
  203. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  204. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +7 -0
  205. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +6 -6
  206. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +29 -8
  207. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +4 -3
  208. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +22 -3
  209. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  210. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +19 -0
  211. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  212. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +46 -3
  213. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +8 -8
  214. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +41 -8
  215. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +1 -0
  216. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +3 -3
  217. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +15 -2
  218. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +3 -3
  219. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +19 -0
  220. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  221. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +7 -0
  222. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -0
  223. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +242 -0
  224. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +830 -0
  225. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +34 -34
  226. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +142 -59
  227. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  228. data/src/core/ext/upb-generated/google/api/http.upb.h +25 -6
  229. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  230. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +7 -0
  231. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +90 -90
  232. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +455 -292
  233. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  234. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +7 -0
  235. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  236. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +7 -0
  237. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +4 -4
  238. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +22 -3
  239. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  240. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +7 -0
  241. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +9 -9
  242. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +55 -0
  243. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  244. data/src/core/ext/upb-generated/google/rpc/status.upb.h +10 -3
  245. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +4 -4
  246. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +11 -3
  247. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +41 -41
  248. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +149 -76
  249. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +5 -5
  250. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +21 -6
  251. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  252. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +13 -0
  253. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +17 -17
  254. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +82 -25
  255. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  256. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +19 -0
  257. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -0
  258. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +64 -0
  259. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -0
  260. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +2 -2
  261. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +9 -2
  262. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  263. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
  264. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +28 -0
  265. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +60 -0
  266. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +52 -0
  267. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +143 -0
  268. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +42 -0
  269. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +84 -0
  270. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +36 -0
  271. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +94 -0
  272. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +54 -0
  273. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +173 -0
  274. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +36 -0
  275. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +92 -0
  276. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +3 -3
  277. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +7 -0
  278. data/src/core/ext/upb-generated/validate/validate.upb.c +64 -64
  279. data/src/core/ext/upb-generated/validate/validate.upb.h +296 -157
  280. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +38 -0
  281. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  282. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
  283. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  284. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +254 -0
  285. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  286. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
  287. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  288. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +558 -0
  289. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
  290. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
  291. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  292. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +133 -0
  293. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  294. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
  295. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  296. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
  297. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  298. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +266 -0
  299. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +125 -0
  300. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +143 -0
  301. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
  302. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
  303. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  304. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
  305. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
  306. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
  307. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  308. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
  309. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
  310. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
  311. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  312. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +228 -0
  313. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +80 -0
  314. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +46 -0
  315. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  316. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
  317. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  318. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +55 -0
  319. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  320. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +110 -0
  321. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  322. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
  323. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
  324. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
  325. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  326. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
  327. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  328. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +190 -0
  329. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +55 -0
  330. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +185 -0
  331. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  332. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +62 -0
  333. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  334. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +97 -0
  335. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
  336. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +915 -0
  337. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +280 -0
  338. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
  339. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  340. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +64 -0
  341. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  342. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +511 -0
  343. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +115 -0
  344. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +48 -0
  345. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  346. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +166 -0
  347. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
  348. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +105 -0
  349. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  350. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +249 -0
  351. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
  352. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
  353. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
  354. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
  355. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  356. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +152 -0
  357. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +60 -0
  358. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +83 -0
  359. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
  360. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +82 -0
  361. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
  362. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +83 -0
  363. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  364. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +86 -0
  365. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
  366. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
  367. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
  368. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
  369. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  370. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
  371. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  372. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
  373. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  374. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +73 -0
  375. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  376. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +72 -0
  377. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  378. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
  379. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  380. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
  381. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  382. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
  383. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  384. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
  385. data/src/core/ext/{upb-generated/gogoproto/gogo.upb.h → upbdefs-generated/envoy/type/v3/http.upbdefs.h} +10 -9
  386. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
  387. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  388. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
  389. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  390. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
  391. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  392. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  393. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  394. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
  395. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  396. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +39 -0
  397. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  398. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
  399. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  400. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +40 -0
  401. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  402. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
  403. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  404. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
  405. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  406. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +40 -0
  407. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  408. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
  409. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  410. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
  411. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  412. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
  413. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  414. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
  415. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  416. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
  417. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  418. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
  419. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  420. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
  421. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  422. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +42 -0
  423. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +35 -0
  424. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +62 -0
  425. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +40 -0
  426. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +45 -0
  427. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +40 -0
  428. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +49 -0
  429. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +35 -0
  430. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +68 -0
  431. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +40 -0
  432. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +51 -0
  433. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +35 -0
  434. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +307 -0
  435. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  436. data/src/core/ext/xds/certificate_provider_factory.h +61 -0
  437. data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
  438. data/src/core/ext/xds/certificate_provider_registry.h +57 -0
  439. data/src/core/ext/xds/certificate_provider_store.cc +87 -0
  440. data/src/core/ext/xds/certificate_provider_store.h +112 -0
  441. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +144 -0
  442. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +69 -0
  443. data/src/core/ext/xds/xds_api.cc +687 -767
  444. data/src/core/ext/xds/xds_api.h +207 -98
  445. data/src/core/ext/xds/xds_bootstrap.cc +172 -25
  446. data/src/core/ext/xds/xds_bootstrap.h +23 -8
  447. data/src/core/ext/xds/xds_certificate_provider.cc +299 -0
  448. data/src/core/ext/xds/xds_certificate_provider.h +112 -0
  449. data/src/core/ext/xds/xds_channel_args.h +6 -3
  450. data/src/core/ext/xds/xds_client.cc +617 -494
  451. data/src/core/ext/xds/xds_client.h +118 -58
  452. data/src/core/ext/xds/xds_client_stats.cc +59 -16
  453. data/src/core/ext/xds/xds_client_stats.h +35 -7
  454. data/src/core/ext/xds/xds_server_config_fetcher.cc +131 -0
  455. data/src/core/lib/channel/channel_args.cc +9 -8
  456. data/src/core/lib/channel/channel_args.h +0 -1
  457. data/src/core/lib/channel/channel_trace.cc +4 -2
  458. data/src/core/lib/channel/channel_trace.h +1 -1
  459. data/src/core/lib/channel/channelz.cc +23 -59
  460. data/src/core/lib/channel/channelz.h +13 -22
  461. data/src/core/lib/channel/channelz_registry.cc +12 -11
  462. data/src/core/lib/channel/channelz_registry.h +3 -1
  463. data/src/core/lib/channel/handshaker.cc +2 -2
  464. data/src/core/lib/channel/handshaker.h +2 -2
  465. data/src/core/lib/compression/compression.cc +8 -4
  466. data/src/core/lib/compression/compression_args.cc +3 -2
  467. data/src/core/lib/compression/compression_internal.cc +10 -5
  468. data/src/core/lib/compression/compression_internal.h +2 -1
  469. data/src/core/lib/compression/stream_compression_identity.cc +1 -3
  470. data/src/core/lib/debug/stats.h +2 -2
  471. data/src/core/lib/debug/stats_data.cc +1 -0
  472. data/src/core/lib/debug/stats_data.h +13 -13
  473. data/src/core/lib/gpr/alloc.cc +3 -2
  474. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  475. data/src/core/lib/gpr/log.cc +53 -16
  476. data/src/core/lib/gpr/log_linux.cc +19 -3
  477. data/src/core/lib/gpr/log_posix.cc +15 -1
  478. data/src/core/lib/gpr/log_windows.cc +18 -4
  479. data/src/core/lib/gpr/murmur_hash.cc +1 -1
  480. data/src/core/lib/gpr/spinlock.h +10 -2
  481. data/src/core/lib/gpr/string.cc +23 -22
  482. data/src/core/lib/gpr/string.h +5 -6
  483. data/src/core/lib/gpr/sync.cc +4 -4
  484. data/src/core/lib/gpr/time.cc +12 -12
  485. data/src/core/lib/gpr/time_precise.cc +5 -2
  486. data/src/core/lib/gpr/time_precise.h +6 -2
  487. data/src/core/lib/gpr/tls.h +4 -0
  488. data/src/core/lib/gpr/tls_msvc.h +2 -0
  489. data/src/core/lib/gpr/tls_stdcpp.h +48 -0
  490. data/src/core/lib/gpr/useful.h +5 -4
  491. data/src/core/lib/gprpp/arena.h +3 -2
  492. data/src/core/lib/gprpp/dual_ref_counted.h +331 -0
  493. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  494. data/src/core/lib/gprpp/examine_stack.h +46 -0
  495. data/src/core/lib/gprpp/fork.cc +2 -2
  496. data/src/core/lib/gprpp/manual_constructor.h +1 -1
  497. data/src/core/lib/gprpp/orphanable.h +4 -8
  498. data/src/core/lib/gprpp/ref_counted.h +91 -68
  499. data/src/core/lib/gprpp/ref_counted_ptr.h +166 -7
  500. data/src/core/lib/{security/authorization/mock_cel/statusor.h → gprpp/stat.h} +13 -25
  501. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  502. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  503. data/src/core/lib/gprpp/thd.h +2 -2
  504. data/src/core/lib/gprpp/thd_posix.cc +42 -37
  505. data/src/core/lib/gprpp/thd_windows.cc +3 -1
  506. data/src/core/lib/http/httpcli.cc +1 -1
  507. data/src/core/lib/http/httpcli.h +2 -3
  508. data/src/core/lib/http/httpcli_security_connector.cc +1 -1
  509. data/src/core/lib/http/parser.cc +47 -27
  510. data/src/core/lib/iomgr/call_combiner.cc +8 -5
  511. data/src/core/lib/iomgr/combiner.cc +2 -1
  512. data/src/core/lib/iomgr/endpoint.h +1 -1
  513. data/src/core/lib/iomgr/endpoint_cfstream.cc +9 -5
  514. data/src/core/lib/iomgr/error.cc +17 -12
  515. data/src/core/lib/iomgr/error_internal.h +1 -1
  516. data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -13
  517. data/src/core/lib/iomgr/ev_epollex_linux.cc +25 -17
  518. data/src/core/lib/iomgr/ev_poll_posix.cc +9 -7
  519. data/src/core/lib/iomgr/exec_ctx.cc +1 -1
  520. data/src/core/lib/iomgr/exec_ctx.h +16 -12
  521. data/src/core/lib/iomgr/executor.cc +2 -1
  522. data/src/core/lib/iomgr/executor.h +1 -1
  523. data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
  524. data/src/core/lib/iomgr/executor/threadpool.h +4 -4
  525. data/src/core/lib/iomgr/iomgr.cc +1 -1
  526. data/src/core/lib/iomgr/load_file.h +1 -1
  527. data/src/core/lib/iomgr/lockfree_event.cc +19 -14
  528. data/src/core/lib/iomgr/lockfree_event.h +2 -2
  529. data/src/core/lib/iomgr/parse_address.cc +127 -43
  530. data/src/core/lib/iomgr/parse_address.h +32 -8
  531. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
  532. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +1 -1
  533. data/src/core/lib/iomgr/pollset_set_custom.cc +1 -1
  534. data/src/core/lib/iomgr/python_util.h +4 -4
  535. data/src/core/lib/iomgr/resolve_address.cc +4 -4
  536. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -5
  537. data/src/core/lib/iomgr/resource_quota.cc +4 -4
  538. data/src/core/lib/iomgr/sockaddr_utils.cc +10 -10
  539. data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
  540. data/src/core/lib/iomgr/socket_factory_posix.cc +3 -2
  541. data/src/core/lib/iomgr/socket_mutator.cc +3 -2
  542. data/src/core/lib/iomgr/tcp_client.cc +3 -3
  543. data/src/core/lib/iomgr/tcp_client_custom.cc +7 -6
  544. data/src/core/lib/iomgr/tcp_custom.cc +22 -17
  545. data/src/core/lib/iomgr/tcp_posix.cc +12 -8
  546. data/src/core/lib/iomgr/tcp_server_custom.cc +28 -22
  547. data/src/core/lib/iomgr/timer_custom.cc +5 -5
  548. data/src/core/lib/iomgr/timer_generic.cc +3 -3
  549. data/src/core/lib/iomgr/timer_manager.cc +2 -2
  550. data/src/core/lib/iomgr/udp_server.cc +1 -2
  551. data/src/core/lib/iomgr/udp_server.h +1 -2
  552. data/src/core/lib/iomgr/unix_sockets_posix.cc +32 -21
  553. data/src/core/lib/iomgr/unix_sockets_posix.h +5 -0
  554. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +7 -0
  555. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  556. data/src/core/lib/json/json.h +12 -2
  557. data/src/core/lib/json/json_reader.cc +8 -4
  558. data/src/core/lib/json/json_util.cc +58 -0
  559. data/src/core/lib/json/json_util.h +204 -0
  560. data/src/core/lib/json/json_writer.cc +2 -1
  561. data/src/core/lib/security/authorization/evaluate_args.cc +5 -10
  562. data/src/core/lib/security/authorization/evaluate_args.h +1 -1
  563. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +3 -1
  564. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +5 -4
  565. data/src/core/lib/security/authorization/mock_cel/cel_value.h +4 -0
  566. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +6 -6
  567. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +10 -9
  568. data/src/core/lib/security/context/security_context.cc +4 -3
  569. data/src/core/lib/security/context/security_context.h +3 -1
  570. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  571. data/src/core/lib/security/credentials/credentials.cc +7 -7
  572. data/src/core/lib/security/credentials/credentials.h +3 -3
  573. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +413 -0
  574. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +80 -0
  575. data/src/core/lib/security/credentials/external/aws_request_signer.cc +213 -0
  576. data/src/core/lib/security/credentials/external/aws_request_signer.h +72 -0
  577. data/src/core/lib/security/credentials/external/external_account_credentials.cc +497 -0
  578. data/src/core/lib/security/credentials/external/external_account_credentials.h +120 -0
  579. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +135 -0
  580. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +48 -0
  581. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +213 -0
  582. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +58 -0
  583. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -1
  584. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +18 -12
  585. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +64 -0
  586. data/src/core/lib/security/credentials/jwt/json_token.cc +6 -3
  587. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
  588. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -4
  589. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +39 -46
  590. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -4
  591. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +1 -1
  592. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -5
  593. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
  594. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +346 -0
  595. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +213 -0
  596. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +399 -0
  597. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +138 -0
  598. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +78 -150
  599. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +57 -187
  600. data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -12
  601. data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
  602. data/src/core/lib/security/credentials/tls/tls_utils.cc +91 -0
  603. data/src/core/lib/security/credentials/tls/tls_utils.h +38 -0
  604. data/src/core/lib/security/credentials/xds/xds_credentials.cc +175 -0
  605. data/src/core/lib/security/credentials/xds/xds_credentials.h +69 -0
  606. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -1
  607. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -13
  608. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +121 -0
  609. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +87 -0
  610. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  611. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  612. data/src/core/lib/security/security_connector/local/local_security_connector.cc +3 -3
  613. data/src/core/lib/security/security_connector/security_connector.cc +4 -3
  614. data/src/core/lib/security/security_connector/security_connector.h +4 -2
  615. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -4
  616. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  617. data/src/core/lib/security/security_connector/ssl_utils.h +19 -19
  618. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +342 -279
  619. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +105 -61
  620. data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
  621. data/src/core/lib/security/transport/security_handshaker.cc +3 -3
  622. data/src/core/lib/security/transport/server_auth_filter.cc +2 -1
  623. data/src/core/lib/security/util/json_util.h +1 -0
  624. data/src/core/lib/slice/slice.cc +7 -4
  625. data/src/core/lib/slice/slice_buffer.cc +2 -1
  626. data/src/core/lib/slice/slice_intern.cc +6 -7
  627. data/src/core/lib/slice/slice_internal.h +2 -2
  628. data/src/core/lib/surface/call.cc +41 -32
  629. data/src/core/lib/surface/call_details.cc +8 -8
  630. data/src/core/lib/surface/channel.cc +25 -41
  631. data/src/core/lib/surface/channel.h +9 -3
  632. data/src/core/lib/surface/channel_init.cc +1 -1
  633. data/src/core/lib/surface/completion_queue.cc +30 -24
  634. data/src/core/lib/surface/completion_queue.h +16 -16
  635. data/src/core/lib/surface/init.cc +32 -14
  636. data/src/core/lib/surface/lame_client.cc +20 -46
  637. data/src/core/lib/surface/lame_client.h +4 -0
  638. data/src/core/lib/surface/server.cc +63 -17
  639. data/src/core/lib/surface/server.h +39 -7
  640. data/src/core/lib/surface/validate_metadata.h +3 -0
  641. data/src/core/lib/surface/version.cc +2 -2
  642. data/src/core/lib/transport/authority_override.cc +6 -4
  643. data/src/core/lib/transport/authority_override.h +7 -2
  644. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  645. data/src/core/lib/transport/bdp_estimator.h +2 -1
  646. data/src/core/lib/transport/byte_stream.h +3 -3
  647. data/src/core/lib/transport/connectivity_state.h +11 -9
  648. data/src/core/lib/transport/error_utils.h +1 -1
  649. data/src/core/lib/transport/metadata.cc +11 -1
  650. data/src/core/lib/transport/metadata.h +2 -2
  651. data/src/core/lib/transport/metadata_batch.h +4 -4
  652. data/src/core/lib/transport/static_metadata.cc +1 -1
  653. data/src/core/lib/transport/status_metadata.cc +4 -3
  654. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  655. data/src/core/lib/transport/transport.cc +5 -3
  656. data/src/core/lib/transport/transport.h +8 -8
  657. data/src/core/lib/uri/uri_parser.cc +131 -249
  658. data/src/core/lib/uri/uri_parser.h +57 -21
  659. data/src/core/plugin_registry/grpc_plugin_registry.cc +41 -20
  660. data/src/core/tsi/alts/crypt/gsec.cc +5 -4
  661. data/src/core/tsi/alts/frame_protector/frame_handler.cc +8 -6
  662. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  663. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +27 -26
  664. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
  665. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -4
  666. data/src/core/tsi/fake_transport_security.cc +6 -3
  667. data/src/core/tsi/local_transport_security.cc +5 -1
  668. data/src/core/tsi/local_transport_security.h +6 -7
  669. data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -0
  670. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  671. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -1
  672. data/src/core/tsi/ssl_transport_security.cc +78 -58
  673. data/src/core/tsi/ssl_transport_security.h +9 -6
  674. data/src/core/tsi/transport_security.cc +10 -8
  675. data/src/core/tsi/transport_security_interface.h +1 -1
  676. data/src/ruby/ext/grpc/extconf.rb +1 -1
  677. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  678. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +36 -16
  679. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +70 -40
  680. data/src/ruby/lib/grpc/version.rb +1 -1
  681. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +28 -0
  682. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +18 -0
  683. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -6
  684. data/third_party/abseil-cpp/absl/algorithm/container.h +59 -22
  685. data/third_party/abseil-cpp/absl/base/attributes.h +99 -38
  686. data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
  687. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  688. data/third_party/abseil-cpp/absl/base/config.h +60 -17
  689. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +428 -335
  690. data/third_party/abseil-cpp/absl/base/internal/bits.h +17 -16
  691. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -0
  692. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  693. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  694. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +1 -1
  695. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +29 -1
  696. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +2 -2
  697. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +7 -5
  698. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +25 -38
  699. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +19 -25
  700. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +8 -0
  701. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
  702. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  703. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  704. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +2 -2
  705. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
  706. data/third_party/abseil-cpp/absl/base/macros.h +36 -109
  707. data/third_party/abseil-cpp/absl/base/optimization.h +61 -1
  708. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  709. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  710. data/third_party/abseil-cpp/absl/base/thread_annotations.h +94 -39
  711. data/third_party/abseil-cpp/absl/container/fixed_array.h +42 -25
  712. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  713. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +2 -1
  714. data/third_party/abseil-cpp/absl/container/inlined_vector.h +33 -36
  715. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -2
  716. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +33 -8
  717. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +49 -29
  718. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +15 -0
  719. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +24 -7
  720. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -1
  721. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +35 -11
  722. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +10 -9
  723. data/third_party/abseil-cpp/absl/container/internal/layout.h +7 -5
  724. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
  725. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +55 -34
  726. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +5 -4
  727. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +66 -16
  728. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +4 -0
  729. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +13 -4
  730. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +43 -24
  731. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +12 -3
  732. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +10 -2
  733. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +22 -1
  734. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +0 -21
  735. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +12 -1
  736. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  737. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +100 -20
  738. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  739. data/third_party/abseil-cpp/absl/functional/function_ref.h +1 -1
  740. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  741. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
  742. data/third_party/abseil-cpp/absl/hash/hash.h +6 -5
  743. data/third_party/abseil-cpp/absl/hash/internal/hash.h +73 -65
  744. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  745. data/third_party/abseil-cpp/absl/meta/type_traits.h +2 -8
  746. data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
  747. data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
  748. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +51 -0
  749. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +399 -0
  750. data/third_party/abseil-cpp/absl/status/status.cc +4 -6
  751. data/third_party/abseil-cpp/absl/status/status.h +502 -113
  752. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +5 -10
  753. data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
  754. data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
  755. data/third_party/abseil-cpp/absl/strings/charconv.cc +2 -2
  756. data/third_party/abseil-cpp/absl/strings/cord.cc +91 -112
  757. data/third_party/abseil-cpp/absl/strings/cord.h +360 -205
  758. data/third_party/abseil-cpp/absl/strings/escaping.cc +9 -9
  759. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  760. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  761. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  762. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  763. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +45 -23
  764. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +222 -136
  765. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +136 -64
  766. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +1 -1
  767. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +14 -21
  768. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -14
  769. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
  770. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
  771. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +999 -87
  772. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +3 -3
  773. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  774. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +8 -6
  775. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +13 -11
  776. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -2
  777. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  778. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  779. data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
  780. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  781. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -0
  782. data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
  783. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
  784. data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
  785. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
  786. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +3 -3
  787. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +28 -28
  788. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +4 -16
  789. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -1
  790. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +8 -0
  791. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -2
  792. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -64
  793. data/third_party/abseil-cpp/absl/synchronization/mutex.h +15 -6
  794. data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
  795. data/third_party/abseil-cpp/absl/time/clock.cc +3 -3
  796. data/third_party/abseil-cpp/absl/time/duration.cc +90 -59
  797. data/third_party/abseil-cpp/absl/time/format.cc +43 -36
  798. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +26 -16
  799. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
  800. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
  801. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
  802. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
  803. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
  804. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
  805. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
  806. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +8 -7
  807. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -6
  808. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
  809. data/third_party/abseil-cpp/absl/time/time.h +15 -16
  810. data/third_party/abseil-cpp/absl/types/internal/variant.h +4 -4
  811. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  812. data/third_party/abseil-cpp/absl/types/span.h +49 -36
  813. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  814. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  815. data/third_party/boringssl-with-bazel/err_data.c +469 -463
  816. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +0 -6
  817. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  818. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +9 -43
  819. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
  820. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +34 -0
  821. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +4 -0
  822. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
  823. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +173 -35
  824. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +2 -0
  825. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +4 -0
  826. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +30 -10
  827. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +56 -22
  828. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +8 -2
  829. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +98 -11
  830. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +51 -6
  831. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +118 -49
  832. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +267 -95
  833. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +210 -34
  834. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  835. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +3 -3
  836. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +6 -4
  837. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +3 -3
  838. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -1
  839. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +7 -2
  840. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +21 -18
  841. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -1
  842. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +24 -3
  843. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +3 -3
  844. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
  845. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +3 -3
  846. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +29 -35
  847. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +13 -2
  848. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +9 -8
  849. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +10 -10
  850. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +2 -2
  851. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +28 -40
  852. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +3 -1
  853. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
  854. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
  855. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +14 -14
  856. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +7 -3
  857. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +2 -2
  858. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
  859. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
  860. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +55 -8
  861. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -1
  862. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +24 -0
  863. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +7 -5
  864. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +0 -1
  865. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +6 -3
  866. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
  867. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +6 -0
  868. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +1 -1
  869. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  870. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +12 -0
  871. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +9 -0
  872. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +4 -1
  873. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  874. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
  875. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +64 -3
  876. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  877. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +42 -14
  878. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +188 -78
  879. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +482 -432
  880. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  881. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +35 -0
  882. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +18 -18
  883. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -3
  884. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1 -1
  885. data/third_party/boringssl-with-bazel/src/ssl/internal.h +45 -10
  886. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +42 -1
  887. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +8 -9
  888. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +67 -0
  889. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +11 -14
  890. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +216 -11
  891. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -2
  892. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +57 -19
  893. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +135 -41
  894. data/third_party/upb/third_party/wyhash/wyhash.h +145 -0
  895. data/third_party/upb/upb/decode.c +248 -167
  896. data/third_party/upb/upb/decode.h +20 -1
  897. data/third_party/upb/upb/decode.int.h +163 -0
  898. data/third_party/upb/upb/decode_fast.c +1040 -0
  899. data/third_party/upb/upb/decode_fast.h +126 -0
  900. data/third_party/upb/upb/def.c +2178 -0
  901. data/third_party/upb/upb/def.h +315 -0
  902. data/third_party/upb/upb/def.hpp +439 -0
  903. data/third_party/upb/upb/encode.c +227 -169
  904. data/third_party/upb/upb/encode.h +27 -2
  905. data/third_party/upb/upb/json_decode.c +1443 -0
  906. data/third_party/upb/upb/json_decode.h +23 -0
  907. data/third_party/upb/upb/json_encode.c +713 -0
  908. data/third_party/upb/upb/json_encode.h +36 -0
  909. data/third_party/upb/upb/msg.c +167 -88
  910. data/third_party/upb/upb/msg.h +174 -34
  911. data/third_party/upb/upb/port_def.inc +74 -61
  912. data/third_party/upb/upb/port_undef.inc +3 -7
  913. data/third_party/upb/upb/reflection.c +408 -0
  914. data/third_party/upb/upb/reflection.h +168 -0
  915. data/third_party/upb/upb/table.c +34 -197
  916. data/third_party/upb/upb/table.int.h +14 -5
  917. data/third_party/upb/upb/text_encode.c +421 -0
  918. data/third_party/upb/upb/text_encode.h +38 -0
  919. data/third_party/upb/upb/upb.c +18 -41
  920. data/third_party/upb/upb/upb.h +36 -7
  921. data/third_party/upb/upb/upb.hpp +4 -4
  922. data/third_party/upb/upb/upb.int.h +29 -0
  923. metadata +288 -54
  924. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -946
  925. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +0 -537
  926. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +0 -1141
  927. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -485
  928. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
  929. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -354
  930. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -142
  931. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
  932. data/src/core/ext/xds/xds_channel.h +0 -46
  933. data/src/core/ext/xds/xds_channel_secure.cc +0 -103
  934. data/src/core/lib/gprpp/map.h +0 -53
  935. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
  936. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
  937. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
  938. data/third_party/upb/upb/port.c +0 -26
@@ -25,6 +25,8 @@
25
25
  #include <grpc/support/atm.h>
26
26
  #include <grpc/support/string_util.h>
27
27
 
28
+ #include "absl/memory/memory.h"
29
+
28
30
  #include "src/core/lib/gprpp/sync.h"
29
31
 
30
32
  namespace grpc_core {
@@ -52,7 +54,7 @@ void GrpcLbClientStats::AddCallDropped(const char* token) {
52
54
  // Record the drop.
53
55
  MutexLock lock(&drop_count_mu_);
54
56
  if (drop_token_counts_ == nullptr) {
55
- drop_token_counts_.reset(new DroppedCallCounts());
57
+ drop_token_counts_ = absl::make_unique<DroppedCallCounts>();
56
58
  }
57
59
  for (size_t i = 0; i < drop_token_counts_->size(); ++i) {
58
60
  if (strcmp((*drop_token_counts_)[i].token.get(), token) == 0) {
@@ -155,13 +155,13 @@ grpc_millis grpc_grpclb_duration_to_millis(
155
155
 
156
156
  } // namespace
157
157
 
158
- bool GrpcLbResponseParse(const grpc_slice& encoded_grpc_grpclb_response,
158
+ bool GrpcLbResponseParse(const grpc_slice& serialized_response,
159
159
  upb_arena* arena, GrpcLbResponse* result) {
160
160
  grpc_lb_v1_LoadBalanceResponse* response =
161
161
  grpc_lb_v1_LoadBalanceResponse_parse(
162
162
  reinterpret_cast<const char*>(
163
- GRPC_SLICE_START_PTR(encoded_grpc_grpclb_response)),
164
- GRPC_SLICE_LENGTH(encoded_grpc_grpclb_response), arena);
163
+ GRPC_SLICE_START_PTR(serialized_response)),
164
+ GRPC_SLICE_LENGTH(serialized_response), arena);
165
165
  // Handle serverlist responses.
166
166
  if (ParseServerList(*response, &result->serverlist)) {
167
167
  result->type = result->SERVERLIST;
@@ -66,7 +66,7 @@ grpc_slice GrpcLbLoadReportRequestCreate(
66
66
 
67
67
  // Deserialize a grpclb response.
68
68
  bool GrpcLbResponseParse(const grpc_slice& serialized_response,
69
- upb_arena* arena, GrpcLbResponse* response);
69
+ upb_arena* arena, GrpcLbResponse* result);
70
70
 
71
71
  } // namespace grpc_core
72
72
 
@@ -55,7 +55,7 @@ class PickFirst : public LoadBalancingPolicy {
55
55
  void ResetBackoffLocked() override;
56
56
 
57
57
  private:
58
- ~PickFirst();
58
+ ~PickFirst() override;
59
59
 
60
60
  class PickFirstSubchannelList;
61
61
 
@@ -84,9 +84,9 @@ class PickFirst : public LoadBalancingPolicy {
84
84
  PickFirstSubchannelData> {
85
85
  public:
86
86
  PickFirstSubchannelList(PickFirst* policy, TraceFlag* tracer,
87
- const ServerAddressList& addresses,
87
+ ServerAddressList addresses,
88
88
  const grpc_channel_args& args)
89
- : SubchannelList(policy, tracer, addresses,
89
+ : SubchannelList(policy, tracer, std::move(addresses),
90
90
  policy->channel_control_helper(), args) {
91
91
  // Need to maintain a ref to the LB policy as long as we maintain
92
92
  // any references to subchannels, since the subchannels'
@@ -94,7 +94,7 @@ class PickFirst : public LoadBalancingPolicy {
94
94
  policy->Ref(DEBUG_LOCATION, "subchannel_list").release();
95
95
  }
96
96
 
97
- ~PickFirstSubchannelList() {
97
+ ~PickFirstSubchannelList() override {
98
98
  PickFirst* p = static_cast<PickFirst*>(policy());
99
99
  p->Unref(DEBUG_LOCATION, "subchannel_list");
100
100
  }
@@ -56,23 +56,24 @@ constexpr int kDefaultChildFailoverTimeoutMs = 10000;
56
56
  // Config for priority LB policy.
57
57
  class PriorityLbConfig : public LoadBalancingPolicy::Config {
58
58
  public:
59
- PriorityLbConfig(
60
- std::map<std::string, RefCountedPtr<LoadBalancingPolicy::Config>>
61
- children,
62
- std::vector<std::string> priorities)
59
+ struct PriorityLbChild {
60
+ RefCountedPtr<LoadBalancingPolicy::Config> config;
61
+ bool ignore_reresolution_requests = false;
62
+ };
63
+
64
+ PriorityLbConfig(std::map<std::string, PriorityLbChild> children,
65
+ std::vector<std::string> priorities)
63
66
  : children_(std::move(children)), priorities_(std::move(priorities)) {}
64
67
 
65
68
  const char* name() const override { return kPriority; }
66
69
 
67
- const std::map<std::string, RefCountedPtr<LoadBalancingPolicy::Config>>&
68
- children() const {
70
+ const std::map<std::string, PriorityLbChild>& children() const {
69
71
  return children_;
70
72
  }
71
73
  const std::vector<std::string>& priorities() const { return priorities_; }
72
74
 
73
75
  private:
74
- const std::map<std::string, RefCountedPtr<LoadBalancingPolicy::Config>>
75
- children_;
76
+ const std::map<std::string, PriorityLbChild> children_;
76
77
  const std::vector<std::string> priorities_;
77
78
  };
78
79
 
@@ -93,13 +94,14 @@ class PriorityLb : public LoadBalancingPolicy {
93
94
  public:
94
95
  ChildPriority(RefCountedPtr<PriorityLb> priority_policy, std::string name);
95
96
 
96
- ~ChildPriority() {
97
+ ~ChildPriority() override {
97
98
  priority_policy_.reset(DEBUG_LOCATION, "ChildPriority");
98
99
  }
99
100
 
100
101
  const std::string& name() const { return name_; }
101
102
 
102
- void UpdateLocked(RefCountedPtr<LoadBalancingPolicy::Config> config);
103
+ void UpdateLocked(RefCountedPtr<LoadBalancingPolicy::Config> config,
104
+ bool ignore_reresolution_requests);
103
105
  void ExitIdleLocked();
104
106
  void ResetBackoffLocked();
105
107
  void DeactivateLocked();
@@ -152,10 +154,10 @@ class PriorityLb : public LoadBalancingPolicy {
152
154
  explicit Helper(RefCountedPtr<ChildPriority> priority)
153
155
  : priority_(std::move(priority)) {}
154
156
 
155
- ~Helper() { priority_.reset(DEBUG_LOCATION, "Helper"); }
157
+ ~Helper() override { priority_.reset(DEBUG_LOCATION, "Helper"); }
156
158
 
157
159
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
158
- const grpc_channel_args& args) override;
160
+ ServerAddress address, const grpc_channel_args& args) override;
159
161
  void UpdateState(grpc_connectivity_state state,
160
162
  const absl::Status& status,
161
163
  std::unique_ptr<SubchannelPicker> picker) override;
@@ -184,6 +186,7 @@ class PriorityLb : public LoadBalancingPolicy {
184
186
 
185
187
  RefCountedPtr<PriorityLb> priority_policy_;
186
188
  const std::string name_;
189
+ bool ignore_reresolution_requests_ = false;
187
190
 
188
191
  OrphanablePtr<LoadBalancingPolicy> child_policy_;
189
192
 
@@ -202,7 +205,7 @@ class PriorityLb : public LoadBalancingPolicy {
202
205
  bool failover_timer_callback_pending_ = false;
203
206
  };
204
207
 
205
- ~PriorityLb();
208
+ ~PriorityLb() override;
206
209
 
207
210
  void ShutdownLocked() override;
208
211
 
@@ -311,7 +314,8 @@ void PriorityLb::UpdateLocked(UpdateArgs args) {
311
314
  child->DeactivateLocked();
312
315
  } else {
313
316
  // Existing child found in new config. Update it.
314
- child->UpdateLocked(config_it->second);
317
+ child->UpdateLocked(config_it->second.config,
318
+ config_it->second.ignore_reresolution_requests);
315
319
  }
316
320
  }
317
321
  // Try to get connected.
@@ -425,7 +429,10 @@ void PriorityLb::TryNextPriorityLocked(bool report_connecting) {
425
429
  }
426
430
  child = MakeOrphanable<ChildPriority>(
427
431
  Ref(DEBUG_LOCATION, "ChildPriority"), child_name);
428
- child->UpdateLocked(config_->children().find(child_name)->second);
432
+ auto child_config = config_->children().find(child_name);
433
+ GPR_DEBUG_ASSERT(child_config != config_->children().end());
434
+ child->UpdateLocked(child_config->second.config,
435
+ child_config->second.ignore_reresolution_requests);
429
436
  return;
430
437
  }
431
438
  // The child already exists.
@@ -534,12 +541,14 @@ void PriorityLb::ChildPriority::Orphan() {
534
541
  }
535
542
 
536
543
  void PriorityLb::ChildPriority::UpdateLocked(
537
- RefCountedPtr<LoadBalancingPolicy::Config> config) {
544
+ RefCountedPtr<LoadBalancingPolicy::Config> config,
545
+ bool ignore_reresolution_requests) {
538
546
  if (priority_policy_->shutting_down_) return;
539
547
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
540
548
  gpr_log(GPR_INFO, "[priority_lb %p] child %s (%p): start update",
541
549
  priority_policy_.get(), name_.c_str(), this);
542
550
  }
551
+ ignore_reresolution_requests_ = ignore_reresolution_requests;
543
552
  // Create policy if needed.
544
553
  if (child_policy_ == nullptr) {
545
554
  child_policy_ = CreateChildPolicyLocked(priority_policy_->args_);
@@ -731,15 +740,18 @@ void PriorityLb::ChildPriority::OnDeactivationTimerLocked(grpc_error* error) {
731
740
 
732
741
  void PriorityLb::ChildPriority::Helper::RequestReresolution() {
733
742
  if (priority_->priority_policy_->shutting_down_) return;
743
+ if (priority_->ignore_reresolution_requests_) {
744
+ return;
745
+ }
734
746
  priority_->priority_policy_->channel_control_helper()->RequestReresolution();
735
747
  }
736
748
 
737
749
  RefCountedPtr<SubchannelInterface>
738
750
  PriorityLb::ChildPriority::Helper::CreateSubchannel(
739
- const grpc_channel_args& args) {
751
+ ServerAddress address, const grpc_channel_args& args) {
740
752
  if (priority_->priority_policy_->shutting_down_) return nullptr;
741
753
  return priority_->priority_policy_->channel_control_helper()
742
- ->CreateSubchannel(args);
754
+ ->CreateSubchannel(std::move(address), args);
743
755
  }
744
756
 
745
757
  void PriorityLb::ChildPriority::Helper::UpdateState(
@@ -784,7 +796,7 @@ class PriorityLbFactory : public LoadBalancingPolicyFactory {
784
796
  }
785
797
  std::vector<grpc_error*> error_list;
786
798
  // Children.
787
- std::map<std::string, RefCountedPtr<LoadBalancingPolicy::Config>> children;
799
+ std::map<std::string, PriorityLbConfig::PriorityLbChild> children;
788
800
  auto it = json.object_value().find("children");
789
801
  if (it == json.object_value().end()) {
790
802
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
@@ -813,6 +825,22 @@ class PriorityLbFactory : public LoadBalancingPolicyFactory {
813
825
  grpc_error* parse_error = GRPC_ERROR_NONE;
814
826
  auto config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
815
827
  it2->second, &parse_error);
828
+ bool ignore_resolution_requests = false;
829
+ // If present, ignore_reresolution_requests must be of type
830
+ // boolean.
831
+ auto it3 =
832
+ element.object_value().find("ignore_reresolution_requests");
833
+ if (it3 != element.object_value().end()) {
834
+ if (it3->second.type() == Json::Type::JSON_TRUE) {
835
+ ignore_resolution_requests = true;
836
+ } else if (it3->second.type() != Json::Type::JSON_FALSE) {
837
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
838
+ absl::StrCat("field:children key:", child_name,
839
+ " field:ignore_reresolution_requests:should "
840
+ "be type boolean")
841
+ .c_str()));
842
+ }
843
+ }
816
844
  if (config == nullptr) {
817
845
  GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
818
846
  error_list.push_back(
@@ -821,7 +849,9 @@ class PriorityLbFactory : public LoadBalancingPolicyFactory {
821
849
  &parse_error, 1));
822
850
  GRPC_ERROR_UNREF(parse_error);
823
851
  }
824
- children[child_name] = std::move(config);
852
+ children[child_name].config = std::move(config);
853
+ children[child_name].ignore_reresolution_requests =
854
+ ignore_resolution_requests;
825
855
  }
826
856
  }
827
857
  }
@@ -65,7 +65,7 @@ class RoundRobin : public LoadBalancingPolicy {
65
65
  void ResetBackoffLocked() override;
66
66
 
67
67
  private:
68
- ~RoundRobin();
68
+ ~RoundRobin() override;
69
69
 
70
70
  // Forward declaration.
71
71
  class RoundRobinSubchannelList;
@@ -112,9 +112,9 @@ class RoundRobin : public LoadBalancingPolicy {
112
112
  RoundRobinSubchannelData> {
113
113
  public:
114
114
  RoundRobinSubchannelList(RoundRobin* policy, TraceFlag* tracer,
115
- const ServerAddressList& addresses,
115
+ ServerAddressList addresses,
116
116
  const grpc_channel_args& args)
117
- : SubchannelList(policy, tracer, addresses,
117
+ : SubchannelList(policy, tracer, std::move(addresses),
118
118
  policy->channel_control_helper(), args) {
119
119
  // Need to maintain a ref to the LB policy as long as we maintain
120
120
  // any references to subchannels, since the subchannels'
@@ -122,7 +122,7 @@ class RoundRobin : public LoadBalancingPolicy {
122
122
  policy->Ref(DEBUG_LOCATION, "subchannel_list").release();
123
123
  }
124
124
 
125
- ~RoundRobinSubchannelList() {
125
+ ~RoundRobinSubchannelList() override {
126
126
  RoundRobin* p = static_cast<RoundRobin*>(policy());
127
127
  p->Unref(DEBUG_LOCATION, "subchannel_list");
128
128
  }
@@ -445,7 +445,7 @@ void RoundRobin::UpdateLocked(UpdateArgs args) {
445
445
  }
446
446
  }
447
447
  latest_pending_subchannel_list_ = MakeOrphanable<RoundRobinSubchannelList>(
448
- this, &grpc_lb_round_robin_trace, args.addresses, *args.args);
448
+ this, &grpc_lb_round_robin_trace, std::move(args.addresses), *args.args);
449
449
  if (latest_pending_subchannel_list_->num_subchannels() == 0) {
450
450
  // If the new list is empty, immediately promote the new list to the
451
451
  // current list and transition to TRANSIENT_FAILURE.
@@ -142,7 +142,9 @@ class SubchannelData {
142
142
  : subchannel_data_(subchannel_data),
143
143
  subchannel_list_(std::move(subchannel_list)) {}
144
144
 
145
- ~Watcher() { subchannel_list_.reset(DEBUG_LOCATION, "Watcher dtor"); }
145
+ ~Watcher() override {
146
+ subchannel_list_.reset(DEBUG_LOCATION, "Watcher dtor");
147
+ }
146
148
 
147
149
  void OnConnectivityStateChange(grpc_connectivity_state new_state) override;
148
150
 
@@ -200,7 +202,7 @@ class SubchannelList : public InternallyRefCounted<SubchannelListType> {
200
202
 
201
203
  protected:
202
204
  SubchannelList(LoadBalancingPolicy* policy, TraceFlag* tracer,
203
- const ServerAddressList& addresses,
205
+ ServerAddressList addresses,
204
206
  LoadBalancingPolicy::ChannelControlHelper* helper,
205
207
  const grpc_channel_args& args);
206
208
 
@@ -350,11 +352,11 @@ void SubchannelData<SubchannelListType, SubchannelDataType>::ShutdownLocked() {
350
352
 
351
353
  template <typename SubchannelListType, typename SubchannelDataType>
352
354
  SubchannelList<SubchannelListType, SubchannelDataType>::SubchannelList(
353
- LoadBalancingPolicy* policy, TraceFlag* tracer,
354
- const ServerAddressList& addresses,
355
+ LoadBalancingPolicy* policy, TraceFlag* tracer, ServerAddressList addresses,
355
356
  LoadBalancingPolicy::ChannelControlHelper* helper,
356
357
  const grpc_channel_args& args)
357
- : InternallyRefCounted<SubchannelListType>(tracer),
358
+ : InternallyRefCounted<SubchannelListType>(
359
+ GRPC_TRACE_FLAG_ENABLED(*tracer) ? "SubchannelList" : nullptr),
358
360
  policy_(policy),
359
361
  tracer_(tracer) {
360
362
  if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
@@ -363,50 +365,28 @@ SubchannelList<SubchannelListType, SubchannelDataType>::SubchannelList(
363
365
  tracer_->name(), policy, this, addresses.size());
364
366
  }
365
367
  subchannels_.reserve(addresses.size());
366
- // We need to remove the LB addresses in order to be able to compare the
367
- // subchannel keys of subchannels from a different batch of addresses.
368
- // We remove the service config, since it will be passed into the
369
- // subchannel via call context.
370
- static const char* keys_to_remove[] = {GRPC_ARG_SUBCHANNEL_ADDRESS,
371
- GRPC_ARG_SERVICE_CONFIG};
372
368
  // Create a subchannel for each address.
373
- for (size_t i = 0; i < addresses.size(); i++) {
374
- absl::InlinedVector<grpc_arg, 3> args_to_add;
375
- const size_t subchannel_address_arg_index = args_to_add.size();
376
- args_to_add.emplace_back(
377
- Subchannel::CreateSubchannelAddressArg(&addresses[i].address()));
378
- if (addresses[i].args() != nullptr) {
379
- for (size_t j = 0; j < addresses[i].args()->num_args; ++j) {
380
- args_to_add.emplace_back(addresses[i].args()->args[j]);
381
- }
382
- }
383
- grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
384
- &args, keys_to_remove, GPR_ARRAY_SIZE(keys_to_remove),
385
- args_to_add.data(), args_to_add.size());
386
- gpr_free(args_to_add[subchannel_address_arg_index].value.string);
369
+ for (ServerAddress address : addresses) {
387
370
  RefCountedPtr<SubchannelInterface> subchannel =
388
- helper->CreateSubchannel(*new_args);
389
- grpc_channel_args_destroy(new_args);
371
+ helper->CreateSubchannel(address, args);
390
372
  if (subchannel == nullptr) {
391
373
  // Subchannel could not be created.
392
374
  if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
393
375
  gpr_log(GPR_INFO,
394
- "[%s %p] could not create subchannel for address uri %s, "
376
+ "[%s %p] could not create subchannel for address %s, "
395
377
  "ignoring",
396
- tracer_->name(), policy_,
397
- grpc_sockaddr_to_uri(&addresses[i].address()).c_str());
378
+ tracer_->name(), policy_, address.ToString().c_str());
398
379
  }
399
380
  continue;
400
381
  }
401
382
  if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
402
383
  gpr_log(GPR_INFO,
403
384
  "[%s %p] subchannel list %p index %" PRIuPTR
404
- ": Created subchannel %p for address uri %s",
385
+ ": Created subchannel %p for address %s",
405
386
  tracer_->name(), policy_, this, subchannels_.size(),
406
- subchannel.get(),
407
- grpc_sockaddr_to_uri(&addresses[i].address()).c_str());
387
+ subchannel.get(), address.ToString().c_str());
408
388
  }
409
- subchannels_.emplace_back(this, addresses[i], std::move(subchannel));
389
+ subchannels_.emplace_back(this, std::move(address), std::move(subchannel));
410
390
  }
411
391
  }
412
392
 
@@ -118,7 +118,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
118
118
  public:
119
119
  WeightedChild(RefCountedPtr<WeightedTargetLb> weighted_target_policy,
120
120
  const std::string& name);
121
- ~WeightedChild();
121
+ ~WeightedChild() override;
122
122
 
123
123
  void Orphan() override;
124
124
 
@@ -142,10 +142,10 @@ class WeightedTargetLb : public LoadBalancingPolicy {
142
142
  explicit Helper(RefCountedPtr<WeightedChild> weighted_child)
143
143
  : weighted_child_(std::move(weighted_child)) {}
144
144
 
145
- ~Helper() { weighted_child_.reset(DEBUG_LOCATION, "Helper"); }
145
+ ~Helper() override { weighted_child_.reset(DEBUG_LOCATION, "Helper"); }
146
146
 
147
147
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
148
- const grpc_channel_args& args) override;
148
+ ServerAddress address, const grpc_channel_args& args) override;
149
149
  void UpdateState(grpc_connectivity_state state,
150
150
  const absl::Status& status,
151
151
  std::unique_ptr<SubchannelPicker> picker) override;
@@ -188,7 +188,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
188
188
  bool shutdown_ = false;
189
189
  };
190
190
 
191
- ~WeightedTargetLb();
191
+ ~WeightedTargetLb() override;
192
192
 
193
193
  void ShutdownLocked() override;
194
194
 
@@ -590,10 +590,10 @@ void WeightedTargetLb::WeightedChild::OnDelayedRemovalTimerLocked(
590
590
 
591
591
  RefCountedPtr<SubchannelInterface>
592
592
  WeightedTargetLb::WeightedChild::Helper::CreateSubchannel(
593
- const grpc_channel_args& args) {
593
+ ServerAddress address, const grpc_channel_args& args) {
594
594
  if (weighted_child_->weighted_target_policy_->shutting_down_) return nullptr;
595
595
  return weighted_child_->weighted_target_policy_->channel_control_helper()
596
- ->CreateSubchannel(args);
596
+ ->CreateSubchannel(std::move(address), args);
597
597
  }
598
598
 
599
599
  void WeightedTargetLb::WeightedChild::Helper::UpdateState(
@@ -24,11 +24,15 @@
24
24
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
25
25
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
26
26
  #include "src/core/ext/filters/client_channel/service_config.h"
27
+ #include "src/core/ext/xds/xds_certificate_provider.h"
27
28
  #include "src/core/ext/xds/xds_client.h"
28
29
  #include "src/core/lib/channel/channel_args.h"
29
30
  #include "src/core/lib/gprpp/memory.h"
30
31
  #include "src/core/lib/gprpp/orphanable.h"
31
32
  #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"
35
+ #include "src/core/lib/security/credentials/xds/xds_credentials.h"
32
36
  #include "src/core/lib/transport/error_utils.h"
33
37
 
34
38
  namespace grpc_core {
@@ -66,11 +70,32 @@ class CdsLb : public LoadBalancingPolicy {
66
70
  public:
67
71
  explicit ClusterWatcher(RefCountedPtr<CdsLb> parent)
68
72
  : parent_(std::move(parent)) {}
69
- void OnClusterChanged(XdsApi::CdsUpdate cluster_data) override;
70
- void OnError(grpc_error* error) override;
71
- void OnResourceDoesNotExist() override;
73
+
74
+ void OnClusterChanged(XdsApi::CdsUpdate cluster_data) override {
75
+ new Notifier(parent_, std::move(cluster_data));
76
+ }
77
+ void OnError(grpc_error* error) override { new Notifier(parent_, error); }
78
+ void OnResourceDoesNotExist() override { new Notifier(parent_); }
72
79
 
73
80
  private:
81
+ class Notifier {
82
+ public:
83
+ Notifier(RefCountedPtr<CdsLb> parent, XdsApi::CdsUpdate update);
84
+ Notifier(RefCountedPtr<CdsLb> parent, grpc_error* error);
85
+ explicit Notifier(RefCountedPtr<CdsLb> parent);
86
+
87
+ private:
88
+ enum Type { kUpdate, kError, kDoesNotExist };
89
+
90
+ static void RunInExecCtx(void* arg, grpc_error* error);
91
+ void RunInWorkSerializer(grpc_error* error);
92
+
93
+ RefCountedPtr<CdsLb> parent_;
94
+ grpc_closure closure_;
95
+ XdsApi::CdsUpdate update_;
96
+ Type type_;
97
+ };
98
+
74
99
  RefCountedPtr<CdsLb> parent_;
75
100
  };
76
101
 
@@ -79,7 +104,7 @@ class CdsLb : public LoadBalancingPolicy {
79
104
  public:
80
105
  explicit Helper(RefCountedPtr<CdsLb> parent) : parent_(std::move(parent)) {}
81
106
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
82
- const grpc_channel_args& args) override;
107
+ ServerAddress address, const grpc_channel_args& args) override;
83
108
  void UpdateState(grpc_connectivity_state state, const absl::Status& status,
84
109
  std::unique_ptr<SubchannelPicker> picker) override;
85
110
  void RequestReresolution() override;
@@ -90,10 +115,17 @@ class CdsLb : public LoadBalancingPolicy {
90
115
  RefCountedPtr<CdsLb> parent_;
91
116
  };
92
117
 
93
- ~CdsLb();
118
+ ~CdsLb() override;
94
119
 
95
120
  void ShutdownLocked() override;
96
121
 
122
+ void OnClusterChanged(XdsApi::CdsUpdate cluster_data);
123
+ void OnError(grpc_error* error);
124
+ void OnResourceDoesNotExist();
125
+
126
+ grpc_error* UpdateXdsCertificateProvider(
127
+ const XdsApi::CdsUpdate& cluster_data);
128
+
97
129
  void MaybeDestroyChildPolicyLocked();
98
130
 
99
131
  RefCountedPtr<CdsLbConfig> config_;
@@ -107,6 +139,10 @@ class CdsLb : public LoadBalancingPolicy {
107
139
  // Note that this is not owned, so this pointer must never be derefernced.
108
140
  ClusterWatcher* cluster_watcher_ = nullptr;
109
141
 
142
+ RefCountedPtr<grpc_tls_certificate_provider> root_certificate_provider_;
143
+ RefCountedPtr<grpc_tls_certificate_provider> identity_certificate_provider_;
144
+ RefCountedPtr<XdsCertificateProvider> xds_certificate_provider_;
145
+
110
146
  // Child LB policy.
111
147
  OrphanablePtr<LoadBalancingPolicy> child_policy_;
112
148
 
@@ -115,123 +151,50 @@ class CdsLb : public LoadBalancingPolicy {
115
151
  };
116
152
 
117
153
  //
118
- // CdsLb::ClusterWatcher
154
+ // CdsLb::ClusterWatcher::Notifier
119
155
  //
120
156
 
121
- void CdsLb::ClusterWatcher::OnClusterChanged(XdsApi::CdsUpdate cluster_data) {
122
- if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
123
- gpr_log(GPR_INFO,
124
- "[cdslb %p] received CDS update from xds client %p: "
125
- "eds_service_name=%s lrs_load_reporting_server_name=%s",
126
- parent_.get(), parent_->xds_client_.get(),
127
- cluster_data.eds_service_name.c_str(),
128
- cluster_data.lrs_load_reporting_server_name.has_value()
129
- ? cluster_data.lrs_load_reporting_server_name.value().c_str()
130
- : "(unset)");
131
- }
132
- // Construct config for child policy.
133
- Json::Object child_config = {
134
- {"clusterName", parent_->config_->cluster()},
135
- {"localityPickingPolicy",
136
- Json::Array{
137
- Json::Object{
138
- {"weighted_target_experimental",
139
- Json::Object{
140
- {"targets", Json::Object()},
141
- }},
142
- },
143
- }},
144
- {"endpointPickingPolicy",
145
- Json::Array{
146
- Json::Object{
147
- {"round_robin", Json::Object()},
148
- },
149
- }},
150
- };
151
- if (!cluster_data.eds_service_name.empty()) {
152
- child_config["edsServiceName"] = cluster_data.eds_service_name;
153
- }
154
- if (cluster_data.lrs_load_reporting_server_name.has_value()) {
155
- child_config["lrsLoadReportingServerName"] =
156
- cluster_data.lrs_load_reporting_server_name.value();
157
- }
158
- Json json = Json::Array{
159
- Json::Object{
160
- {"eds_experimental", std::move(child_config)},
161
- },
162
- };
163
- if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
164
- std::string json_str = json.Dump(/*indent=*/1);
165
- gpr_log(GPR_INFO, "[cdslb %p] generated config for child policy: %s",
166
- parent_.get(), json_str.c_str());
167
- }
168
- grpc_error* error = GRPC_ERROR_NONE;
169
- RefCountedPtr<LoadBalancingPolicy::Config> config =
170
- LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(json, &error);
171
- if (error != GRPC_ERROR_NONE) {
172
- OnError(error);
173
- return;
174
- }
175
- // Create child policy if not already present.
176
- if (parent_->child_policy_ == nullptr) {
177
- LoadBalancingPolicy::Args args;
178
- args.work_serializer = parent_->work_serializer();
179
- args.args = parent_->args_;
180
- args.channel_control_helper = absl::make_unique<Helper>(parent_->Ref());
181
- parent_->child_policy_ =
182
- LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(config->name(),
183
- std::move(args));
184
- if (parent_->child_policy_ == nullptr) {
185
- OnError(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
186
- "failed to create child policy"));
187
- return;
188
- }
189
- grpc_pollset_set_add_pollset_set(
190
- parent_->child_policy_->interested_parties(),
191
- parent_->interested_parties());
192
- if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
193
- gpr_log(GPR_INFO, "[cdslb %p] created child policy %s (%p)",
194
- parent_.get(), config->name(), parent_->child_policy_.get());
195
- }
196
- }
197
- // Update child policy.
198
- UpdateArgs args;
199
- args.config = std::move(config);
200
- args.args = grpc_channel_args_copy(parent_->args_);
201
- parent_->child_policy_->UpdateLocked(std::move(args));
157
+ CdsLb::ClusterWatcher::Notifier::Notifier(RefCountedPtr<CdsLb> parent,
158
+ XdsApi::CdsUpdate update)
159
+ : parent_(std::move(parent)), update_(std::move(update)), type_(kUpdate) {
160
+ GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
161
+ ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
202
162
  }
203
163
 
204
- void CdsLb::ClusterWatcher::OnError(grpc_error* error) {
205
- gpr_log(GPR_ERROR, "[cdslb %p] xds error obtaining data for cluster %s: %s",
206
- parent_.get(), parent_->config_->cluster().c_str(),
207
- grpc_error_string(error));
208
- // Go into TRANSIENT_FAILURE if we have not yet created the child
209
- // policy (i.e., we have not yet received data from xds). Otherwise,
210
- // we keep running with the data we had previously.
211
- if (parent_->child_policy_ == nullptr) {
212
- parent_->channel_control_helper()->UpdateState(
213
- GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
214
- absl::make_unique<TransientFailurePicker>(error));
215
- } else {
216
- GRPC_ERROR_UNREF(error);
217
- }
164
+ CdsLb::ClusterWatcher::Notifier::Notifier(RefCountedPtr<CdsLb> parent,
165
+ grpc_error* error)
166
+ : parent_(std::move(parent)), type_(kError) {
167
+ GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
168
+ ExecCtx::Run(DEBUG_LOCATION, &closure_, error);
218
169
  }
219
170
 
220
- void CdsLb::ClusterWatcher::OnResourceDoesNotExist() {
221
- gpr_log(GPR_ERROR,
222
- "[cdslb %p] CDS resource for %s does not exist -- reporting "
223
- "TRANSIENT_FAILURE",
224
- parent_.get(), parent_->config_->cluster().c_str());
225
- grpc_error* error = grpc_error_set_int(
226
- GRPC_ERROR_CREATE_FROM_COPIED_STRING(
227
- absl::StrCat("CDS resource \"", parent_->config_->cluster(),
228
- "\" does not exist")
229
- .c_str()),
230
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
231
- parent_->channel_control_helper()->UpdateState(
232
- GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
233
- absl::make_unique<TransientFailurePicker>(error));
234
- parent_->MaybeDestroyChildPolicyLocked();
171
+ CdsLb::ClusterWatcher::Notifier::Notifier(RefCountedPtr<CdsLb> parent)
172
+ : parent_(std::move(parent)), type_(kDoesNotExist) {
173
+ GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
174
+ ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
175
+ }
176
+
177
+ void CdsLb::ClusterWatcher::Notifier::RunInExecCtx(void* arg,
178
+ grpc_error* error) {
179
+ Notifier* self = static_cast<Notifier*>(arg);
180
+ GRPC_ERROR_REF(error);
181
+ self->parent_->work_serializer()->Run(
182
+ [self, error]() { self->RunInWorkSerializer(error); }, DEBUG_LOCATION);
183
+ }
184
+
185
+ void CdsLb::ClusterWatcher::Notifier::RunInWorkSerializer(grpc_error* error) {
186
+ switch (type_) {
187
+ case kUpdate:
188
+ parent_->OnClusterChanged(std::move(update_));
189
+ break;
190
+ case kError:
191
+ parent_->OnError(error);
192
+ break;
193
+ case kDoesNotExist:
194
+ parent_->OnResourceDoesNotExist();
195
+ break;
196
+ };
197
+ delete this;
235
198
  }
236
199
 
237
200
  //
@@ -239,9 +202,10 @@ void CdsLb::ClusterWatcher::OnResourceDoesNotExist() {
239
202
  //
240
203
 
241
204
  RefCountedPtr<SubchannelInterface> CdsLb::Helper::CreateSubchannel(
242
- const grpc_channel_args& args) {
205
+ ServerAddress address, const grpc_channel_args& args) {
243
206
  if (parent_->shutting_down_) return nullptr;
244
- return parent_->channel_control_helper()->CreateSubchannel(args);
207
+ return parent_->channel_control_helper()->CreateSubchannel(std::move(address),
208
+ args);
245
209
  }
246
210
 
247
211
  void CdsLb::Helper::UpdateState(grpc_connectivity_state state,
@@ -279,8 +243,8 @@ void CdsLb::Helper::AddTraceEvent(TraceSeverity severity,
279
243
  CdsLb::CdsLb(RefCountedPtr<XdsClient> xds_client, Args args)
280
244
  : LoadBalancingPolicy(std::move(args)), xds_client_(std::move(xds_client)) {
281
245
  if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
282
- gpr_log(GPR_INFO, "[cdslb %p] created -- using xds client %p from channel",
283
- this, xds_client_.get());
246
+ gpr_log(GPR_INFO, "[cdslb %p] created -- using xds client %p", this,
247
+ xds_client_.get());
284
248
  }
285
249
  }
286
250
 
@@ -288,7 +252,6 @@ CdsLb::~CdsLb() {
288
252
  if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
289
253
  gpr_log(GPR_INFO, "[cdslb %p] destroying cds LB policy", this);
290
254
  }
291
- grpc_channel_args_destroy(args_);
292
255
  }
293
256
 
294
257
  void CdsLb::ShutdownLocked() {
@@ -305,8 +268,10 @@ void CdsLb::ShutdownLocked() {
305
268
  }
306
269
  xds_client_->CancelClusterDataWatch(config_->cluster(), cluster_watcher_);
307
270
  }
308
- xds_client_.reset();
271
+ xds_client_.reset(DEBUG_LOCATION, "CdsLb");
309
272
  }
273
+ grpc_channel_args_destroy(args_);
274
+ args_ = nullptr;
310
275
  }
311
276
 
312
277
  void CdsLb::MaybeDestroyChildPolicyLocked() {
@@ -354,6 +319,254 @@ void CdsLb::UpdateLocked(UpdateArgs args) {
354
319
  }
355
320
  }
356
321
 
322
+ void CdsLb::OnClusterChanged(XdsApi::CdsUpdate cluster_data) {
323
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
324
+ gpr_log(GPR_INFO, "[cdslb %p] received CDS update from xds client %p: %s",
325
+ this, xds_client_.get(), cluster_data.ToString().c_str());
326
+ }
327
+ grpc_error* error = GRPC_ERROR_NONE;
328
+ error = UpdateXdsCertificateProvider(cluster_data);
329
+ if (error != GRPC_ERROR_NONE) {
330
+ return OnError(error);
331
+ }
332
+ // Construct config for child policy.
333
+ Json::Object discovery_mechanism = {
334
+ {"clusterName", config_->cluster()},
335
+ {"max_concurrent_requests", cluster_data.max_concurrent_requests},
336
+ {"type", "EDS"},
337
+ };
338
+ if (!cluster_data.eds_service_name.empty()) {
339
+ discovery_mechanism["edsServiceName"] = cluster_data.eds_service_name;
340
+ }
341
+ if (cluster_data.lrs_load_reporting_server_name.has_value()) {
342
+ discovery_mechanism["lrsLoadReportingServerName"] =
343
+ cluster_data.lrs_load_reporting_server_name.value();
344
+ }
345
+ Json::Object child_config = {
346
+ {"discoveryMechanisms",
347
+ Json::Array{
348
+ discovery_mechanism,
349
+ }},
350
+ {"localityPickingPolicy",
351
+ Json::Array{
352
+ Json::Object{
353
+ {"weighted_target_experimental",
354
+ Json::Object{
355
+ {"targets", Json::Object()},
356
+ }},
357
+ },
358
+ }},
359
+ {"endpointPickingPolicy",
360
+ Json::Array{
361
+ Json::Object{
362
+ {"round_robin", Json::Object()},
363
+ },
364
+ }},
365
+ };
366
+ Json json = Json::Array{
367
+ Json::Object{
368
+ {"xds_cluster_resolver_experimental", std::move(child_config)},
369
+ },
370
+ };
371
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
372
+ std::string json_str = json.Dump(/*indent=*/1);
373
+ gpr_log(GPR_INFO, "[cdslb %p] generated config for child policy: %s", this,
374
+ json_str.c_str());
375
+ }
376
+ RefCountedPtr<LoadBalancingPolicy::Config> config =
377
+ LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(json, &error);
378
+ if (error != GRPC_ERROR_NONE) {
379
+ OnError(error);
380
+ return;
381
+ }
382
+ // Create child policy if not already present.
383
+ if (child_policy_ == nullptr) {
384
+ LoadBalancingPolicy::Args args;
385
+ args.work_serializer = work_serializer();
386
+ args.args = args_;
387
+ args.channel_control_helper = absl::make_unique<Helper>(Ref());
388
+ child_policy_ = LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(
389
+ config->name(), std::move(args));
390
+ if (child_policy_ == nullptr) {
391
+ OnError(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
392
+ "failed to create child policy"));
393
+ return;
394
+ }
395
+ grpc_pollset_set_add_pollset_set(child_policy_->interested_parties(),
396
+ interested_parties());
397
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
398
+ gpr_log(GPR_INFO, "[cdslb %p] created child policy %s (%p)", this,
399
+ config->name(), child_policy_.get());
400
+ }
401
+ }
402
+ // Update child policy.
403
+ UpdateArgs args;
404
+ args.config = std::move(config);
405
+ if (xds_certificate_provider_ != nullptr) {
406
+ grpc_arg arg_to_add = xds_certificate_provider_->MakeChannelArg();
407
+ args.args = grpc_channel_args_copy_and_add(args_, &arg_to_add, 1);
408
+ } else {
409
+ args.args = grpc_channel_args_copy(args_);
410
+ }
411
+ child_policy_->UpdateLocked(std::move(args));
412
+ }
413
+
414
+ void CdsLb::OnError(grpc_error* error) {
415
+ gpr_log(GPR_ERROR, "[cdslb %p] xds error obtaining data for cluster %s: %s",
416
+ this, config_->cluster().c_str(), grpc_error_string(error));
417
+ // Go into TRANSIENT_FAILURE if we have not yet created the child
418
+ // policy (i.e., we have not yet received data from xds). Otherwise,
419
+ // we keep running with the data we had previously.
420
+ if (child_policy_ == nullptr) {
421
+ channel_control_helper()->UpdateState(
422
+ GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
423
+ absl::make_unique<TransientFailurePicker>(error));
424
+ } else {
425
+ GRPC_ERROR_UNREF(error);
426
+ }
427
+ }
428
+
429
+ void CdsLb::OnResourceDoesNotExist() {
430
+ gpr_log(GPR_ERROR,
431
+ "[cdslb %p] CDS resource for %s does not exist -- reporting "
432
+ "TRANSIENT_FAILURE",
433
+ this, config_->cluster().c_str());
434
+ grpc_error* error =
435
+ grpc_error_set_int(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
436
+ absl::StrCat("CDS resource \"", config_->cluster(),
437
+ "\" does not exist")
438
+ .c_str()),
439
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
440
+ channel_control_helper()->UpdateState(
441
+ GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
442
+ absl::make_unique<TransientFailurePicker>(error));
443
+ MaybeDestroyChildPolicyLocked();
444
+ }
445
+
446
+ grpc_error* CdsLb::UpdateXdsCertificateProvider(
447
+ const XdsApi::CdsUpdate& cluster_data) {
448
+ // Early out if channel is not configured to use xds security.
449
+ grpc_channel_credentials* channel_credentials =
450
+ grpc_channel_credentials_find_in_args(args_);
451
+ if (channel_credentials == nullptr ||
452
+ channel_credentials->type() != kCredentialsTypeXds) {
453
+ xds_certificate_provider_ = nullptr;
454
+ return GRPC_ERROR_NONE;
455
+ }
456
+ absl::string_view root_provider_instance_name =
457
+ cluster_data.common_tls_context.combined_validation_context
458
+ .validation_context_certificate_provider_instance.instance_name;
459
+ absl::string_view root_provider_cert_name =
460
+ cluster_data.common_tls_context.combined_validation_context
461
+ .validation_context_certificate_provider_instance.certificate_name;
462
+ absl::string_view identity_provider_instance_name =
463
+ cluster_data.common_tls_context
464
+ .tls_certificate_certificate_provider_instance.instance_name;
465
+ absl::string_view identity_provider_cert_name =
466
+ cluster_data.common_tls_context
467
+ .tls_certificate_certificate_provider_instance.certificate_name;
468
+ RefCountedPtr<XdsCertificateProvider> new_root_provider;
469
+ if (!root_provider_instance_name.empty()) {
470
+ new_root_provider =
471
+ xds_client_->certificate_provider_store()
472
+ .CreateOrGetCertificateProvider(root_provider_instance_name);
473
+ if (new_root_provider == nullptr) {
474
+ return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
475
+ absl::StrCat("Certificate provider instance name: \"",
476
+ root_provider_instance_name, "\" not recognized.")
477
+ .c_str());
478
+ }
479
+ }
480
+ if (root_certificate_provider_ != new_root_provider) {
481
+ if (root_certificate_provider_ != nullptr &&
482
+ root_certificate_provider_->interested_parties() != nullptr) {
483
+ grpc_pollset_set_del_pollset_set(
484
+ interested_parties(),
485
+ root_certificate_provider_->interested_parties());
486
+ }
487
+ if (new_root_provider != nullptr &&
488
+ new_root_provider->interested_parties() != nullptr) {
489
+ grpc_pollset_set_add_pollset_set(interested_parties(),
490
+ new_root_provider->interested_parties());
491
+ }
492
+ root_certificate_provider_ = std::move(new_root_provider);
493
+ }
494
+ RefCountedPtr<XdsCertificateProvider> new_identity_provider;
495
+ if (!identity_provider_instance_name.empty()) {
496
+ new_identity_provider =
497
+ xds_client_->certificate_provider_store()
498
+ .CreateOrGetCertificateProvider(identity_provider_instance_name);
499
+ if (new_identity_provider == nullptr) {
500
+ return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
501
+ absl::StrCat("Certificate provider instance name: \"",
502
+ identity_provider_instance_name, "\" not recognized.")
503
+ .c_str());
504
+ }
505
+ }
506
+ if (identity_certificate_provider_ != new_identity_provider) {
507
+ if (identity_certificate_provider_ != nullptr &&
508
+ identity_certificate_provider_->interested_parties() != nullptr) {
509
+ grpc_pollset_set_del_pollset_set(
510
+ interested_parties(),
511
+ identity_certificate_provider_->interested_parties());
512
+ }
513
+ if (new_identity_provider != nullptr &&
514
+ new_identity_provider->interested_parties() != nullptr) {
515
+ grpc_pollset_set_add_pollset_set(
516
+ interested_parties(), new_identity_provider->interested_parties());
517
+ }
518
+ identity_certificate_provider_ = std::move(new_identity_provider);
519
+ }
520
+ const std::vector<XdsApi::StringMatcher>& match_subject_alt_names =
521
+ cluster_data.common_tls_context.combined_validation_context
522
+ .default_validation_context.match_subject_alt_names;
523
+ if (!root_provider_instance_name.empty() &&
524
+ !identity_provider_instance_name.empty()) {
525
+ // Using mTLS configuration
526
+ if (xds_certificate_provider_ != nullptr &&
527
+ xds_certificate_provider_->ProvidesRootCerts() &&
528
+ xds_certificate_provider_->ProvidesIdentityCerts()) {
529
+ xds_certificate_provider_->UpdateRootCertNameAndDistributor(
530
+ root_provider_cert_name, root_certificate_provider_->distributor());
531
+ xds_certificate_provider_->UpdateIdentityCertNameAndDistributor(
532
+ identity_provider_cert_name,
533
+ identity_certificate_provider_->distributor());
534
+ xds_certificate_provider_->UpdateSubjectAlternativeNameMatchers(
535
+ match_subject_alt_names);
536
+ } else {
537
+ // Existing xDS certificate provider does not have mTLS configuration.
538
+ // Create new certificate provider so that new subchannel connectors are
539
+ // created.
540
+ xds_certificate_provider_ = MakeRefCounted<XdsCertificateProvider>(
541
+ root_provider_cert_name, root_certificate_provider_->distributor(),
542
+ identity_provider_cert_name,
543
+ identity_certificate_provider_->distributor(),
544
+ match_subject_alt_names);
545
+ }
546
+ } else if (!root_provider_instance_name.empty()) {
547
+ // Using TLS configuration
548
+ if (xds_certificate_provider_ != nullptr &&
549
+ xds_certificate_provider_->ProvidesRootCerts() &&
550
+ !xds_certificate_provider_->ProvidesIdentityCerts()) {
551
+ xds_certificate_provider_->UpdateRootCertNameAndDistributor(
552
+ root_provider_cert_name, root_certificate_provider_->distributor());
553
+ xds_certificate_provider_->UpdateSubjectAlternativeNameMatchers(
554
+ match_subject_alt_names);
555
+ } else {
556
+ // Existing xDS certificate provider does not have TLS configuration.
557
+ // Create new certificate provider so that new subchannel connectors are
558
+ // created.
559
+ xds_certificate_provider_ = MakeRefCounted<XdsCertificateProvider>(
560
+ root_provider_cert_name, root_certificate_provider_->distributor(),
561
+ "", nullptr, match_subject_alt_names);
562
+ }
563
+ } else {
564
+ // No configuration provided.
565
+ xds_certificate_provider_ = nullptr;
566
+ }
567
+ return GRPC_ERROR_NONE;
568
+ }
569
+
357
570
  //
358
571
  // factory
359
572
  //
@@ -362,12 +575,13 @@ class CdsLbFactory : public LoadBalancingPolicyFactory {
362
575
  public:
363
576
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
364
577
  LoadBalancingPolicy::Args args) const override {
365
- RefCountedPtr<XdsClient> xds_client =
366
- XdsClient::GetFromChannelArgs(*args.args);
367
- if (xds_client == nullptr) {
578
+ grpc_error* error = GRPC_ERROR_NONE;
579
+ RefCountedPtr<XdsClient> xds_client = XdsClient::GetOrCreate(&error);
580
+ if (error != GRPC_ERROR_NONE) {
368
581
  gpr_log(GPR_ERROR,
369
- "XdsClient not present in channel args -- cannot instantiate "
370
- "cds LB policy");
582
+ "cannot get XdsClient to instantiate cds LB policy: %s",
583
+ grpc_error_string(error));
584
+ GRPC_ERROR_UNREF(error);
371
585
  return nullptr;
372
586
  }
373
587
  return MakeOrphanable<CdsLb>(std::move(xds_client), std::move(args));