grpc 1.31.1 → 1.32.0.pre1

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 (431) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +595 -15723
  3. data/include/grpc/grpc_security.h +31 -14
  4. data/include/grpc/impl/codegen/README.md +22 -0
  5. data/include/grpc/impl/codegen/port_platform.h +6 -1
  6. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
  7. data/src/core/ext/filters/client_channel/client_channel.cc +64 -20
  8. data/src/core/ext/filters/client_channel/client_channel.h +1 -1
  9. data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
  10. data/src/core/ext/filters/client_channel/health/health_check_client.cc +6 -1
  11. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -3
  12. data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
  13. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -4
  14. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +20 -13
  15. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
  18. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -13
  19. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +29 -10
  20. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +5 -4
  21. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +20 -9
  22. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +18 -12
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +22 -14
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +18 -9
  25. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +54 -56
  26. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +3 -3
  27. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  28. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  29. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
  30. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  31. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +363 -14
  32. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +0 -1
  33. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +5 -4
  34. data/src/core/ext/filters/client_channel/server_address.cc +40 -7
  35. data/src/core/ext/filters/client_channel/server_address.h +42 -4
  36. data/src/core/ext/filters/client_channel/subchannel.cc +64 -23
  37. data/src/core/ext/filters/client_channel/subchannel.h +16 -4
  38. data/src/core/ext/filters/max_age/max_age_filter.cc +2 -1
  39. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
  40. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +18 -1
  41. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
  42. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +19 -25
  43. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -1
  44. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -2
  45. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +6 -6
  46. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -2
  47. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +239 -277
  48. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -1
  49. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  50. data/src/core/ext/transport/chttp2/transport/internal.h +5 -1
  51. data/src/core/ext/transport/chttp2/transport/parsing.cc +1 -28
  52. data/src/core/ext/transport/chttp2/transport/writing.cc +6 -5
  53. data/src/core/ext/transport/inproc/inproc_transport.cc +12 -12
  54. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +224 -0
  55. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +700 -0
  56. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  57. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
  58. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +380 -0
  59. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1378 -0
  60. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
  61. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
  62. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
  63. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
  64. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +112 -0
  65. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +334 -0
  66. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
  67. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
  68. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +309 -0
  69. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
  70. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +96 -0
  71. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +328 -0
  72. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  73. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
  74. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +195 -0
  75. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +634 -0
  76. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  77. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
  78. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
  79. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
  80. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +152 -0
  81. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +536 -0
  82. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
  83. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
  84. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
  85. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
  86. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
  87. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
  88. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  89. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
  90. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  91. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
  92. data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
  93. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
  94. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +108 -0
  95. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +401 -0
  96. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +138 -0
  97. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +490 -0
  98. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
  99. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
  100. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +174 -0
  101. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +599 -0
  102. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
  103. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
  104. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +773 -0
  105. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2855 -0
  106. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +59 -0
  107. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +135 -0
  108. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
  109. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
  110. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +312 -0
  111. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1125 -0
  112. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
  113. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
  114. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +111 -0
  115. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +401 -0
  116. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +72 -0
  117. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +198 -0
  118. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +105 -0
  119. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +388 -0
  120. data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
  121. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
  122. data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
  123. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
  124. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +129 -0
  125. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +386 -0
  126. data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
  127. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
  128. data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
  129. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
  130. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
  131. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
  132. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
  133. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
  134. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
  135. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
  136. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  137. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
  138. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  139. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
  140. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  141. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
  142. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  143. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
  144. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
  145. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +127 -0
  146. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  147. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
  148. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  149. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
  150. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  151. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
  152. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
  153. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -8
  154. data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
  155. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
  156. data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
  157. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
  158. data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
  159. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
  160. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
  161. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
  162. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +36 -36
  163. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +1 -1
  164. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  165. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
  166. data/src/core/ext/upb-generated/validate/validate.upb.c +11 -11
  167. data/src/core/ext/upb-generated/validate/validate.upb.h +1 -1
  168. data/src/core/ext/{filters/client_channel/xds → xds}/xds_api.cc +1045 -767
  169. data/src/core/ext/{filters/client_channel/xds → xds}/xds_api.h +114 -99
  170. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +44 -2
  171. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +8 -3
  172. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel.h +4 -4
  173. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +3 -3
  174. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_secure.cc +2 -5
  175. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +85 -417
  176. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +12 -45
  177. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +2 -2
  178. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +3 -3
  179. data/src/core/lib/channel/channelz.cc +14 -15
  180. data/src/core/lib/channel/channelz.h +1 -1
  181. data/src/core/lib/channel/channelz_registry.cc +3 -1
  182. data/src/core/lib/gpr/sync_posix.cc +2 -8
  183. data/src/core/lib/iomgr/endpoint.cc +5 -1
  184. data/src/core/lib/iomgr/endpoint.h +7 -3
  185. data/src/core/lib/iomgr/endpoint_cfstream.cc +32 -11
  186. data/src/core/lib/iomgr/ev_posix.cc +0 -2
  187. data/src/core/lib/iomgr/iomgr.cc +0 -10
  188. data/src/core/lib/iomgr/iomgr.h +0 -10
  189. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +1 -1
  190. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +3 -3
  191. data/src/core/lib/iomgr/sockaddr_utils.cc +2 -1
  192. data/src/core/lib/iomgr/sockaddr_utils.h +2 -1
  193. data/src/core/lib/iomgr/tcp_custom.cc +32 -16
  194. data/src/core/lib/iomgr/tcp_posix.cc +31 -13
  195. data/src/core/lib/iomgr/tcp_windows.cc +26 -10
  196. data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
  197. data/src/core/lib/security/authorization/authorization_engine.h +84 -0
  198. data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
  199. data/src/core/lib/security/authorization/evaluate_args.h +59 -0
  200. data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
  201. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
  202. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
  203. data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
  204. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
  205. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
  206. data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
  207. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +56 -38
  208. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -2
  209. data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
  210. data/src/core/lib/surface/call.cc +12 -12
  211. data/src/core/lib/surface/call.h +2 -1
  212. data/src/core/lib/surface/channel.cc +28 -20
  213. data/src/core/lib/surface/channel.h +12 -2
  214. data/src/core/lib/surface/completion_queue.cc +10 -272
  215. data/src/core/lib/surface/completion_queue.h +0 -8
  216. data/src/core/lib/surface/init.cc +1 -3
  217. data/src/core/lib/surface/server.cc +1066 -1244
  218. data/src/core/lib/surface/server.h +363 -87
  219. data/src/core/lib/surface/version.cc +2 -2
  220. data/src/core/lib/transport/authority_override.cc +38 -0
  221. data/src/core/lib/transport/authority_override.h +32 -0
  222. data/src/core/lib/transport/connectivity_state.cc +18 -13
  223. data/src/core/lib/transport/connectivity_state.h +18 -6
  224. data/src/core/lib/transport/error_utils.cc +13 -0
  225. data/src/core/lib/transport/error_utils.h +6 -0
  226. data/src/core/lib/transport/static_metadata.cc +295 -276
  227. data/src/core/lib/transport/static_metadata.h +80 -73
  228. data/src/core/lib/transport/transport.h +7 -0
  229. data/src/core/lib/uri/uri_parser.cc +23 -21
  230. data/src/core/lib/uri/uri_parser.h +3 -1
  231. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +22 -0
  232. data/src/core/tsi/ssl_transport_security.cc +3 -9
  233. data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
  234. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -2
  235. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -4
  236. data/src/ruby/lib/grpc/version.rb +1 -1
  237. data/src/ruby/spec/channel_credentials_spec.rb +10 -0
  238. data/src/ruby/spec/generic/active_call_spec.rb +19 -8
  239. data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
  240. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
  241. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  242. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  243. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  244. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  245. data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
  246. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  247. data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
  248. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
  249. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
  250. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
  251. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  252. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
  253. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
  254. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  255. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
  256. data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
  257. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  258. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
  259. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
  260. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  261. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
  262. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  263. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  264. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  265. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
  266. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
  267. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
  268. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
  269. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  270. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  271. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
  272. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  273. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
  274. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
  275. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  276. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  277. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  278. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
  279. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  280. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
  281. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  282. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  283. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  284. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  285. data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
  286. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  287. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  288. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  289. data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
  290. data/third_party/abseil-cpp/absl/status/status.cc +447 -0
  291. data/third_party/abseil-cpp/absl/status/status.h +428 -0
  292. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
  293. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  294. data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
  295. data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
  296. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
  297. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  298. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  299. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  300. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  301. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  302. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  303. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
  304. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  305. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  306. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
  307. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  308. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  309. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
  310. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  311. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
  312. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
  313. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  314. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  315. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  316. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  317. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  318. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  319. data/third_party/boringssl-with-bazel/err_data.c +263 -257
  320. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +16 -0
  321. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +456 -0
  322. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +192 -0
  323. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
  324. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +52 -0
  325. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
  326. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +39 -7
  327. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -3
  328. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +11 -0
  329. data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -0
  330. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
  331. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +10 -0
  332. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +34 -9
  333. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -0
  334. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  335. data/third_party/upb/upb/decode.c +64 -15
  336. data/third_party/upb/upb/encode.c +2 -2
  337. data/third_party/upb/upb/msg.h +2 -2
  338. data/third_party/upb/upb/port_def.inc +1 -1
  339. data/third_party/upb/upb/table.c +0 -11
  340. data/third_party/upb/upb/table.int.h +0 -9
  341. data/third_party/upb/upb/upb.c +16 -14
  342. data/third_party/upb/upb/upb.h +26 -0
  343. data/third_party/upb/upb/upb.hpp +2 -0
  344. metadata +257 -155
  345. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
  346. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -34
  347. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
  348. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -429
  349. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
  350. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -198
  351. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
  352. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -388
  353. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -52
  354. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
  355. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1453
  356. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
  357. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -226
  358. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  359. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -323
  360. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
  361. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -334
  362. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -79
  363. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
  364. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -891
  365. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
  366. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -328
  367. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
  368. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -71
  369. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
  370. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -649
  371. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
  372. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -693
  373. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  374. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
  375. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -536
  376. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -88
  377. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
  378. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -386
  379. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -52
  380. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
  381. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -224
  382. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
  383. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -32
  384. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
  385. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -273
  386. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
  387. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -332
  388. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -52
  389. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
  390. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -415
  391. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
  392. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -32
  393. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
  394. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -538
  395. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
  396. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -111
  397. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -52
  398. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
  399. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -204
  400. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
  401. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -32
  402. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
  403. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -2984
  404. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
  405. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -135
  406. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -52
  407. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
  408. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -732
  409. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
  410. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1167
  411. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  412. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
  413. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
  414. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -49
  415. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
  416. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -136
  417. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
  418. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -145
  419. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
  420. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  421. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
  422. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  423. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -86
  424. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -111
  425. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -61
  426. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
  427. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -250
  428. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  429. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  430. data/src/core/lib/slice/slice_hash_table.h +0 -199
  431. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
@@ -37,8 +37,6 @@
37
37
  #include <grpc/support/time.h>
38
38
 
39
39
  #include <address_sorting/address_sorting.h>
40
- #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h"
41
- #include "src/core/ext/filters/client_channel/parse_address.h"
42
40
  #include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h"
43
41
  #include "src/core/lib/gpr/string.h"
44
42
  #include "src/core/lib/gprpp/host_port.h"
@@ -46,7 +44,9 @@
46
44
  #include "src/core/lib/iomgr/executor.h"
47
45
  #include "src/core/lib/iomgr/iomgr_internal.h"
48
46
  #include "src/core/lib/iomgr/nameser.h"
47
+ #include "src/core/lib/iomgr/parse_address.h"
49
48
  #include "src/core/lib/iomgr/sockaddr_utils.h"
49
+ #include "src/core/lib/transport/authority_override.h"
50
50
 
51
51
  using grpc_core::ServerAddress;
52
52
  using grpc_core::ServerAddressList;
@@ -237,7 +237,7 @@ static void on_hostbyname_done_locked(void* arg, int status, int /*timeouts*/,
237
237
  absl::InlinedVector<grpc_arg, 1> args_to_add;
238
238
  if (hr->is_balancer) {
239
239
  args_to_add.emplace_back(
240
- grpc_core::CreateGrpclbBalancerNameArg(hr->host));
240
+ grpc_core::CreateAuthorityOverrideChannelArg(hr->host));
241
241
  }
242
242
  grpc_channel_args* args = grpc_channel_args_copy_and_add(
243
243
  nullptr, args_to_add.data(), args_to_add.size());
@@ -23,10 +23,10 @@
23
23
 
24
24
  #include <grpc/support/string_util.h>
25
25
 
26
- #include "src/core/ext/filters/client_channel/parse_address.h"
27
26
  #include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
28
27
  #include "src/core/ext/filters/client_channel/server_address.h"
29
28
  #include "src/core/lib/gpr/string.h"
29
+ #include "src/core/lib/iomgr/parse_address.h"
30
30
 
31
31
  bool grpc_ares_query_ipv6() {
32
32
  /* The libuv grpc code currently does not have the code to probe for this,
@@ -23,10 +23,10 @@
23
23
 
24
24
  #include <grpc/support/string_util.h>
25
25
 
26
- #include "src/core/ext/filters/client_channel/parse_address.h"
27
26
  #include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
28
27
  #include "src/core/ext/filters/client_channel/server_address.h"
29
28
  #include "src/core/lib/gpr/string.h"
29
+ #include "src/core/lib/iomgr/parse_address.h"
30
30
  #include "src/core/lib/iomgr/socket_windows.h"
31
31
 
32
32
  bool grpc_ares_query_ipv6() { return grpc_ipv6_loopback_available(); }
@@ -28,13 +28,13 @@
28
28
  #include <grpc/support/alloc.h>
29
29
  #include <grpc/support/string_util.h>
30
30
 
31
- #include "src/core/ext/filters/client_channel/parse_address.h"
32
31
  #include "src/core/ext/filters/client_channel/resolver_registry.h"
33
32
  #include "src/core/ext/filters/client_channel/server_address.h"
34
33
  #include "src/core/lib/channel/channel_args.h"
35
34
  #include "src/core/lib/gpr/string.h"
36
35
  #include "src/core/lib/gpr/useful.h"
37
36
  #include "src/core/lib/iomgr/closure.h"
37
+ #include "src/core/lib/iomgr/parse_address.h"
38
38
  #include "src/core/lib/iomgr/resolve_address.h"
39
39
  #include "src/core/lib/iomgr/unix_sockets_posix.h"
40
40
  #include "src/core/lib/iomgr/work_serializer.h"
@@ -26,11 +26,11 @@
26
26
  #include <grpc/support/alloc.h>
27
27
  #include <grpc/support/string_util.h>
28
28
 
29
- #include "src/core/ext/filters/client_channel/parse_address.h"
30
29
  #include "src/core/ext/filters/client_channel/resolver_registry.h"
31
30
  #include "src/core/ext/filters/client_channel/server_address.h"
32
31
  #include "src/core/lib/channel/channel_args.h"
33
32
  #include "src/core/lib/gpr/string.h"
33
+ #include "src/core/lib/iomgr/parse_address.h"
34
34
  #include "src/core/lib/iomgr/resolve_address.h"
35
35
  #include "src/core/lib/iomgr/unix_sockets_posix.h"
36
36
  #include "src/core/lib/iomgr/work_serializer.h"
@@ -18,9 +18,11 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
+ #include "absl/strings/str_join.h"
22
+
21
23
  #include "src/core/ext/filters/client_channel/config_selector.h"
22
24
  #include "src/core/ext/filters/client_channel/resolver_registry.h"
23
- #include "src/core/ext/filters/client_channel/xds/xds_client.h"
25
+ #include "src/core/ext/xds/xds_client.h"
24
26
  #include "src/core/lib/channel/channel_args.h"
25
27
  #include "src/core/lib/transport/timeout_encoding.h"
26
28
 
@@ -68,12 +70,11 @@ class XdsResolver : public Resolver {
68
70
  }
69
71
 
70
72
  private:
71
- class ServiceConfigWatcher : public XdsClient::ServiceConfigWatcherInterface {
73
+ class ListenerWatcher : public XdsClient::ListenerWatcherInterface {
72
74
  public:
73
- explicit ServiceConfigWatcher(RefCountedPtr<XdsResolver> resolver)
75
+ explicit ListenerWatcher(RefCountedPtr<XdsResolver> resolver)
74
76
  : resolver_(std::move(resolver)) {}
75
- void OnServiceConfigChanged(
76
- RefCountedPtr<ServiceConfig> service_config) override;
77
+ void OnListenerChanged(std::vector<XdsApi::Route> routes) override;
77
78
  void OnError(grpc_error* error) override;
78
79
  void OnResourceDoesNotExist() override;
79
80
 
@@ -88,32 +89,74 @@ class XdsResolver : public Resolver {
88
89
  }
89
90
  };
90
91
 
92
+ // Returns the weighted_clusters action name to use from
93
+ // weighted_cluster_index_map_ for a WeightedClusters route action.
94
+ std::string WeightedClustersActionName(
95
+ const std::vector<XdsApi::Route::ClusterWeight>& weighted_clusters);
96
+
97
+ // Updates weighted_cluster_index_map_ that will
98
+ // determine the names of the WeightedCluster actions for the current update.
99
+ void UpdateWeightedClusterIndexMap(const std::vector<XdsApi::Route>& routes);
100
+
101
+ // Create the service config generated by the list of routes.
102
+ grpc_error* CreateServiceConfig(const std::vector<XdsApi::Route>& routes,
103
+ RefCountedPtr<ServiceConfig>* service_config);
104
+
91
105
  std::string server_name_;
92
106
  const grpc_channel_args* args_;
93
107
  grpc_pollset_set* interested_parties_;
94
108
  OrphanablePtr<XdsClient> xds_client_;
95
109
  RefCountedPtr<XdsConfigSelector> config_selector_;
110
+
111
+ // 2-level map to store WeightedCluster action names.
112
+ // Top level map is keyed by cluster names without weight like a_b_c; bottom
113
+ // level map is keyed by cluster names + weights like a10_b50_c40.
114
+ struct ClusterNamesInfo {
115
+ uint64_t next_index = 0;
116
+ std::map<std::string /*cluster names + weights*/,
117
+ uint64_t /*policy index number*/>
118
+ cluster_weights_map;
119
+ };
120
+ using WeightedClusterIndexMap =
121
+ std::map<std::string /*cluster names*/, ClusterNamesInfo>;
122
+
123
+ // Cache of action names for WeightedCluster targets in the current
124
+ // service config.
125
+ WeightedClusterIndexMap weighted_cluster_index_map_;
96
126
  };
97
127
 
98
- void XdsResolver::ServiceConfigWatcher::OnServiceConfigChanged(
99
- RefCountedPtr<ServiceConfig> service_config) {
128
+ //
129
+ // XdsResolver::ListenerWatcher
130
+ //
131
+
132
+ void XdsResolver::ListenerWatcher::OnListenerChanged(
133
+ std::vector<XdsApi::Route> routes) {
100
134
  if (resolver_->xds_client_ == nullptr) return;
101
135
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
102
- gpr_log(GPR_INFO, "[xds_resolver %p] received updated service config: %s",
103
- resolver_.get(), service_config->json_string().c_str());
136
+ gpr_log(GPR_INFO, "[xds_resolver %p] received updated listener data",
137
+ resolver_.get());
138
+ }
139
+ Result result;
140
+ grpc_error* error =
141
+ resolver_->CreateServiceConfig(routes, &result.service_config);
142
+ if (error != GRPC_ERROR_NONE) {
143
+ OnError(error);
144
+ return;
145
+ }
146
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
147
+ gpr_log(GPR_INFO, "[xds_resolver %p] generated service config: %s",
148
+ resolver_.get(), result.service_config->json_string().c_str());
104
149
  }
105
150
  grpc_arg new_args[] = {
106
151
  resolver_->xds_client_->MakeChannelArg(),
107
152
  resolver_->config_selector_->MakeChannelArg(),
108
153
  };
109
- Result result;
110
154
  result.args = grpc_channel_args_copy_and_add(resolver_->args_, new_args,
111
155
  GPR_ARRAY_SIZE(new_args));
112
- result.service_config = std::move(service_config);
113
156
  resolver_->result_handler()->ReturnResult(std::move(result));
114
157
  }
115
158
 
116
- void XdsResolver::ServiceConfigWatcher::OnError(grpc_error* error) {
159
+ void XdsResolver::ListenerWatcher::OnError(grpc_error* error) {
117
160
  if (resolver_->xds_client_ == nullptr) return;
118
161
  gpr_log(GPR_ERROR, "[xds_resolver %p] received error: %s", resolver_.get(),
119
162
  grpc_error_string(error));
@@ -125,7 +168,7 @@ void XdsResolver::ServiceConfigWatcher::OnError(grpc_error* error) {
125
168
  resolver_->result_handler()->ReturnResult(std::move(result));
126
169
  }
127
170
 
128
- void XdsResolver::ServiceConfigWatcher::OnResourceDoesNotExist() {
171
+ void XdsResolver::ListenerWatcher::OnResourceDoesNotExist() {
129
172
  if (resolver_->xds_client_ == nullptr) return;
130
173
  gpr_log(GPR_ERROR,
131
174
  "[xds_resolver %p] LDS/RDS resource does not exist -- returning "
@@ -139,11 +182,15 @@ void XdsResolver::ServiceConfigWatcher::OnResourceDoesNotExist() {
139
182
  resolver_->result_handler()->ReturnResult(std::move(result));
140
183
  }
141
184
 
185
+ //
186
+ // XdsResolver
187
+ //
188
+
142
189
  void XdsResolver::StartLocked() {
143
190
  grpc_error* error = GRPC_ERROR_NONE;
144
191
  xds_client_ = MakeOrphanable<XdsClient>(
145
192
  work_serializer(), interested_parties_, server_name_,
146
- absl::make_unique<ServiceConfigWatcher>(Ref()), *args_, &error);
193
+ absl::make_unique<ListenerWatcher>(Ref()), *args_, &error);
147
194
  if (error != GRPC_ERROR_NONE) {
148
195
  gpr_log(GPR_ERROR,
149
196
  "Failed to create xds client -- channel will remain in "
@@ -153,6 +200,308 @@ void XdsResolver::StartLocked() {
153
200
  }
154
201
  }
155
202
 
203
+ std::string CreateServiceConfigActionCluster(const std::string& cluster_name) {
204
+ return absl::StrFormat(
205
+ " \"cds:%s\":{\n"
206
+ " \"childPolicy\":[ {\n"
207
+ " \"cds_experimental\":{\n"
208
+ " \"cluster\": \"%s\"\n"
209
+ " }\n"
210
+ " } ]\n"
211
+ " }",
212
+ cluster_name, cluster_name);
213
+ }
214
+
215
+ std::string CreateServiceConfigRoute(const std::string& action_name,
216
+ const XdsApi::Route& route) {
217
+ std::vector<std::string> headers;
218
+ for (const auto& header : route.matchers.header_matchers) {
219
+ std::string header_matcher;
220
+ switch (header.type) {
221
+ case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::EXACT:
222
+ header_matcher = absl::StrFormat(" \"exact_match\": \"%s\"",
223
+ header.string_matcher);
224
+ break;
225
+ case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::REGEX:
226
+ header_matcher = absl::StrFormat(" \"regex_match\": \"%s\"",
227
+ header.regex_match->pattern());
228
+ break;
229
+ case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::RANGE:
230
+ header_matcher = absl::StrFormat(
231
+ " \"range_match\":{\n"
232
+ " \"start\":%d,\n"
233
+ " \"end\":%d\n"
234
+ " }",
235
+ header.range_start, header.range_end);
236
+ break;
237
+ case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::PRESENT:
238
+ header_matcher =
239
+ absl::StrFormat(" \"present_match\": %s",
240
+ header.present_match ? "true" : "false");
241
+ break;
242
+ case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::PREFIX:
243
+ header_matcher = absl::StrFormat(
244
+ " \"prefix_match\": \"%s\"", header.string_matcher);
245
+ break;
246
+ case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::SUFFIX:
247
+ header_matcher = absl::StrFormat(
248
+ " \"suffix_match\": \"%s\"", header.string_matcher);
249
+ break;
250
+ default:
251
+ break;
252
+ }
253
+ std::vector<std::string> header_parts;
254
+ header_parts.push_back(
255
+ absl::StrFormat(" { \n"
256
+ " \"name\": \"%s\",\n",
257
+ header.name));
258
+ header_parts.push_back(header_matcher);
259
+ if (header.invert_match) {
260
+ header_parts.push_back(
261
+ absl::StrFormat(",\n"
262
+ " \"invert_match\": true"));
263
+ }
264
+ header_parts.push_back(
265
+ absl::StrFormat("\n"
266
+ " }"));
267
+ headers.push_back(absl::StrJoin(header_parts, ""));
268
+ }
269
+ std::vector<std::string> headers_service_config;
270
+ if (!headers.empty()) {
271
+ headers_service_config.push_back("\"headers\":[\n");
272
+ headers_service_config.push_back(absl::StrJoin(headers, ","));
273
+ headers_service_config.push_back(" ],\n");
274
+ }
275
+ std::string path_match_str;
276
+ switch (route.matchers.path_matcher.type) {
277
+ case XdsApi::Route::Matchers::PathMatcher::PathMatcherType::PREFIX:
278
+ path_match_str = absl::StrFormat(
279
+ "\"prefix\": \"%s\",\n", route.matchers.path_matcher.string_matcher);
280
+ break;
281
+ case XdsApi::Route::Matchers::PathMatcher::PathMatcherType::PATH:
282
+ path_match_str = absl::StrFormat(
283
+ "\"path\": \"%s\",\n", route.matchers.path_matcher.string_matcher);
284
+ break;
285
+ case XdsApi::Route::Matchers::PathMatcher::PathMatcherType::REGEX:
286
+ path_match_str =
287
+ absl::StrFormat("\"regex\": \"%s\",\n",
288
+ route.matchers.path_matcher.regex_matcher->pattern());
289
+ break;
290
+ }
291
+ return absl::StrFormat(
292
+ " { \n"
293
+ " %s"
294
+ " %s"
295
+ " %s"
296
+ " \"action\": \"%s\"\n"
297
+ " }",
298
+ path_match_str, absl::StrJoin(headers_service_config, ""),
299
+ route.matchers.fraction_per_million.has_value()
300
+ ? absl::StrFormat("\"match_fraction\":%d,\n",
301
+ route.matchers.fraction_per_million.value())
302
+ : "",
303
+ action_name);
304
+ }
305
+
306
+ // Create the service config for one weighted cluster.
307
+ std::string CreateServiceConfigActionWeightedCluster(
308
+ const std::string& name,
309
+ const std::vector<XdsApi::Route::ClusterWeight>& clusters) {
310
+ std::vector<std::string> config_parts;
311
+ config_parts.push_back(
312
+ absl::StrFormat(" \"weighted:%s\":{\n"
313
+ " \"childPolicy\":[ {\n"
314
+ " \"weighted_target_experimental\":{\n"
315
+ " \"targets\":{\n",
316
+ name));
317
+ std::vector<std::string> weighted_targets;
318
+ weighted_targets.reserve(clusters.size());
319
+ for (const auto& cluster_weight : clusters) {
320
+ weighted_targets.push_back(absl::StrFormat(
321
+ " \"%s\":{\n"
322
+ " \"weight\":%d,\n"
323
+ " \"childPolicy\":[ {\n"
324
+ " \"cds_experimental\":{\n"
325
+ " \"cluster\": \"%s\"\n"
326
+ " }\n"
327
+ " } ]\n"
328
+ " }",
329
+ cluster_weight.name, cluster_weight.weight, cluster_weight.name));
330
+ }
331
+ config_parts.push_back(absl::StrJoin(weighted_targets, ",\n"));
332
+ config_parts.push_back(
333
+ " }\n"
334
+ " }\n"
335
+ " } ]\n"
336
+ " }");
337
+ return absl::StrJoin(config_parts, "");
338
+ }
339
+
340
+ struct WeightedClustersKeys {
341
+ std::string cluster_names_key;
342
+ std::string cluster_weights_key;
343
+ };
344
+
345
+ // Returns the cluster names and weights key or the cluster names only key.
346
+ WeightedClustersKeys GetWeightedClustersKey(
347
+ const std::vector<XdsApi::Route::ClusterWeight>& weighted_clusters) {
348
+ std::set<std::string> cluster_names;
349
+ std::set<std::string> cluster_weights;
350
+ for (const auto& cluster_weight : weighted_clusters) {
351
+ cluster_names.emplace(absl::StrFormat("%s", cluster_weight.name));
352
+ cluster_weights.emplace(
353
+ absl::StrFormat("%s_%d", cluster_weight.name, cluster_weight.weight));
354
+ }
355
+ return {absl::StrJoin(cluster_names, "_"),
356
+ absl::StrJoin(cluster_weights, "_")};
357
+ }
358
+
359
+ std::string XdsResolver::WeightedClustersActionName(
360
+ const std::vector<XdsApi::Route::ClusterWeight>& weighted_clusters) {
361
+ WeightedClustersKeys keys = GetWeightedClustersKey(weighted_clusters);
362
+ auto cluster_names_map_it =
363
+ weighted_cluster_index_map_.find(keys.cluster_names_key);
364
+ GPR_ASSERT(cluster_names_map_it != weighted_cluster_index_map_.end());
365
+ const auto& cluster_weights_map =
366
+ cluster_names_map_it->second.cluster_weights_map;
367
+ auto cluster_weights_map_it =
368
+ cluster_weights_map.find(keys.cluster_weights_key);
369
+ GPR_ASSERT(cluster_weights_map_it != cluster_weights_map.end());
370
+ return absl::StrFormat("%s_%d", keys.cluster_names_key,
371
+ cluster_weights_map_it->second);
372
+ }
373
+
374
+ void XdsResolver::UpdateWeightedClusterIndexMap(
375
+ const std::vector<XdsApi::Route>& routes) {
376
+ // Construct a list of unique WeightedCluster
377
+ // actions which we need to process: to find action names
378
+ std::map<std::string /* cluster_weights_key */,
379
+ std::string /* cluster_names_key */>
380
+ actions_to_process;
381
+ for (const auto& route : routes) {
382
+ if (!route.weighted_clusters.empty()) {
383
+ WeightedClustersKeys keys =
384
+ GetWeightedClustersKey(route.weighted_clusters);
385
+ auto action_it = actions_to_process.find(keys.cluster_weights_key);
386
+ if (action_it == actions_to_process.end()) {
387
+ actions_to_process[std::move(keys.cluster_weights_key)] =
388
+ std::move(keys.cluster_names_key);
389
+ }
390
+ }
391
+ }
392
+ // First pass of all unique WeightedCluster actions: if the exact same
393
+ // weighted target policy (same clusters and weights) appears in the old map,
394
+ // then that old action name is taken again and should be moved to the new
395
+ // map; any other action names from the old set of actions are candidates for
396
+ // reuse.
397
+ XdsResolver::WeightedClusterIndexMap new_weighted_cluster_index_map;
398
+ for (auto action_it = actions_to_process.begin();
399
+ action_it != actions_to_process.end();) {
400
+ const std::string& cluster_names_key = action_it->second;
401
+ const std::string& cluster_weights_key = action_it->first;
402
+ auto old_cluster_names_map_it =
403
+ weighted_cluster_index_map_.find(cluster_names_key);
404
+ if (old_cluster_names_map_it != weighted_cluster_index_map_.end()) {
405
+ // Add cluster_names_key to the new map and copy next_index.
406
+ auto& new_cluster_names_info =
407
+ new_weighted_cluster_index_map[cluster_names_key];
408
+ new_cluster_names_info.next_index =
409
+ old_cluster_names_map_it->second.next_index;
410
+ // Lookup cluster_weights_key in old map.
411
+ auto& old_cluster_weights_map =
412
+ old_cluster_names_map_it->second.cluster_weights_map;
413
+ auto old_cluster_weights_map_it =
414
+ old_cluster_weights_map.find(cluster_weights_key);
415
+ if (old_cluster_weights_map_it != old_cluster_weights_map.end()) {
416
+ // same policy found, move from old map to new map.
417
+ new_cluster_names_info.cluster_weights_map[cluster_weights_key] =
418
+ old_cluster_weights_map_it->second;
419
+ old_cluster_weights_map.erase(old_cluster_weights_map_it);
420
+ // This action has been added to new map, so no need to process it
421
+ // again.
422
+ action_it = actions_to_process.erase(action_it);
423
+ continue;
424
+ }
425
+ }
426
+ ++action_it;
427
+ }
428
+ // Second pass of all remaining unique WeightedCluster actions: if clusters
429
+ // for a new action are the same as an old unused action, reuse the name. If
430
+ // clusters differ, use a brand new name.
431
+ for (const auto& action : actions_to_process) {
432
+ const std::string& cluster_names_key = action.second;
433
+ const std::string& cluster_weights_key = action.first;
434
+ auto& new_cluster_names_info =
435
+ new_weighted_cluster_index_map[cluster_names_key];
436
+ auto& old_cluster_weights_map =
437
+ weighted_cluster_index_map_[cluster_names_key].cluster_weights_map;
438
+ auto old_cluster_weights_it = old_cluster_weights_map.begin();
439
+ if (old_cluster_weights_it != old_cluster_weights_map.end()) {
440
+ // There is something to reuse: this action uses the same set
441
+ // of clusters as a previous action and that action name is not
442
+ // already taken.
443
+ new_cluster_names_info.cluster_weights_map[cluster_weights_key] =
444
+ old_cluster_weights_it->second;
445
+ // Remove the name from being able to reuse again.
446
+ old_cluster_weights_map.erase(old_cluster_weights_it);
447
+ } else {
448
+ // There is nothing to reuse, take the next index to use and
449
+ // increment.
450
+ new_cluster_names_info.cluster_weights_map[cluster_weights_key] =
451
+ new_cluster_names_info.next_index++;
452
+ }
453
+ }
454
+ weighted_cluster_index_map_ = std::move(new_weighted_cluster_index_map);
455
+ }
456
+
457
+ grpc_error* XdsResolver::CreateServiceConfig(
458
+ const std::vector<XdsApi::Route>& routes,
459
+ RefCountedPtr<ServiceConfig>* service_config) {
460
+ UpdateWeightedClusterIndexMap(routes);
461
+ std::vector<std::string> actions_vector;
462
+ std::vector<std::string> route_table;
463
+ std::set<std::string> actions_set;
464
+ for (const auto& route : routes) {
465
+ const std::string action_name =
466
+ route.weighted_clusters.empty()
467
+ ? route.cluster_name
468
+ : WeightedClustersActionName(route.weighted_clusters);
469
+ if (actions_set.find(action_name) == actions_set.end()) {
470
+ actions_set.emplace(action_name);
471
+ actions_vector.push_back(
472
+ route.weighted_clusters.empty()
473
+ ? CreateServiceConfigActionCluster(action_name)
474
+ : CreateServiceConfigActionWeightedCluster(
475
+ action_name, route.weighted_clusters));
476
+ }
477
+ route_table.push_back(CreateServiceConfigRoute(
478
+ absl::StrFormat("%s:%s",
479
+ route.weighted_clusters.empty() ? "cds" : "weighted",
480
+ action_name),
481
+ route));
482
+ }
483
+ std::vector<std::string> config_parts;
484
+ config_parts.push_back(
485
+ "{\n"
486
+ " \"loadBalancingConfig\":[\n"
487
+ " { \"xds_routing_experimental\":{\n"
488
+ " \"actions\":{\n");
489
+ config_parts.push_back(absl::StrJoin(actions_vector, ",\n"));
490
+ config_parts.push_back(
491
+ " },\n"
492
+ " \"routes\":[\n");
493
+ config_parts.push_back(absl::StrJoin(route_table, ",\n"));
494
+ config_parts.push_back(
495
+ " ]\n"
496
+ " } }\n"
497
+ " ]\n"
498
+ "}");
499
+ std::string json = absl::StrJoin(config_parts, "");
500
+ grpc_error* error = GRPC_ERROR_NONE;
501
+ *service_config = ServiceConfig::Create(json.c_str(), &error);
502
+ return error;
503
+ }
504
+
156
505
  //
157
506
  // Factory
158
507
  //