grpc 1.31.0.pre2 → 1.34.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 (944) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1030 -16151
  3. data/include/grpc/grpc.h +1 -7
  4. data/include/grpc/grpc_security.h +196 -186
  5. data/include/grpc/impl/codegen/README.md +22 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +9 -7
  7. data/include/grpc/impl/codegen/port_platform.h +28 -56
  8. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
  9. data/src/core/ext/filters/client_channel/client_channel.cc +243 -188
  10. data/src/core/ext/filters/client_channel/client_channel.h +1 -1
  11. data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
  12. data/src/core/ext/filters/client_channel/config_selector.cc +0 -4
  13. data/src/core/ext/filters/client_channel/config_selector.h +36 -8
  14. data/src/core/ext/filters/client_channel/health/health_check_client.cc +10 -2
  15. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
  16. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +3 -4
  17. data/src/core/ext/filters/client_channel/lb_policy.cc +5 -1
  18. data/src/core/ext/filters/client_channel/lb_policy.h +6 -4
  19. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +48 -35
  20. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  21. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -7
  22. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +178 -162
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -17
  29. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +79 -30
  30. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +10 -9
  31. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +14 -34
  32. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +26 -15
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +208 -130
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +299 -328
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +53 -17
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +809 -0
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +722 -0
  38. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  39. data/src/core/ext/filters/client_channel/resolver.cc +3 -1
  40. data/src/core/ext/filters/client_channel/resolver.h +4 -1
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -2
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -1
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +3 -3
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  46. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
  48. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
  49. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +21 -1
  50. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +661 -58
  51. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +28 -0
  52. data/src/core/ext/filters/client_channel/resolver_registry.cc +4 -4
  53. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +18 -61
  54. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +4 -3
  55. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +50 -48
  56. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +7 -11
  57. data/src/core/ext/filters/client_channel/retry_throttle.h +1 -1
  58. data/src/core/ext/filters/client_channel/server_address.cc +120 -7
  59. data/src/core/ext/filters/client_channel/server_address.h +44 -21
  60. data/src/core/ext/filters/client_channel/service_config.cc +18 -13
  61. data/src/core/ext/filters/client_channel/service_config.h +8 -5
  62. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  63. data/src/core/ext/filters/client_channel/service_config_parser.cc +8 -6
  64. data/src/core/ext/filters/client_channel/service_config_parser.h +8 -5
  65. data/src/core/ext/filters/client_channel/subchannel.cc +82 -38
  66. data/src/core/ext/filters/client_channel/subchannel.h +18 -6
  67. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -5
  68. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -2
  69. data/src/core/ext/filters/deadline/deadline_filter.cc +83 -77
  70. data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
  71. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -1
  72. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  73. data/src/core/ext/filters/max_age/max_age_filter.cc +3 -2
  74. data/src/core/ext/filters/message_size/message_size_filter.cc +2 -1
  75. data/src/core/ext/filters/message_size/message_size_filter.h +2 -1
  76. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
  77. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +19 -2
  78. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
  79. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +36 -28
  80. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -1
  81. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -2
  82. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +6 -6
  83. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -2
  84. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
  85. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +260 -311
  86. data/src/core/ext/transport/chttp2/transport/flow_control.cc +11 -3
  87. data/src/core/ext/transport/chttp2/transport/flow_control.h +12 -2
  88. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  89. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  90. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -8
  91. data/src/core/ext/transport/chttp2/transport/internal.h +10 -2
  92. data/src/core/ext/transport/chttp2/transport/parsing.cc +19 -31
  93. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -7
  94. data/src/core/ext/transport/inproc/inproc_transport.cc +12 -12
  95. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +244 -0
  96. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +766 -0
  97. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  98. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
  99. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +458 -0
  100. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1635 -0
  101. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
  102. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
  103. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
  104. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +124 -0
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +379 -0
  107. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +310 -0
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +103 -0
  112. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +351 -0
  113. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  114. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +53 -0
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +133 -0
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +241 -0
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +752 -0
  119. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  120. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
  121. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
  122. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
  123. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +176 -0
  124. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +645 -0
  125. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
  126. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
  127. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
  128. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
  129. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +36 -0
  130. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +85 -0
  131. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
  132. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
  133. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  134. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
  135. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  136. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
  137. data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
  138. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
  139. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +128 -0
  140. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +467 -0
  141. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +155 -0
  142. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +539 -0
  143. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
  144. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
  145. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +178 -0
  146. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +616 -0
  147. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
  148. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
  149. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +900 -0
  150. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +3290 -0
  151. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +60 -0
  152. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +139 -0
  153. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
  154. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
  155. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +364 -0
  156. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1336 -0
  157. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
  158. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
  159. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +110 -0
  160. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +387 -0
  161. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +76 -0
  162. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +214 -0
  163. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +147 -0
  164. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +570 -0
  165. data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
  166. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
  167. data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
  168. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
  169. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +139 -0
  170. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +449 -0
  171. data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
  172. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
  173. data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
  174. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
  175. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
  176. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
  177. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
  178. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
  179. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
  180. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
  181. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  182. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
  183. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  184. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
  185. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  186. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
  187. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  188. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
  189. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +54 -0
  190. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +133 -0
  191. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  192. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
  193. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  194. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
  195. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  196. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
  197. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
  198. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -8
  199. data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
  200. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
  201. data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
  202. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
  203. data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
  204. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
  205. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +242 -0
  206. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +753 -0
  207. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
  208. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
  209. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +36 -36
  210. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +1 -1
  211. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -0
  212. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +57 -0
  213. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  214. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
  215. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +28 -0
  216. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +53 -0
  217. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +52 -0
  218. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +129 -0
  219. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +42 -0
  220. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +77 -0
  221. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +36 -0
  222. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +85 -0
  223. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +54 -0
  224. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +160 -0
  225. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +36 -0
  226. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +84 -0
  227. data/src/core/ext/upb-generated/validate/validate.upb.c +11 -11
  228. data/src/core/ext/upb-generated/validate/validate.upb.h +1 -1
  229. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +38 -0
  230. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  231. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
  232. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  233. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +254 -0
  234. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  235. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
  236. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  237. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +558 -0
  238. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
  239. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
  240. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  241. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +133 -0
  242. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  243. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
  244. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  245. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
  246. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  247. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +266 -0
  248. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +125 -0
  249. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +143 -0
  250. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
  251. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
  252. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  253. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
  254. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
  255. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
  256. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  257. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
  258. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
  259. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
  260. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  261. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +228 -0
  262. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +80 -0
  263. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +46 -0
  264. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  265. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
  266. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  267. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +55 -0
  268. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  269. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +110 -0
  270. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  271. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
  272. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
  273. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
  274. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  275. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
  276. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  277. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +190 -0
  278. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +55 -0
  279. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +185 -0
  280. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  281. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +62 -0
  282. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  283. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +97 -0
  284. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
  285. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +915 -0
  286. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +280 -0
  287. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
  288. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  289. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +64 -0
  290. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  291. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +511 -0
  292. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +115 -0
  293. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +48 -0
  294. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  295. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +166 -0
  296. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
  297. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +105 -0
  298. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  299. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +249 -0
  300. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
  301. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
  302. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
  303. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
  304. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  305. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +152 -0
  306. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +60 -0
  307. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +83 -0
  308. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
  309. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +82 -0
  310. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
  311. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +83 -0
  312. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  313. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +86 -0
  314. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
  315. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
  316. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
  317. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
  318. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  319. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
  320. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  321. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
  322. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  323. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +73 -0
  324. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  325. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +72 -0
  326. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  327. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
  328. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  329. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
  330. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  331. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
  332. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  333. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
  334. data/src/core/ext/{upb-generated/gogoproto/gogo.upb.h → upbdefs-generated/envoy/type/v3/http.upbdefs.h} +10 -9
  335. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
  336. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  337. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
  338. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  339. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
  340. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  341. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  342. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  343. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
  344. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  345. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +38 -0
  346. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  347. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
  348. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  349. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +39 -0
  350. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  351. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
  352. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  353. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
  354. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  355. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +39 -0
  356. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  357. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
  358. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  359. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
  360. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  361. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
  362. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  363. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
  364. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  365. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
  366. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  367. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
  368. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  369. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
  370. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  371. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +42 -0
  372. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +35 -0
  373. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +62 -0
  374. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +40 -0
  375. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +45 -0
  376. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +40 -0
  377. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +49 -0
  378. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +35 -0
  379. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +68 -0
  380. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +40 -0
  381. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +51 -0
  382. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +35 -0
  383. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +307 -0
  384. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  385. data/src/core/ext/xds/certificate_provider_factory.h +61 -0
  386. data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
  387. data/src/core/ext/xds/certificate_provider_registry.h +57 -0
  388. data/src/core/ext/xds/certificate_provider_store.cc +84 -0
  389. data/src/core/ext/xds/certificate_provider_store.h +107 -0
  390. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +119 -0
  391. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +72 -0
  392. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +265 -0
  393. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +104 -0
  394. data/src/core/ext/xds/xds_api.cc +2119 -0
  395. data/src/core/ext/xds/xds_api.h +438 -0
  396. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +208 -19
  397. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +31 -10
  398. data/src/core/ext/xds/xds_certificate_provider.cc +240 -0
  399. data/src/core/ext/xds/xds_certificate_provider.h +74 -0
  400. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +9 -6
  401. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +636 -847
  402. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +120 -98
  403. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +61 -18
  404. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +38 -10
  405. data/src/core/lib/channel/channel_args.cc +2 -1
  406. data/src/core/lib/channel/channel_args.h +0 -1
  407. data/src/core/lib/channel/channel_trace.cc +4 -2
  408. data/src/core/lib/channel/channelz.cc +24 -60
  409. data/src/core/lib/channel/channelz.h +14 -22
  410. data/src/core/lib/channel/channelz_registry.cc +15 -12
  411. data/src/core/lib/channel/channelz_registry.h +3 -0
  412. data/src/core/lib/channel/handshaker.h +2 -2
  413. data/src/core/lib/compression/compression.cc +8 -4
  414. data/src/core/lib/compression/compression_internal.cc +10 -5
  415. data/src/core/lib/compression/compression_internal.h +2 -1
  416. data/src/core/lib/compression/stream_compression_identity.cc +1 -3
  417. data/src/core/lib/debug/stats_data.cc +1 -0
  418. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  419. data/src/core/lib/gpr/log_linux.cc +17 -3
  420. data/src/core/lib/gpr/log_posix.cc +13 -1
  421. data/src/core/lib/gpr/log_windows.cc +16 -4
  422. data/src/core/lib/gpr/murmur_hash.cc +1 -1
  423. data/src/core/lib/gpr/string.cc +1 -1
  424. data/src/core/lib/gpr/sync_posix.cc +2 -8
  425. data/src/core/lib/gpr/time_precise.cc +5 -2
  426. data/src/core/lib/gpr/time_precise.h +6 -2
  427. data/src/core/lib/gpr/tls.h +4 -0
  428. data/src/core/lib/gpr/tls_msvc.h +2 -0
  429. data/src/core/lib/gpr/tls_stdcpp.h +48 -0
  430. data/src/core/lib/gpr/useful.h +5 -4
  431. data/src/core/lib/gprpp/dual_ref_counted.h +331 -0
  432. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  433. data/src/core/lib/gprpp/examine_stack.h +46 -0
  434. data/src/core/lib/gprpp/fork.cc +2 -2
  435. data/src/core/lib/gprpp/manual_constructor.h +1 -1
  436. data/src/core/lib/gprpp/orphanable.h +4 -8
  437. data/src/core/lib/gprpp/ref_counted.h +91 -68
  438. data/src/core/lib/gprpp/ref_counted_ptr.h +158 -7
  439. data/src/core/lib/gprpp/stat.h +38 -0
  440. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  441. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  442. data/src/core/lib/gprpp/thd.h +2 -2
  443. data/src/core/lib/gprpp/thd_posix.cc +36 -36
  444. data/src/core/lib/http/parser.cc +46 -25
  445. data/src/core/lib/iomgr/endpoint.cc +5 -1
  446. data/src/core/lib/iomgr/endpoint.h +7 -3
  447. data/src/core/lib/iomgr/endpoint_cfstream.cc +36 -11
  448. data/src/core/lib/iomgr/error.cc +2 -1
  449. data/src/core/lib/iomgr/ev_epollex_linux.cc +8 -4
  450. data/src/core/lib/iomgr/ev_posix.cc +0 -2
  451. data/src/core/lib/iomgr/exec_ctx.cc +1 -1
  452. data/src/core/lib/iomgr/exec_ctx.h +10 -8
  453. data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
  454. data/src/core/lib/iomgr/executor/threadpool.h +3 -3
  455. data/src/core/lib/iomgr/iomgr.cc +0 -10
  456. data/src/core/lib/iomgr/iomgr.h +0 -10
  457. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +85 -7
  458. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +23 -3
  459. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
  460. data/src/core/lib/iomgr/python_util.h +3 -3
  461. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -5
  462. data/src/core/lib/iomgr/sockaddr_utils.cc +2 -1
  463. data/src/core/lib/iomgr/sockaddr_utils.h +2 -1
  464. data/src/core/lib/iomgr/tcp_custom.cc +32 -16
  465. data/src/core/lib/iomgr/tcp_posix.cc +34 -15
  466. data/src/core/lib/iomgr/tcp_windows.cc +26 -10
  467. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  468. data/src/core/lib/iomgr/unix_sockets_posix.cc +27 -15
  469. data/src/core/lib/iomgr/unix_sockets_posix.h +5 -0
  470. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +7 -0
  471. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  472. data/src/core/lib/json/json.h +2 -2
  473. data/src/core/lib/json/json_reader.cc +8 -4
  474. data/src/core/lib/json/json_util.cc +58 -0
  475. data/src/core/lib/json/json_util.h +204 -0
  476. data/src/core/lib/json/json_writer.cc +2 -1
  477. data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
  478. data/src/core/lib/security/authorization/authorization_engine.h +84 -0
  479. data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
  480. data/src/core/lib/security/authorization/evaluate_args.h +59 -0
  481. data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
  482. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +44 -0
  483. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +69 -0
  484. data/src/core/lib/security/authorization/mock_cel/cel_value.h +97 -0
  485. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
  486. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +57 -0
  487. data/src/core/lib/security/context/security_context.h +3 -1
  488. data/src/core/lib/security/credentials/credentials.cc +1 -1
  489. data/src/core/lib/security/credentials/credentials.h +3 -3
  490. data/src/core/lib/security/credentials/external/aws_request_signer.cc +208 -0
  491. data/src/core/lib/security/credentials/external/aws_request_signer.h +73 -0
  492. data/src/core/lib/security/credentials/external/external_account_credentials.cc +311 -0
  493. data/src/core/lib/security/credentials/external/external_account_credentials.h +118 -0
  494. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +136 -0
  495. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +49 -0
  496. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +211 -0
  497. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +59 -0
  498. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +56 -38
  499. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +51 -0
  500. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  501. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
  502. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -1
  503. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +2 -2
  504. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +351 -0
  505. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +218 -0
  506. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +78 -0
  507. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +74 -0
  508. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +77 -149
  509. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +58 -187
  510. data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -12
  511. data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
  512. data/src/core/lib/security/credentials/xds/xds_credentials.cc +45 -0
  513. data/src/core/lib/security/credentials/xds/xds_credentials.h +51 -0
  514. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -14
  515. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +88 -0
  516. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +70 -0
  517. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  518. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  519. data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
  520. data/src/core/lib/security/security_connector/security_connector.cc +1 -1
  521. data/src/core/lib/security/security_connector/security_connector.h +4 -2
  522. data/src/core/lib/security/security_connector/ssl_utils.h +9 -2
  523. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +293 -275
  524. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +106 -61
  525. data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
  526. data/src/core/lib/security/transport/security_handshaker.cc +1 -1
  527. data/src/core/lib/security/transport/server_auth_filter.cc +2 -1
  528. data/src/core/lib/security/util/json_util.h +1 -0
  529. data/src/core/lib/slice/slice.cc +7 -4
  530. data/src/core/lib/slice/slice_buffer.cc +2 -1
  531. data/src/core/lib/slice/slice_intern.cc +2 -2
  532. data/src/core/lib/surface/call.cc +21 -20
  533. data/src/core/lib/surface/call.h +2 -1
  534. data/src/core/lib/surface/channel.cc +37 -51
  535. data/src/core/lib/surface/channel.h +18 -3
  536. data/src/core/lib/surface/completion_queue.cc +17 -278
  537. data/src/core/lib/surface/completion_queue.h +0 -8
  538. data/src/core/lib/surface/init.cc +27 -12
  539. data/src/core/lib/surface/server.cc +1069 -1245
  540. data/src/core/lib/surface/server.h +363 -87
  541. data/src/core/lib/surface/validate_metadata.h +3 -0
  542. data/src/core/lib/surface/version.cc +2 -2
  543. data/src/core/lib/transport/authority_override.cc +38 -0
  544. data/src/core/lib/transport/authority_override.h +34 -0
  545. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  546. data/src/core/lib/transport/bdp_estimator.h +2 -1
  547. data/src/core/lib/transport/byte_stream.h +3 -3
  548. data/src/core/lib/transport/connectivity_state.cc +18 -13
  549. data/src/core/lib/transport/connectivity_state.h +22 -10
  550. data/src/core/lib/transport/error_utils.cc +13 -0
  551. data/src/core/lib/transport/error_utils.h +6 -0
  552. data/src/core/lib/transport/metadata.cc +11 -1
  553. data/src/core/lib/transport/metadata.h +2 -2
  554. data/src/core/lib/transport/static_metadata.cc +295 -276
  555. data/src/core/lib/transport/static_metadata.h +80 -73
  556. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  557. data/src/core/lib/transport/transport.cc +5 -3
  558. data/src/core/lib/transport/transport.h +8 -1
  559. data/src/core/lib/uri/uri_parser.cc +23 -21
  560. data/src/core/lib/uri/uri_parser.h +3 -1
  561. data/src/core/plugin_registry/grpc_plugin_registry.cc +35 -20
  562. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +26 -3
  563. data/src/core/tsi/fake_transport_security.cc +1 -0
  564. data/src/core/tsi/local_transport_security.cc +5 -1
  565. data/src/core/tsi/local_transport_security.h +6 -7
  566. data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -0
  567. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -1
  568. data/src/core/tsi/ssl_transport_security.cc +16 -9
  569. data/src/core/tsi/ssl_transport_security.h +3 -0
  570. data/src/core/tsi/transport_security.cc +4 -2
  571. data/src/ruby/bin/math_services_pb.rb +4 -4
  572. data/src/ruby/ext/grpc/extconf.rb +1 -1
  573. data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
  574. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +26 -18
  575. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +43 -31
  576. data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
  577. data/src/ruby/lib/grpc/version.rb +1 -1
  578. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  579. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
  580. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
  581. data/src/ruby/spec/channel_credentials_spec.rb +10 -0
  582. data/src/ruby/spec/generic/active_call_spec.rb +19 -8
  583. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  584. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  585. data/src/ruby/spec/pb/codegen/package_option_spec.rb +20 -0
  586. data/src/ruby/spec/user_agent_spec.rb +74 -0
  587. data/third_party/abseil-cpp/absl/algorithm/container.h +1764 -0
  588. data/third_party/abseil-cpp/absl/base/attributes.h +99 -38
  589. data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
  590. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  591. data/third_party/abseil-cpp/absl/base/config.h +60 -17
  592. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +428 -335
  593. data/third_party/abseil-cpp/absl/base/internal/bits.h +17 -16
  594. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +166 -0
  595. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  596. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  597. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  598. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  599. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  600. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  601. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +29 -1
  602. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +2 -2
  603. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +7 -5
  604. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +25 -38
  605. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +19 -25
  606. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +8 -0
  607. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
  608. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  609. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  610. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +2 -2
  611. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
  612. data/third_party/abseil-cpp/absl/base/macros.h +36 -109
  613. data/third_party/abseil-cpp/absl/base/optimization.h +61 -1
  614. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  615. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  616. data/third_party/abseil-cpp/absl/base/thread_annotations.h +94 -39
  617. data/third_party/abseil-cpp/absl/container/fixed_array.h +532 -0
  618. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
  619. data/third_party/abseil-cpp/absl/container/inlined_vector.h +33 -36
  620. data/third_party/abseil-cpp/absl/container/internal/common.h +206 -0
  621. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +33 -8
  622. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +460 -0
  623. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +161 -0
  624. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +208 -0
  625. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  626. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +270 -0
  627. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +321 -0
  628. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  629. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +50 -0
  630. data/third_party/abseil-cpp/absl/container/internal/layout.h +743 -0
  631. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  632. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1903 -0
  633. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +139 -0
  634. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  635. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1945 -0
  636. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  637. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  638. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  639. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +196 -0
  640. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +134 -0
  641. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +89 -0
  642. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +108 -0
  643. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  644. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  645. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +93 -0
  646. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  647. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +149 -0
  648. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +173 -0
  649. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  650. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  651. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  652. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +36 -0
  653. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  654. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  655. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1560 -0
  656. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  657. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  658. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  659. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  660. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  661. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  662. data/third_party/abseil-cpp/absl/hash/hash.h +325 -0
  663. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  664. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  665. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  666. data/third_party/abseil-cpp/absl/hash/internal/hash.h +996 -0
  667. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  668. data/third_party/abseil-cpp/absl/meta/type_traits.h +2 -8
  669. data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
  670. data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
  671. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +51 -0
  672. data/third_party/abseil-cpp/absl/status/status.cc +445 -0
  673. data/third_party/abseil-cpp/absl/status/status.h +817 -0
  674. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +38 -0
  675. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  676. data/third_party/abseil-cpp/absl/strings/charconv.cc +2 -2
  677. data/third_party/abseil-cpp/absl/strings/cord.cc +1998 -0
  678. data/third_party/abseil-cpp/absl/strings/cord.h +1276 -0
  679. data/third_party/abseil-cpp/absl/strings/escaping.cc +9 -9
  680. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  681. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  682. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  683. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  684. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +173 -0
  685. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +222 -136
  686. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +136 -64
  687. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +1 -1
  688. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +14 -21
  689. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -14
  690. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
  691. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
  692. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +999 -87
  693. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +3 -3
  694. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  695. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +8 -6
  696. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +13 -11
  697. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -2
  698. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  699. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  700. data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
  701. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  702. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -0
  703. data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
  704. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
  705. data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
  706. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  707. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  708. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  709. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  710. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  711. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  712. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
  713. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  714. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  715. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +249 -0
  716. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  717. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  718. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +492 -0
  719. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  720. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2739 -0
  721. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1065 -0
  722. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  723. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  724. data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
  725. data/third_party/abseil-cpp/absl/time/clock.cc +3 -3
  726. data/third_party/abseil-cpp/absl/time/duration.cc +90 -59
  727. data/third_party/abseil-cpp/absl/time/format.cc +43 -36
  728. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +26 -16
  729. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
  730. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
  731. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
  732. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
  733. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
  734. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
  735. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
  736. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +8 -7
  737. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -6
  738. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
  739. data/third_party/abseil-cpp/absl/time/time.h +15 -16
  740. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  741. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  742. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  743. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  744. data/third_party/abseil-cpp/absl/types/span.h +49 -36
  745. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  746. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  747. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  748. data/third_party/boringssl-with-bazel/err_data.c +479 -467
  749. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +0 -6
  750. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  751. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +9 -43
  752. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
  753. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +34 -0
  754. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +4 -0
  755. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +16 -0
  756. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
  757. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +173 -35
  758. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +2 -0
  759. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +4 -0
  760. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +30 -10
  761. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +56 -22
  762. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +8 -2
  763. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +543 -0
  764. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +237 -0
  765. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +118 -49
  766. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +267 -95
  767. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +210 -34
  768. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  769. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +3 -3
  770. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +6 -4
  771. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +3 -3
  772. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -1
  773. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +7 -2
  774. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +21 -18
  775. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -1
  776. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +24 -3
  777. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +3 -3
  778. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
  779. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +3 -3
  780. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +29 -35
  781. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +13 -2
  782. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +9 -8
  783. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +10 -10
  784. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +2 -2
  785. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +28 -40
  786. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
  787. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +3 -1
  788. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
  789. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
  790. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +14 -14
  791. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +7 -3
  792. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +2 -2
  793. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
  794. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
  795. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +55 -8
  796. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -1
  797. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +24 -0
  798. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +54 -0
  799. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +0 -1
  800. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +6 -3
  801. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
  802. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +6 -0
  803. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +1 -1
  804. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  805. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +12 -0
  806. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +9 -0
  807. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +4 -1
  808. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  809. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
  810. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +103 -10
  811. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +5 -2
  812. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +42 -14
  813. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +199 -78
  814. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +482 -432
  815. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  816. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +35 -0
  817. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +18 -18
  818. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -3
  819. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1 -1
  820. data/third_party/boringssl-with-bazel/src/ssl/internal.h +49 -10
  821. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +42 -1
  822. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
  823. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +8 -9
  824. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +77 -0
  825. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +11 -14
  826. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +250 -20
  827. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -2
  828. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +57 -19
  829. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +140 -41
  830. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  831. data/third_party/upb/upb/decode.c +64 -15
  832. data/third_party/upb/upb/def.c +2169 -0
  833. data/third_party/upb/upb/def.h +330 -0
  834. data/third_party/upb/upb/def.hpp +525 -0
  835. data/third_party/upb/upb/encode.c +2 -2
  836. data/third_party/upb/upb/msg.h +2 -2
  837. data/third_party/upb/upb/port_def.inc +1 -1
  838. data/third_party/upb/upb/reflection.c +391 -0
  839. data/third_party/upb/upb/reflection.h +168 -0
  840. data/third_party/upb/upb/table.c +0 -11
  841. data/third_party/upb/upb/table.int.h +0 -9
  842. data/third_party/upb/upb/text_encode.c +398 -0
  843. data/third_party/upb/upb/text_encode.h +35 -0
  844. data/third_party/upb/upb/upb.c +16 -14
  845. data/third_party/upb/upb/upb.h +26 -0
  846. data/third_party/upb/upb/upb.hpp +2 -0
  847. metadata +489 -161
  848. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +0 -528
  849. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +0 -1143
  850. data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -2110
  851. data/src/core/ext/filters/client_channel/xds/xds_api.h +0 -345
  852. data/src/core/ext/filters/client_channel/xds/xds_channel.h +0 -46
  853. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +0 -106
  854. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
  855. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -34
  856. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
  857. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -429
  858. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
  859. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -198
  860. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
  861. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -388
  862. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -52
  863. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
  864. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1453
  865. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
  866. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -226
  867. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  868. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -323
  869. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
  870. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -334
  871. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -79
  872. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
  873. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -891
  874. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
  875. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -328
  876. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
  877. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -71
  878. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
  879. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -649
  880. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
  881. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -693
  882. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  883. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
  884. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -536
  885. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -88
  886. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
  887. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -386
  888. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -52
  889. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
  890. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -224
  891. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
  892. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -32
  893. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
  894. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -273
  895. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
  896. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -332
  897. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -52
  898. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
  899. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -415
  900. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
  901. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -32
  902. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
  903. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -538
  904. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
  905. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -111
  906. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -52
  907. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
  908. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -204
  909. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
  910. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -32
  911. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
  912. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -2984
  913. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
  914. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -135
  915. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -52
  916. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
  917. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -732
  918. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
  919. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1167
  920. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  921. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
  922. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
  923. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -49
  924. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
  925. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -136
  926. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
  927. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -145
  928. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
  929. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  930. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
  931. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  932. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -86
  933. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -111
  934. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -61
  935. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
  936. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -250
  937. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
  938. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  939. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  940. data/src/core/lib/slice/slice_hash_table.h +0 -199
  941. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
  942. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
  943. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
  944. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
@@ -32,14 +32,15 @@
32
32
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
33
33
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
34
34
  #include "src/core/ext/filters/client_channel/server_address.h"
35
- #include "src/core/ext/filters/client_channel/xds/xds_channel_args.h"
36
- #include "src/core/ext/filters/client_channel/xds/xds_client.h"
37
- #include "src/core/ext/filters/client_channel/xds/xds_client_stats.h"
35
+ #include "src/core/ext/xds/xds_channel_args.h"
36
+ #include "src/core/ext/xds/xds_client.h"
37
+ #include "src/core/ext/xds/xds_client_stats.h"
38
38
  #include "src/core/lib/channel/channel_args.h"
39
+ #include "src/core/lib/gpr/string.h"
39
40
  #include "src/core/lib/gprpp/orphanable.h"
40
41
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
41
- #include "src/core/lib/iomgr/timer.h"
42
42
  #include "src/core/lib/iomgr/work_serializer.h"
43
+ #include "src/core/lib/transport/error_utils.h"
43
44
  #include "src/core/lib/uri/uri_parser.h"
44
45
 
45
46
  #define GRPC_EDS_DEFAULT_FALLBACK_TIMEOUT 10000
@@ -48,6 +49,8 @@ namespace grpc_core {
48
49
 
49
50
  TraceFlag grpc_lb_eds_trace(false, "eds_lb");
50
51
 
52
+ const char* kXdsLocalityNameAttributeKey = "xds_locality_name";
53
+
51
54
  namespace {
52
55
 
53
56
  constexpr char kEds[] = "eds_experimental";
@@ -57,13 +60,15 @@ class EdsLbConfig : public LoadBalancingPolicy::Config {
57
60
  public:
58
61
  EdsLbConfig(std::string cluster_name, std::string eds_service_name,
59
62
  absl::optional<std::string> lrs_load_reporting_server_name,
60
- Json locality_picking_policy, Json endpoint_picking_policy)
63
+ Json locality_picking_policy, Json endpoint_picking_policy,
64
+ uint32_t max_concurrent_requests)
61
65
  : cluster_name_(std::move(cluster_name)),
62
66
  eds_service_name_(std::move(eds_service_name)),
63
67
  lrs_load_reporting_server_name_(
64
68
  std::move(lrs_load_reporting_server_name)),
65
69
  locality_picking_policy_(std::move(locality_picking_policy)),
66
- endpoint_picking_policy_(std::move(endpoint_picking_policy)) {}
70
+ endpoint_picking_policy_(std::move(endpoint_picking_policy)),
71
+ max_concurrent_requests_(max_concurrent_requests) {}
67
72
 
68
73
  const char* name() const override { return kEds; }
69
74
 
@@ -78,6 +83,9 @@ class EdsLbConfig : public LoadBalancingPolicy::Config {
78
83
  const Json& endpoint_picking_policy() const {
79
84
  return endpoint_picking_policy_;
80
85
  }
86
+ const uint32_t max_concurrent_requests() const {
87
+ return max_concurrent_requests_;
88
+ }
81
89
 
82
90
  private:
83
91
  std::string cluster_name_;
@@ -85,12 +93,13 @@ class EdsLbConfig : public LoadBalancingPolicy::Config {
85
93
  absl::optional<std::string> lrs_load_reporting_server_name_;
86
94
  Json locality_picking_policy_;
87
95
  Json endpoint_picking_policy_;
96
+ uint32_t max_concurrent_requests_;
88
97
  };
89
98
 
90
99
  // EDS LB policy.
91
100
  class EdsLb : public LoadBalancingPolicy {
92
101
  public:
93
- explicit EdsLb(Args args);
102
+ EdsLb(RefCountedPtr<XdsClient> xds_client, Args args);
94
103
 
95
104
  const char* name() const override { return kEds; }
96
105
 
@@ -98,30 +107,36 @@ class EdsLb : public LoadBalancingPolicy {
98
107
  void ResetBackoffLocked() override;
99
108
 
100
109
  private:
101
- class EndpointWatcher;
102
-
103
- // A simple wrapper for ref-counting a picker from the child policy.
104
- class ChildPickerWrapper : public RefCounted<ChildPickerWrapper> {
110
+ class EndpointWatcher : public XdsClient::EndpointWatcherInterface {
105
111
  public:
106
- explicit ChildPickerWrapper(std::unique_ptr<SubchannelPicker> picker)
107
- : picker_(std::move(picker)) {}
108
- PickResult Pick(PickArgs args) { return picker_->Pick(args); }
112
+ explicit EndpointWatcher(RefCountedPtr<EdsLb> parent)
113
+ : parent_(std::move(parent)) {}
114
+ void OnEndpointChanged(XdsApi::EdsUpdate update) override {
115
+ new Notifier(parent_, std::move(update));
116
+ }
117
+ void OnError(grpc_error* error) override { new Notifier(parent_, error); }
118
+ void OnResourceDoesNotExist() override { new Notifier(parent_); }
109
119
 
110
120
  private:
111
- std::unique_ptr<SubchannelPicker> picker_;
112
- };
113
-
114
- // A picker that handles drops.
115
- class DropPicker : public SubchannelPicker {
116
- public:
117
- explicit DropPicker(EdsLb* eds_policy);
118
-
119
- PickResult Pick(PickArgs args) override;
121
+ class Notifier {
122
+ public:
123
+ Notifier(RefCountedPtr<EdsLb> parent, XdsApi::EdsUpdate update);
124
+ Notifier(RefCountedPtr<EdsLb> parent, grpc_error* error);
125
+ explicit Notifier(RefCountedPtr<EdsLb> parent);
126
+
127
+ private:
128
+ enum Type { kUpdate, kError, kDoesNotExist };
129
+
130
+ static void RunInExecCtx(void* arg, grpc_error* error);
131
+ void RunInWorkSerializer(grpc_error* error);
132
+
133
+ RefCountedPtr<EdsLb> parent_;
134
+ grpc_closure closure_;
135
+ XdsApi::EdsUpdate update_;
136
+ Type type_;
137
+ };
120
138
 
121
- private:
122
- RefCountedPtr<XdsApi::DropConfig> drop_config_;
123
- RefCountedPtr<XdsClusterDropStats> drop_stats_;
124
- RefCountedPtr<ChildPickerWrapper> child_picker_;
139
+ RefCountedPtr<EdsLb> parent_;
125
140
  };
126
141
 
127
142
  class Helper : public ChannelControlHelper {
@@ -129,11 +144,11 @@ class EdsLb : public LoadBalancingPolicy {
129
144
  explicit Helper(RefCountedPtr<EdsLb> eds_policy)
130
145
  : eds_policy_(std::move(eds_policy)) {}
131
146
 
132
- ~Helper() { eds_policy_.reset(DEBUG_LOCATION, "Helper"); }
147
+ ~Helper() override { eds_policy_.reset(DEBUG_LOCATION, "Helper"); }
133
148
 
134
149
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
135
- const grpc_channel_args& args) override;
136
- void UpdateState(grpc_connectivity_state state,
150
+ ServerAddress address, const grpc_channel_args& args) override;
151
+ void UpdateState(grpc_connectivity_state state, const absl::Status& status,
137
152
  std::unique_ptr<SubchannelPicker> picker) override;
138
153
  // This is a no-op, because we get the addresses from the xds
139
154
  // client, which is a watch-based API.
@@ -145,13 +160,17 @@ class EdsLb : public LoadBalancingPolicy {
145
160
  RefCountedPtr<EdsLb> eds_policy_;
146
161
  };
147
162
 
148
- ~EdsLb();
163
+ ~EdsLb() override;
149
164
 
150
165
  void ShutdownLocked() override;
151
166
 
167
+ void OnEndpointChanged(XdsApi::EdsUpdate update);
168
+ void OnError(grpc_error* error);
169
+ void OnResourceDoesNotExist();
170
+
152
171
  void MaybeDestroyChildPolicyLocked();
153
172
 
154
- void UpdatePriorityList(XdsApi::PriorityListUpdate priority_list_update);
173
+ void UpdatePriorityList(XdsApi::EdsUpdate::PriorityList priority_list);
155
174
  void UpdateChildPolicyLocked();
156
175
  OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
157
176
  const grpc_channel_args* args);
@@ -159,11 +178,10 @@ class EdsLb : public LoadBalancingPolicy {
159
178
  RefCountedPtr<Config> CreateChildPolicyConfigLocked();
160
179
  grpc_channel_args* CreateChildPolicyArgsLocked(
161
180
  const grpc_channel_args* args_in);
162
- void MaybeUpdateDropPickerLocked();
163
181
 
164
182
  // Caller must ensure that config_ is set before calling.
165
183
  const absl::string_view GetEdsResourceName() const {
166
- if (xds_client_from_channel_ == nullptr) return server_name_;
184
+ if (!is_xds_uri_) return server_name_;
167
185
  if (!config_->eds_service_name().empty()) {
168
186
  return config_->eds_service_name();
169
187
  }
@@ -174,17 +192,13 @@ class EdsLb : public LoadBalancingPolicy {
174
192
  // for LRS load reporting.
175
193
  // Caller must ensure that config_ is set before calling.
176
194
  std::pair<absl::string_view, absl::string_view> GetLrsClusterKey() const {
177
- if (xds_client_from_channel_ == nullptr) return {server_name_, nullptr};
195
+ if (!is_xds_uri_) return {server_name_, nullptr};
178
196
  return {config_->cluster_name(), config_->eds_service_name()};
179
197
  }
180
198
 
181
- XdsClient* xds_client() const {
182
- return xds_client_from_channel_ != nullptr ? xds_client_from_channel_.get()
183
- : xds_client_.get();
184
- }
185
-
186
199
  // Server name from target URI.
187
200
  std::string server_name_;
201
+ bool is_xds_uri_;
188
202
 
189
203
  // Current channel args and config from the resolver.
190
204
  const grpc_channel_args* args_ = nullptr;
@@ -194,91 +208,44 @@ class EdsLb : public LoadBalancingPolicy {
194
208
  bool shutting_down_ = false;
195
209
 
196
210
  // The xds client and endpoint watcher.
197
- // If we get the XdsClient from the channel, we store it in
198
- // xds_client_from_channel_; if we create it ourselves, we store it in
199
- // xds_client_.
200
- RefCountedPtr<XdsClient> xds_client_from_channel_;
201
- OrphanablePtr<XdsClient> xds_client_;
211
+ RefCountedPtr<XdsClient> xds_client_;
202
212
  // A pointer to the endpoint watcher, to be used when cancelling the watch.
203
213
  // Note that this is not owned, so this pointer must never be derefernced.
204
214
  EndpointWatcher* endpoint_watcher_ = nullptr;
205
215
  // The latest data from the endpoint watcher.
206
- XdsApi::PriorityListUpdate priority_list_update_;
216
+ XdsApi::EdsUpdate::PriorityList priority_list_;
207
217
  // State used to retain child policy names for priority policy.
208
218
  std::vector<size_t /*child_number*/> priority_child_numbers_;
209
219
 
210
- RefCountedPtr<XdsApi::DropConfig> drop_config_;
211
- RefCountedPtr<XdsClusterDropStats> drop_stats_;
220
+ RefCountedPtr<XdsApi::EdsUpdate::DropConfig> drop_config_;
212
221
 
213
222
  OrphanablePtr<LoadBalancingPolicy> child_policy_;
214
-
215
- // The latest state and picker returned from the child policy.
216
- grpc_connectivity_state child_state_;
217
- RefCountedPtr<ChildPickerWrapper> child_picker_;
218
223
  };
219
224
 
220
- //
221
- // EdsLb::DropPicker
222
- //
223
-
224
- EdsLb::DropPicker::DropPicker(EdsLb* eds_policy)
225
- : drop_config_(eds_policy->drop_config_),
226
- drop_stats_(eds_policy->drop_stats_),
227
- child_picker_(eds_policy->child_picker_) {
228
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
229
- gpr_log(GPR_INFO, "[edslb %p] constructed new drop picker %p", eds_policy,
230
- this);
231
- }
232
- }
233
-
234
- EdsLb::PickResult EdsLb::DropPicker::Pick(PickArgs args) {
235
- // Handle drop.
236
- const std::string* drop_category;
237
- if (drop_config_->ShouldDrop(&drop_category)) {
238
- if (drop_stats_ != nullptr) drop_stats_->AddCallDropped(*drop_category);
239
- PickResult result;
240
- result.type = PickResult::PICK_COMPLETE;
241
- return result;
242
- }
243
- // If we're not dropping all calls, we should always have a child picker.
244
- if (child_picker_ == nullptr) { // Should never happen.
245
- PickResult result;
246
- result.type = PickResult::PICK_FAILED;
247
- result.error =
248
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
249
- "eds drop picker not given any child picker"),
250
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_INTERNAL);
251
- return result;
252
- }
253
- // Not dropping, so delegate to child's picker.
254
- return child_picker_->Pick(args);
255
- }
256
-
257
225
  //
258
226
  // EdsLb::Helper
259
227
  //
260
228
 
261
229
  RefCountedPtr<SubchannelInterface> EdsLb::Helper::CreateSubchannel(
262
- const grpc_channel_args& args) {
230
+ ServerAddress address, const grpc_channel_args& args) {
263
231
  if (eds_policy_->shutting_down_) return nullptr;
264
- return eds_policy_->channel_control_helper()->CreateSubchannel(args);
232
+ return eds_policy_->channel_control_helper()->CreateSubchannel(
233
+ std::move(address), args);
265
234
  }
266
235
 
267
236
  void EdsLb::Helper::UpdateState(grpc_connectivity_state state,
237
+ const absl::Status& status,
268
238
  std::unique_ptr<SubchannelPicker> picker) {
269
239
  if (eds_policy_->shutting_down_ || eds_policy_->child_policy_ == nullptr) {
270
240
  return;
271
241
  }
272
242
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
273
- gpr_log(GPR_INFO, "[edslb %p] child policy updated state=%s picker=%p",
274
- eds_policy_.get(), ConnectivityStateName(state), picker.get());
275
- }
276
- // Save the state and picker.
277
- eds_policy_->child_state_ = state;
278
- eds_policy_->child_picker_ =
279
- MakeRefCounted<ChildPickerWrapper>(std::move(picker));
280
- // Wrap the picker in a DropPicker and pass it up.
281
- eds_policy_->MaybeUpdateDropPickerLocked();
243
+ gpr_log(GPR_INFO, "[edslb %p] child policy updated state=%s (%s) picker=%p",
244
+ eds_policy_.get(), ConnectivityStateName(state),
245
+ status.ToString().c_str(), picker.get());
246
+ }
247
+ eds_policy_->channel_control_helper()->UpdateState(state, status,
248
+ std::move(picker));
282
249
  }
283
250
 
284
251
  void EdsLb::Helper::AddTraceEvent(TraceSeverity severity,
@@ -288,111 +255,94 @@ void EdsLb::Helper::AddTraceEvent(TraceSeverity severity,
288
255
  }
289
256
 
290
257
  //
291
- // EdsLb::EndpointWatcher
258
+ // EdsLb::EndpointWatcher::Notifier
292
259
  //
293
260
 
294
- class EdsLb::EndpointWatcher : public XdsClient::EndpointWatcherInterface {
295
- public:
296
- explicit EndpointWatcher(RefCountedPtr<EdsLb> eds_policy)
297
- : eds_policy_(std::move(eds_policy)) {}
298
-
299
- ~EndpointWatcher() { eds_policy_.reset(DEBUG_LOCATION, "EndpointWatcher"); }
261
+ EdsLb::EndpointWatcher::Notifier::Notifier(RefCountedPtr<EdsLb> parent,
262
+ XdsApi::EdsUpdate update)
263
+ : parent_(std::move(parent)), update_(std::move(update)), type_(kUpdate) {
264
+ GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
265
+ ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
266
+ }
300
267
 
301
- void OnEndpointChanged(XdsApi::EdsUpdate update) override {
302
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
303
- gpr_log(GPR_INFO, "[edslb %p] Received EDS update from xds client",
304
- eds_policy_.get());
305
- }
306
- // Update the drop config.
307
- const bool drop_config_changed =
308
- eds_policy_->drop_config_ == nullptr ||
309
- *eds_policy_->drop_config_ != *update.drop_config;
310
- if (drop_config_changed) {
311
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
312
- gpr_log(GPR_INFO, "[edslb %p] Updating drop config", eds_policy_.get());
313
- }
314
- eds_policy_->drop_config_ = std::move(update.drop_config);
315
- eds_policy_->MaybeUpdateDropPickerLocked();
316
- } else if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
317
- gpr_log(GPR_INFO, "[edslb %p] Drop config unchanged, ignoring",
318
- eds_policy_.get());
319
- }
320
- // Update priority and locality info.
321
- if (eds_policy_->child_policy_ == nullptr ||
322
- eds_policy_->priority_list_update_ != update.priority_list_update) {
323
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
324
- gpr_log(GPR_INFO, "[edslb %p] Updating priority list",
325
- eds_policy_.get());
326
- }
327
- eds_policy_->UpdatePriorityList(std::move(update.priority_list_update));
328
- } else if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
329
- gpr_log(GPR_INFO, "[edslb %p] Priority list unchanged, ignoring",
330
- eds_policy_.get());
331
- }
332
- }
268
+ EdsLb::EndpointWatcher::Notifier::Notifier(RefCountedPtr<EdsLb> parent,
269
+ grpc_error* error)
270
+ : parent_(std::move(parent)), type_(kError) {
271
+ GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
272
+ ExecCtx::Run(DEBUG_LOCATION, &closure_, error);
273
+ }
333
274
 
334
- void OnError(grpc_error* error) override {
335
- gpr_log(GPR_ERROR, "[edslb %p] xds watcher reported error: %s",
336
- eds_policy_.get(), grpc_error_string(error));
337
- // Go into TRANSIENT_FAILURE if we have not yet created the child
338
- // policy (i.e., we have not yet received data from xds). Otherwise,
339
- // we keep running with the data we had previously.
340
- if (eds_policy_->child_policy_ == nullptr) {
341
- eds_policy_->channel_control_helper()->UpdateState(
342
- GRPC_CHANNEL_TRANSIENT_FAILURE,
343
- absl::make_unique<TransientFailurePicker>(error));
344
- } else {
345
- GRPC_ERROR_UNREF(error);
346
- }
347
- }
275
+ EdsLb::EndpointWatcher::Notifier::Notifier(RefCountedPtr<EdsLb> parent)
276
+ : parent_(std::move(parent)), type_(kDoesNotExist) {
277
+ GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
278
+ ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
279
+ }
348
280
 
349
- void OnResourceDoesNotExist() override {
350
- gpr_log(
351
- GPR_ERROR,
352
- "[edslb %p] EDS resource does not exist -- reporting TRANSIENT_FAILURE",
353
- eds_policy_.get());
354
- eds_policy_->channel_control_helper()->UpdateState(
355
- GRPC_CHANNEL_TRANSIENT_FAILURE,
356
- absl::make_unique<TransientFailurePicker>(
357
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(
358
- "EDS resource does not exist")));
359
- eds_policy_->MaybeDestroyChildPolicyLocked();
360
- }
281
+ void EdsLb::EndpointWatcher::Notifier::RunInExecCtx(void* arg,
282
+ grpc_error* error) {
283
+ Notifier* self = static_cast<Notifier*>(arg);
284
+ GRPC_ERROR_REF(error);
285
+ self->parent_->work_serializer()->Run(
286
+ [self, error]() { self->RunInWorkSerializer(error); }, DEBUG_LOCATION);
287
+ }
361
288
 
362
- private:
363
- RefCountedPtr<EdsLb> eds_policy_;
364
- };
289
+ void EdsLb::EndpointWatcher::Notifier::RunInWorkSerializer(grpc_error* error) {
290
+ switch (type_) {
291
+ case kUpdate:
292
+ parent_->OnEndpointChanged(std::move(update_));
293
+ break;
294
+ case kError:
295
+ parent_->OnError(error);
296
+ break;
297
+ case kDoesNotExist:
298
+ parent_->OnResourceDoesNotExist();
299
+ break;
300
+ };
301
+ delete this;
302
+ }
365
303
 
366
304
  //
367
305
  // EdsLb public methods
368
306
  //
369
307
 
370
- EdsLb::EdsLb(Args args)
371
- : LoadBalancingPolicy(std::move(args)),
372
- xds_client_from_channel_(XdsClient::GetFromChannelArgs(*args.args)) {
308
+ EdsLb::EdsLb(RefCountedPtr<XdsClient> xds_client, Args args)
309
+ : LoadBalancingPolicy(std::move(args)), xds_client_(std::move(xds_client)) {
373
310
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
374
- gpr_log(GPR_INFO, "[edslb %p] created -- xds client from channel: %p", this,
375
- xds_client_from_channel_.get());
311
+ gpr_log(GPR_INFO, "[edslb %p] created -- using xds client %p", this,
312
+ xds_client_.get());
376
313
  }
377
314
  // Record server name.
378
- const grpc_arg* arg = grpc_channel_args_find(args.args, GRPC_ARG_SERVER_URI);
379
- const char* server_uri = grpc_channel_arg_get_string(arg);
315
+ const char* server_uri =
316
+ grpc_channel_args_find_string(args.args, GRPC_ARG_SERVER_URI);
380
317
  GPR_ASSERT(server_uri != nullptr);
381
318
  grpc_uri* uri = grpc_uri_parse(server_uri, true);
382
319
  GPR_ASSERT(uri->path[0] != '\0');
383
320
  server_name_ = uri->path[0] == '/' ? uri->path + 1 : uri->path;
321
+ is_xds_uri_ = strcmp(uri->scheme, "xds") == 0;
384
322
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
385
- gpr_log(GPR_INFO, "[edslb %p] server name from channel: %s", this,
386
- server_name_.c_str());
323
+ gpr_log(GPR_INFO, "[edslb %p] server name from channel (is_xds_uri=%d): %s",
324
+ this, is_xds_uri_, server_name_.c_str());
387
325
  }
388
326
  grpc_uri_destroy(uri);
327
+ // EDS-only flow.
328
+ if (!is_xds_uri_) {
329
+ // Setup channelz linkage.
330
+ channelz::ChannelNode* parent_channelz_node =
331
+ grpc_channel_args_find_pointer<channelz::ChannelNode>(
332
+ args.args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
333
+ if (parent_channelz_node != nullptr) {
334
+ xds_client_->AddChannelzLinkage(parent_channelz_node);
335
+ }
336
+ // Couple polling.
337
+ grpc_pollset_set_add_pollset_set(xds_client_->interested_parties(),
338
+ interested_parties());
339
+ }
389
340
  }
390
341
 
391
342
  EdsLb::~EdsLb() {
392
343
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
393
- gpr_log(GPR_INFO, "[edslb %p] destroying xds LB policy", this);
344
+ gpr_log(GPR_INFO, "[edslb %p] destroying eds LB policy", this);
394
345
  }
395
- grpc_channel_args_destroy(args_);
396
346
  }
397
347
 
398
348
  void EdsLb::ShutdownLocked() {
@@ -400,27 +350,32 @@ void EdsLb::ShutdownLocked() {
400
350
  gpr_log(GPR_INFO, "[edslb %p] shutting down", this);
401
351
  }
402
352
  shutting_down_ = true;
403
- // Drop our ref to the child's picker, in case it's holding a ref to
404
- // the child.
405
- child_picker_.reset();
406
353
  MaybeDestroyChildPolicyLocked();
407
- drop_stats_.reset();
408
- // Cancel the endpoint watch here instead of in our dtor if we are using the
409
- // xds resolver, because the watcher holds a ref to us and we might not be
410
- // destroying the XdsClient, leading to a situation where this LB policy is
411
- // never destroyed.
412
- if (xds_client_from_channel_ != nullptr) {
413
- if (config_ != nullptr) {
414
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
415
- gpr_log(GPR_INFO, "[edslb %p] cancelling xds watch for %s", this,
416
- std::string(GetEdsResourceName()).c_str());
417
- }
418
- xds_client()->CancelEndpointDataWatch(GetEdsResourceName(),
419
- endpoint_watcher_);
354
+ // Cancel watcher.
355
+ if (endpoint_watcher_ != nullptr) {
356
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
357
+ gpr_log(GPR_INFO, "[edslb %p] cancelling xds watch for %s", this,
358
+ std::string(GetEdsResourceName()).c_str());
359
+ }
360
+ xds_client_->CancelEndpointDataWatch(GetEdsResourceName(),
361
+ endpoint_watcher_);
362
+ }
363
+ if (!is_xds_uri_) {
364
+ // Remove channelz linkage.
365
+ channelz::ChannelNode* parent_channelz_node =
366
+ grpc_channel_args_find_pointer<channelz::ChannelNode>(
367
+ args_, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
368
+ if (parent_channelz_node != nullptr) {
369
+ xds_client_->RemoveChannelzLinkage(parent_channelz_node);
420
370
  }
421
- xds_client_from_channel_.reset();
371
+ // Decouple polling.
372
+ grpc_pollset_set_del_pollset_set(xds_client_->interested_parties(),
373
+ interested_parties());
422
374
  }
423
- xds_client_.reset();
375
+ xds_client_.reset(DEBUG_LOCATION, "EdsLb");
376
+ // Destroy channel args.
377
+ grpc_channel_args_destroy(args_);
378
+ args_ = nullptr;
424
379
  }
425
380
 
426
381
  void EdsLb::MaybeDestroyChildPolicyLocked() {
@@ -443,37 +398,7 @@ void EdsLb::UpdateLocked(UpdateArgs args) {
443
398
  grpc_channel_args_destroy(args_);
444
399
  args_ = args.args;
445
400
  args.args = nullptr;
446
- if (is_initial_update) {
447
- // Initialize XdsClient.
448
- if (xds_client_from_channel_ == nullptr) {
449
- grpc_error* error = GRPC_ERROR_NONE;
450
- xds_client_ = MakeOrphanable<XdsClient>(
451
- work_serializer(), interested_parties(), GetEdsResourceName(),
452
- nullptr /* service config watcher */, *args_, &error);
453
- // TODO(roth): If we decide that we care about EDS-only mode, add
454
- // proper error handling here.
455
- GPR_ASSERT(error == GRPC_ERROR_NONE);
456
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
457
- gpr_log(GPR_INFO, "[edslb %p] Created xds client %p", this,
458
- xds_client_.get());
459
- }
460
- }
461
- }
462
- // Update drop stats for load reporting if needed.
463
- if (is_initial_update || config_->lrs_load_reporting_server_name() !=
464
- old_config->lrs_load_reporting_server_name()) {
465
- drop_stats_.reset();
466
- if (config_->lrs_load_reporting_server_name().has_value()) {
467
- const auto key = GetLrsClusterKey();
468
- drop_stats_ = xds_client()->AddClusterDropStats(
469
- config_->lrs_load_reporting_server_name().value(),
470
- key.first /*cluster_name*/, key.second /*eds_service_name*/);
471
- }
472
- MaybeUpdateDropPickerLocked();
473
- }
474
401
  // Update child policy if needed.
475
- // Note that this comes after updating drop_stats_, since we want that
476
- // to be used by any new picker we create here.
477
402
  if (child_policy_ != nullptr) UpdateChildPolicyLocked();
478
403
  // Create endpoint watcher if needed.
479
404
  if (is_initial_update) {
@@ -484,53 +409,89 @@ void EdsLb::UpdateLocked(UpdateArgs args) {
484
409
  auto watcher = absl::make_unique<EndpointWatcher>(
485
410
  Ref(DEBUG_LOCATION, "EndpointWatcher"));
486
411
  endpoint_watcher_ = watcher.get();
487
- xds_client()->WatchEndpointData(GetEdsResourceName(), std::move(watcher));
412
+ xds_client_->WatchEndpointData(GetEdsResourceName(), std::move(watcher));
488
413
  }
489
414
  }
490
415
 
491
416
  void EdsLb::ResetBackoffLocked() {
492
417
  // When the XdsClient is instantiated in the resolver instead of in this
493
- // LB policy, this is done via the resolver, so we don't need to do it
494
- // for xds_client_from_channel_ here.
495
- if (xds_client_ != nullptr) xds_client_->ResetBackoff();
418
+ // LB policy, this is done via the resolver, so we don't need to do it here.
419
+ if (!is_xds_uri_ && xds_client_ != nullptr) xds_client_->ResetBackoff();
496
420
  if (child_policy_ != nullptr) {
497
421
  child_policy_->ResetBackoffLocked();
498
422
  }
499
423
  }
500
424
 
425
+ void EdsLb::OnEndpointChanged(XdsApi::EdsUpdate update) {
426
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
427
+ gpr_log(GPR_INFO, "[edslb %p] Received EDS update from xds client", this);
428
+ }
429
+ // Update the drop config.
430
+ drop_config_ = std::move(update.drop_config);
431
+ // If priority list is empty, add a single priority, just so that we
432
+ // have a child in which to create the xds_cluster_impl policy.
433
+ if (update.priorities.empty()) update.priorities.emplace_back();
434
+ // Update child policy.
435
+ UpdatePriorityList(std::move(update.priorities));
436
+ }
437
+
438
+ void EdsLb::OnError(grpc_error* error) {
439
+ gpr_log(GPR_ERROR, "[edslb %p] xds watcher reported error: %s", this,
440
+ grpc_error_string(error));
441
+ // Go into TRANSIENT_FAILURE if we have not yet created the child
442
+ // policy (i.e., we have not yet received data from xds). Otherwise,
443
+ // we keep running with the data we had previously.
444
+ if (child_policy_ == nullptr) {
445
+ channel_control_helper()->UpdateState(
446
+ GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
447
+ absl::make_unique<TransientFailurePicker>(error));
448
+ } else {
449
+ GRPC_ERROR_UNREF(error);
450
+ }
451
+ }
452
+
453
+ void EdsLb::OnResourceDoesNotExist() {
454
+ gpr_log(
455
+ GPR_ERROR,
456
+ "[edslb %p] EDS resource does not exist -- reporting TRANSIENT_FAILURE",
457
+ this);
458
+ grpc_error* error = grpc_error_set_int(
459
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("EDS resource does not exist"),
460
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
461
+ channel_control_helper()->UpdateState(
462
+ GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
463
+ absl::make_unique<TransientFailurePicker>(error));
464
+ MaybeDestroyChildPolicyLocked();
465
+ }
466
+
501
467
  //
502
468
  // child policy-related methods
503
469
  //
504
470
 
505
- void EdsLb::UpdatePriorityList(
506
- XdsApi::PriorityListUpdate priority_list_update) {
471
+ void EdsLb::UpdatePriorityList(XdsApi::EdsUpdate::PriorityList priority_list) {
507
472
  // Build some maps from locality to child number and the reverse from
508
- // the old data in priority_list_update_ and priority_child_numbers_.
473
+ // the old data in priority_list_ and priority_child_numbers_.
509
474
  std::map<XdsLocalityName*, size_t /*child_number*/, XdsLocalityName::Less>
510
475
  locality_child_map;
511
476
  std::map<size_t, std::set<XdsLocalityName*>> child_locality_map;
512
- for (uint32_t priority = 0; priority < priority_list_update_.size();
513
- ++priority) {
514
- auto* locality_map = priority_list_update_.Find(priority);
515
- GPR_ASSERT(locality_map != nullptr);
477
+ for (size_t priority = 0; priority < priority_list_.size(); ++priority) {
516
478
  size_t child_number = priority_child_numbers_[priority];
517
- for (const auto& p : locality_map->localities) {
518
- XdsLocalityName* locality_name = p.first.get();
479
+ const auto& localities = priority_list_[priority].localities;
480
+ for (const auto& p : localities) {
481
+ XdsLocalityName* locality_name = p.first;
519
482
  locality_child_map[locality_name] = child_number;
520
483
  child_locality_map[child_number].insert(locality_name);
521
484
  }
522
485
  }
523
486
  // Construct new list of children.
524
487
  std::vector<size_t> priority_child_numbers;
525
- for (uint32_t priority = 0; priority < priority_list_update.size();
526
- ++priority) {
527
- auto* locality_map = priority_list_update.Find(priority);
528
- GPR_ASSERT(locality_map != nullptr);
488
+ for (size_t priority = 0; priority < priority_list.size(); ++priority) {
489
+ const auto& localities = priority_list[priority].localities;
529
490
  absl::optional<size_t> child_number;
530
491
  // If one of the localities in this priority already existed, reuse its
531
492
  // child number.
532
- for (const auto& p : locality_map->localities) {
533
- XdsLocalityName* locality_name = p.first.get();
493
+ for (const auto& p : localities) {
494
+ XdsLocalityName* locality_name = p.first;
534
495
  if (!child_number.has_value()) {
535
496
  auto it = locality_child_map.find(locality_name);
536
497
  if (it != locality_child_map.end()) {
@@ -555,8 +516,8 @@ void EdsLb::UpdatePriorityList(
555
516
  if (!child_number.has_value()) {
556
517
  for (child_number = 0;
557
518
  child_locality_map.find(*child_number) != child_locality_map.end();
558
- ++(*child_number))
559
- ;
519
+ ++(*child_number)) {
520
+ }
560
521
  // Add entry so we know that the child number is in use.
561
522
  // (Don't need to add the list of localities, since we won't use them.)
562
523
  child_locality_map[*child_number];
@@ -564,7 +525,7 @@ void EdsLb::UpdatePriorityList(
564
525
  priority_child_numbers.push_back(*child_number);
565
526
  }
566
527
  // Save update.
567
- priority_list_update_ = std::move(priority_list_update);
528
+ priority_list_ = std::move(priority_list);
568
529
  priority_child_numbers_ = std::move(priority_child_numbers);
569
530
  // Update child policy.
570
531
  UpdateChildPolicyLocked();
@@ -572,23 +533,23 @@ void EdsLb::UpdatePriorityList(
572
533
 
573
534
  ServerAddressList EdsLb::CreateChildPolicyAddressesLocked() {
574
535
  ServerAddressList addresses;
575
- for (uint32_t priority = 0; priority < priority_list_update_.size();
576
- ++priority) {
536
+ for (size_t priority = 0; priority < priority_list_.size(); ++priority) {
537
+ const auto& localities = priority_list_[priority].localities;
577
538
  std::string priority_child_name =
578
539
  absl::StrCat("child", priority_child_numbers_[priority]);
579
- const auto* locality_map = priority_list_update_.Find(priority);
580
- GPR_ASSERT(locality_map != nullptr);
581
- for (const auto& p : locality_map->localities) {
540
+ for (const auto& p : localities) {
582
541
  const auto& locality_name = p.first;
583
542
  const auto& locality = p.second;
584
543
  std::vector<std::string> hierarchical_path = {
585
544
  priority_child_name, locality_name->AsHumanReadableString()};
586
- for (size_t i = 0; i < locality.serverlist.size(); ++i) {
587
- const ServerAddress& address = locality.serverlist[i];
588
- grpc_arg new_arg = MakeHierarchicalPathArg(hierarchical_path);
589
- grpc_channel_args* args =
590
- grpc_channel_args_copy_and_add(address.args(), &new_arg, 1);
591
- addresses.emplace_back(address.address(), args);
545
+ for (const auto& endpoint : locality.endpoints) {
546
+ addresses.emplace_back(
547
+ endpoint
548
+ .WithAttribute(kHierarchicalPathAttributeKey,
549
+ MakeHierarchicalPathAttribute(hierarchical_path))
550
+ .WithAttribute(kXdsLocalityNameAttributeKey,
551
+ absl::make_unique<XdsLocalityAttribute>(
552
+ locality_name->Ref())));
592
553
  }
593
554
  }
594
555
  }
@@ -597,15 +558,14 @@ ServerAddressList EdsLb::CreateChildPolicyAddressesLocked() {
597
558
 
598
559
  RefCountedPtr<LoadBalancingPolicy::Config>
599
560
  EdsLb::CreateChildPolicyConfigLocked() {
561
+ const auto lrs_key = GetLrsClusterKey();
600
562
  Json::Object priority_children;
601
563
  Json::Array priority_priorities;
602
- for (uint32_t priority = 0; priority < priority_list_update_.size();
603
- ++priority) {
604
- const auto* locality_map = priority_list_update_.Find(priority);
605
- GPR_ASSERT(locality_map != nullptr);
564
+ for (size_t priority = 0; priority < priority_list_.size(); ++priority) {
565
+ const auto& localities = priority_list_[priority].localities;
606
566
  Json::Object weighted_targets;
607
- for (const auto& p : locality_map->localities) {
608
- XdsLocalityName* locality_name = p.first.get();
567
+ for (const auto& p : localities) {
568
+ XdsLocalityName* locality_name = p.first;
609
569
  const auto& locality = p.second;
610
570
  // Construct JSON object containing locality name.
611
571
  Json::Object locality_name_json;
@@ -618,45 +578,51 @@ EdsLb::CreateChildPolicyConfigLocked() {
618
578
  if (!locality_name->sub_zone().empty()) {
619
579
  locality_name_json["subzone"] = locality_name->sub_zone();
620
580
  }
621
- // Construct endpoint-picking policy.
622
- // Wrap it in the LRS policy if load reporting is enabled.
623
- Json endpoint_picking_policy;
624
- if (config_->lrs_load_reporting_server_name().has_value()) {
625
- const auto key = GetLrsClusterKey();
626
- Json::Object lrs_config = {
627
- {"clusterName", std::string(key.first)},
628
- {"locality", std::move(locality_name_json)},
629
- {"lrsLoadReportingServerName",
630
- config_->lrs_load_reporting_server_name().value()},
631
- {"childPolicy", config_->endpoint_picking_policy()},
632
- };
633
- if (!key.second.empty()) {
634
- lrs_config["edsServiceName"] = std::string(key.second);
635
- }
636
- endpoint_picking_policy = Json::Array{Json::Object{
637
- {"lrs_experimental", std::move(lrs_config)},
638
- }};
639
- } else {
640
- endpoint_picking_policy = config_->endpoint_picking_policy();
641
- }
642
581
  // Add weighted target entry.
643
582
  weighted_targets[locality_name->AsHumanReadableString()] = Json::Object{
644
583
  {"weight", locality.lb_weight},
645
- {"childPolicy", std::move(endpoint_picking_policy)},
584
+ {"childPolicy", config_->endpoint_picking_policy()},
646
585
  };
647
586
  }
648
- // Add priority entry.
649
- const size_t child_number = priority_child_numbers_[priority];
650
- std::string child_name = absl::StrCat("child", child_number);
651
- priority_priorities.emplace_back(child_name);
587
+ // Construct locality-picking policy.
588
+ // Start with field from our config and add the "targets" field.
652
589
  Json locality_picking_config = config_->locality_picking_policy();
653
590
  Json::Object& config =
654
591
  *(*locality_picking_config.mutable_array())[0].mutable_object();
655
592
  auto it = config.begin();
656
593
  GPR_ASSERT(it != config.end());
657
594
  (*it->second.mutable_object())["targets"] = std::move(weighted_targets);
595
+ // Wrap it in the drop policy.
596
+ Json::Array drop_categories;
597
+ for (const auto& category : drop_config_->drop_category_list()) {
598
+ drop_categories.push_back(Json::Object{
599
+ {"category", category.name},
600
+ {"requests_per_million", category.parts_per_million},
601
+ });
602
+ }
603
+ Json::Object xds_cluster_impl_config = {
604
+ {"clusterName", std::string(lrs_key.first)},
605
+ {"childPolicy", std::move(locality_picking_config)},
606
+ {"dropCategories", std::move(drop_categories)},
607
+ {"maxConcurrentRequests", config_->max_concurrent_requests()},
608
+ };
609
+ if (!lrs_key.second.empty()) {
610
+ xds_cluster_impl_config["edsServiceName"] = std::string(lrs_key.second);
611
+ }
612
+ if (config_->lrs_load_reporting_server_name().has_value()) {
613
+ xds_cluster_impl_config["lrsLoadReportingServerName"] =
614
+ config_->lrs_load_reporting_server_name().value();
615
+ }
616
+ Json locality_picking_policy = Json::Array{Json::Object{
617
+ {"xds_cluster_impl_experimental", std::move(xds_cluster_impl_config)},
618
+ }};
619
+ // Add priority entry.
620
+ const size_t child_number = priority_child_numbers_[priority];
621
+ std::string child_name = absl::StrCat("child", child_number);
622
+ priority_priorities.emplace_back(child_name);
658
623
  priority_children[child_name] = Json::Object{
659
- {"config", std::move(locality_picking_config)},
624
+ {"config", std::move(locality_picking_policy)},
625
+ {"ignore_reresolution_requests", true},
660
626
  };
661
627
  }
662
628
  Json json = Json::Array{Json::Object{
@@ -688,7 +654,7 @@ EdsLb::CreateChildPolicyConfigLocked() {
688
654
  error),
689
655
  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_INTERNAL);
690
656
  channel_control_helper()->UpdateState(
691
- GRPC_CHANNEL_TRANSIENT_FAILURE,
657
+ GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
692
658
  absl::make_unique<TransientFailurePicker>(error));
693
659
  return nullptr;
694
660
  }
@@ -714,9 +680,11 @@ void EdsLb::UpdateChildPolicyLocked() {
714
680
 
715
681
  grpc_channel_args* EdsLb::CreateChildPolicyArgsLocked(
716
682
  const grpc_channel_args* args) {
717
- absl::InlinedVector<grpc_arg, 3> args_to_add = {
683
+ grpc_arg args_to_add[] = {
718
684
  // A channel arg indicating if the target is a backend inferred from an
719
685
  // xds load balancer.
686
+ // TODO(roth): This isn't needed with the new fallback design.
687
+ // Remove as part of implementing the new fallback functionality.
720
688
  grpc_channel_arg_integer_create(
721
689
  const_cast<char*>(GRPC_ARG_ADDRESS_IS_BACKEND_FROM_XDS_LOAD_BALANCER),
722
690
  1),
@@ -725,18 +693,8 @@ grpc_channel_args* EdsLb::CreateChildPolicyArgsLocked(
725
693
  grpc_channel_arg_integer_create(
726
694
  const_cast<char*>(GRPC_ARG_INHIBIT_HEALTH_CHECKING), 1),
727
695
  };
728
- absl::InlinedVector<const char*, 1> args_to_remove;
729
- if (xds_client_from_channel_ == nullptr) {
730
- args_to_add.emplace_back(xds_client_->MakeChannelArg());
731
- } else if (!config_->lrs_load_reporting_server_name().has_value()) {
732
- // Remove XdsClient from channel args, so that its presence doesn't
733
- // prevent us from sharing subchannels between channels.
734
- // If load reporting is enabled, this happens in the LRS policy instead.
735
- args_to_remove.push_back(GRPC_ARG_XDS_CLIENT);
736
- }
737
- return grpc_channel_args_copy_and_add_and_remove(
738
- args, args_to_remove.data(), args_to_remove.size(), args_to_add.data(),
739
- args_to_add.size());
696
+ return grpc_channel_args_copy_and_add(args, args_to_add,
697
+ GPR_ARRAY_SIZE(args_to_add));
740
698
  }
741
699
 
742
700
  OrphanablePtr<LoadBalancingPolicy> EdsLb::CreateChildPolicyLocked(
@@ -765,21 +723,6 @@ OrphanablePtr<LoadBalancingPolicy> EdsLb::CreateChildPolicyLocked(
765
723
  return lb_policy;
766
724
  }
767
725
 
768
- void EdsLb::MaybeUpdateDropPickerLocked() {
769
- // If we're dropping all calls, report READY, regardless of what (or
770
- // whether) the child has reported.
771
- if (drop_config_ != nullptr && drop_config_->drop_all()) {
772
- channel_control_helper()->UpdateState(GRPC_CHANNEL_READY,
773
- absl::make_unique<DropPicker>(this));
774
- return;
775
- }
776
- // Update only if we have a child picker.
777
- if (child_picker_ != nullptr) {
778
- channel_control_helper()->UpdateState(child_state_,
779
- absl::make_unique<DropPicker>(this));
780
- }
781
- }
782
-
783
726
  //
784
727
  // factory
785
728
  //
@@ -788,7 +731,17 @@ class EdsLbFactory : public LoadBalancingPolicyFactory {
788
731
  public:
789
732
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
790
733
  LoadBalancingPolicy::Args args) const override {
791
- return MakeOrphanable<EdsChildHandler>(std::move(args), &grpc_lb_eds_trace);
734
+ grpc_error* error = GRPC_ERROR_NONE;
735
+ RefCountedPtr<XdsClient> xds_client = XdsClient::GetOrCreate(&error);
736
+ if (error != GRPC_ERROR_NONE) {
737
+ gpr_log(GPR_ERROR,
738
+ "cannot get XdsClient to instantiate eds LB policy: %s",
739
+ grpc_error_string(error));
740
+ GRPC_ERROR_UNREF(error);
741
+ return nullptr;
742
+ }
743
+ return MakeOrphanable<EdsChildHandler>(std::move(xds_client),
744
+ std::move(args));
792
745
  }
793
746
 
794
747
  const char* name() const override { return kEds; }
@@ -882,13 +835,25 @@ class EdsLbFactory : public LoadBalancingPolicyFactory {
882
835
  "endpointPickingPolicy", &parse_error, 1));
883
836
  GRPC_ERROR_UNREF(parse_error);
884
837
  }
838
+ // Max concurrent requests.
839
+ uint32_t max_concurrent_requests = 1024;
840
+ it = json.object_value().find("max_concurrent_requests");
841
+ if (it != json.object_value().end()) {
842
+ if (it->second.type() != Json::Type::NUMBER) {
843
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
844
+ "field:max_concurrent_requests error:must be of type number"));
845
+ } else {
846
+ max_concurrent_requests =
847
+ gpr_parse_nonnegative_int(it->second.string_value().c_str());
848
+ }
849
+ }
885
850
  // Construct config.
886
851
  if (error_list.empty()) {
887
852
  return MakeRefCounted<EdsLbConfig>(
888
853
  std::move(cluster_name), std::move(eds_service_name),
889
854
  std::move(lrs_load_reporting_server_name),
890
855
  std::move(locality_picking_policy),
891
- std::move(endpoint_picking_policy));
856
+ std::move(endpoint_picking_policy), max_concurrent_requests);
892
857
  } else {
893
858
  *error = GRPC_ERROR_CREATE_FROM_VECTOR(
894
859
  "eds_experimental LB policy config", &error_list);
@@ -899,8 +864,9 @@ class EdsLbFactory : public LoadBalancingPolicyFactory {
899
864
  private:
900
865
  class EdsChildHandler : public ChildPolicyHandler {
901
866
  public:
902
- EdsChildHandler(Args args, TraceFlag* tracer)
903
- : ChildPolicyHandler(std::move(args), tracer) {}
867
+ EdsChildHandler(RefCountedPtr<XdsClient> xds_client, Args args)
868
+ : ChildPolicyHandler(std::move(args), &grpc_lb_eds_trace),
869
+ xds_client_(std::move(xds_client)) {}
904
870
 
905
871
  bool ConfigChangeRequiresNewPolicyInstance(
906
872
  LoadBalancingPolicy::Config* old_config,
@@ -911,13 +877,18 @@ class EdsLbFactory : public LoadBalancingPolicyFactory {
911
877
  EdsLbConfig* new_eds_config = static_cast<EdsLbConfig*>(new_config);
912
878
  return old_eds_config->cluster_name() != new_eds_config->cluster_name() ||
913
879
  old_eds_config->eds_service_name() !=
914
- new_eds_config->eds_service_name();
880
+ new_eds_config->eds_service_name() ||
881
+ old_eds_config->lrs_load_reporting_server_name() !=
882
+ new_eds_config->lrs_load_reporting_server_name();
915
883
  }
916
884
 
917
885
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
918
886
  const char* name, LoadBalancingPolicy::Args args) const override {
919
- return MakeOrphanable<EdsLb>(std::move(args));
887
+ return MakeOrphanable<EdsLb>(xds_client_, std::move(args));
920
888
  }
889
+
890
+ private:
891
+ RefCountedPtr<XdsClient> xds_client_;
921
892
  };
922
893
  };
923
894