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
@@ -16,8 +16,8 @@
16
16
  *
17
17
  */
18
18
 
19
- #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_API_H
20
- #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_API_H
19
+ #ifndef GRPC_CORE_EXT_XDS_XDS_API_H
20
+ #define GRPC_CORE_EXT_XDS_XDS_API_H
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
@@ -27,13 +27,13 @@
27
27
 
28
28
  #include "absl/container/inlined_vector.h"
29
29
  #include "absl/types/optional.h"
30
+ #include "re2/re2.h"
30
31
 
31
32
  #include <grpc/slice_buffer.h>
32
33
 
33
- #include "re2/re2.h"
34
34
  #include "src/core/ext/filters/client_channel/server_address.h"
35
- #include "src/core/ext/filters/client_channel/xds/xds_bootstrap.h"
36
- #include "src/core/ext/filters/client_channel/xds/xds_client_stats.h"
35
+ #include "src/core/ext/xds/xds_bootstrap.h"
36
+ #include "src/core/ext/xds/xds_client_stats.h"
37
37
 
38
38
  namespace grpc_core {
39
39
 
@@ -46,101 +46,109 @@ class XdsApi {
46
46
  static const char* kCdsTypeUrl;
47
47
  static const char* kEdsTypeUrl;
48
48
 
49
- struct RdsUpdate {
50
- // TODO(donnadionne): When we can use absl::variant<>, consider using that
51
- // for: PathMatcher, HeaderMatcher, cluster_name and weighted_clusters
52
- struct RdsRoute {
53
- // Matchers for this route.
54
- struct Matchers {
55
- struct PathMatcher {
56
- enum class PathMatcherType {
57
- PATH, // path stored in string_matcher field
58
- PREFIX, // prefix stored in string_matcher field
59
- REGEX, // regex stored in regex_matcher field
60
- };
61
- PathMatcherType type;
62
- std::string string_matcher;
63
- std::unique_ptr<RE2> regex_matcher;
64
- bool operator==(const PathMatcher& other) const {
65
- if (type != other.type) return false;
66
- if (type == PathMatcherType::REGEX) {
67
- // Should never be null.
68
- if (regex_matcher == nullptr || other.regex_matcher == nullptr) {
69
- return false;
70
- }
71
- return regex_matcher->pattern() == other.regex_matcher->pattern();
72
- }
73
- return string_matcher == other.string_matcher;
74
- }
75
- std::string ToString() const;
49
+ // TODO(donnadionne): When we can use absl::variant<>, consider using that
50
+ // for: PathMatcher, HeaderMatcher, cluster_name and weighted_clusters
51
+ struct Route {
52
+ // Matchers for this route.
53
+ struct Matchers {
54
+ struct PathMatcher {
55
+ enum class PathMatcherType {
56
+ PATH, // path stored in string_matcher field
57
+ PREFIX, // prefix stored in string_matcher field
58
+ REGEX, // regex stored in regex_matcher field
76
59
  };
77
- struct HeaderMatcher {
78
- enum class HeaderMatcherType {
79
- EXACT, // value stored in string_matcher field
80
- REGEX, // uses regex_match field
81
- RANGE, // uses range_start and range_end fields
82
- PRESENT, // uses present_match field
83
- PREFIX, // prefix stored in string_matcher field
84
- SUFFIX, // suffix stored in string_matcher field
85
- };
86
- std::string name;
87
- HeaderMatcherType type;
88
- int64_t range_start;
89
- int64_t range_end;
90
- std::string string_matcher;
91
- std::unique_ptr<RE2> regex_match;
92
- bool present_match;
93
- // invert_match field may or may not exisit, so initialize it to
94
- // false.
95
- bool invert_match = false;
96
- bool operator==(const HeaderMatcher& other) const {
97
- return (name == other.name && type == other.type &&
98
- range_start == other.range_start &&
99
- range_end == other.range_end &&
100
- string_matcher == other.string_matcher &&
101
- present_match == other.present_match &&
102
- invert_match == other.invert_match);
103
- }
104
- std::string ToString() const;
105
- };
106
- PathMatcher path_matcher;
107
- std::vector<HeaderMatcher> header_matchers;
108
- absl::optional<uint32_t> fraction_per_million;
109
- bool operator==(const Matchers& other) const {
110
- return (path_matcher == other.path_matcher &&
111
- header_matchers == other.header_matchers &&
112
- fraction_per_million == other.fraction_per_million);
113
- }
60
+ PathMatcherType type;
61
+ std::string string_matcher;
62
+ std::unique_ptr<RE2> regex_matcher;
63
+
64
+ PathMatcher() = default;
65
+ PathMatcher(const PathMatcher& other);
66
+ PathMatcher& operator=(const PathMatcher& other);
67
+ bool operator==(const PathMatcher& other) const;
114
68
  std::string ToString() const;
115
69
  };
116
- Matchers matchers;
117
- // Action for this route.
118
- std::string cluster_name;
119
- struct ClusterWeight {
120
- std::string name;
121
- uint32_t weight;
122
70
 
123
- bool operator==(const ClusterWeight& other) const {
124
- return (name == other.name && weight == other.weight);
125
- }
71
+ struct HeaderMatcher {
72
+ enum class HeaderMatcherType {
73
+ EXACT, // value stored in string_matcher field
74
+ REGEX, // uses regex_match field
75
+ RANGE, // uses range_start and range_end fields
76
+ PRESENT, // uses present_match field
77
+ PREFIX, // prefix stored in string_matcher field
78
+ SUFFIX, // suffix stored in string_matcher field
79
+ };
80
+ std::string name;
81
+ HeaderMatcherType type;
82
+ int64_t range_start;
83
+ int64_t range_end;
84
+ std::string string_matcher;
85
+ std::unique_ptr<RE2> regex_match;
86
+ bool present_match;
87
+ // invert_match field may or may not exisit, so initialize it to
88
+ // false.
89
+ bool invert_match = false;
90
+
91
+ HeaderMatcher() = default;
92
+ HeaderMatcher(const HeaderMatcher& other);
93
+ HeaderMatcher& operator=(const HeaderMatcher& other);
94
+ bool operator==(const HeaderMatcher& other) const;
126
95
  std::string ToString() const;
127
96
  };
128
- std::vector<ClusterWeight> weighted_clusters;
129
97
 
130
- bool operator==(const RdsRoute& other) const {
131
- return (matchers == other.matchers &&
132
- cluster_name == other.cluster_name &&
133
- weighted_clusters == other.weighted_clusters);
98
+ PathMatcher path_matcher;
99
+ std::vector<HeaderMatcher> header_matchers;
100
+ absl::optional<uint32_t> fraction_per_million;
101
+
102
+ bool operator==(const Matchers& other) const {
103
+ return (path_matcher == other.path_matcher &&
104
+ header_matchers == other.header_matchers &&
105
+ fraction_per_million == other.fraction_per_million);
134
106
  }
135
107
  std::string ToString() const;
136
108
  };
137
109
 
138
- std::vector<RdsRoute> routes;
110
+ Matchers matchers;
111
+
112
+ // Action for this route.
113
+ // TODO(roth): When we can use absl::variant<>, consider using that
114
+ // here, to enforce the fact that only one of the two fields can be set.
115
+ std::string cluster_name;
116
+ struct ClusterWeight {
117
+ std::string name;
118
+ uint32_t weight;
119
+ bool operator==(const ClusterWeight& other) const {
120
+ return (name == other.name && weight == other.weight);
121
+ }
122
+ std::string ToString() const;
123
+ };
124
+ std::vector<ClusterWeight> weighted_clusters;
125
+
126
+ bool operator==(const Route& other) const {
127
+ return (matchers == other.matchers &&
128
+ cluster_name == other.cluster_name &&
129
+ weighted_clusters == other.weighted_clusters);
130
+ }
131
+ std::string ToString() const;
132
+ };
133
+
134
+ struct RdsUpdate {
135
+ struct VirtualHost {
136
+ std::vector<std::string> domains;
137
+ std::vector<Route> routes;
138
+
139
+ bool operator==(const VirtualHost& other) const {
140
+ return domains == other.domains && routes == other.routes;
141
+ }
142
+ };
143
+
144
+ std::vector<VirtualHost> virtual_hosts;
139
145
 
140
146
  bool operator==(const RdsUpdate& other) const {
141
- return routes == other.routes;
147
+ return virtual_hosts == other.virtual_hosts;
142
148
  }
143
149
  std::string ToString() const;
150
+ const VirtualHost* FindVirtualHostForDomain(
151
+ const std::string& domain) const;
144
152
  };
145
153
 
146
154
  // TODO(roth): When we can use absl::variant<>, consider using that
@@ -148,8 +156,8 @@ class XdsApi {
148
156
  struct LdsUpdate {
149
157
  // The name to use in the RDS request.
150
158
  std::string route_config_name;
151
- // The name to use in the CDS request. Present if the LDS response has it
152
- // inlined.
159
+ // The RouteConfiguration to use for this listener.
160
+ // Present only if it is inlined in the LDS response.
153
161
  absl::optional<RdsUpdate> rds_update;
154
162
 
155
163
  bool operator==(const LdsUpdate& other) const {
@@ -294,7 +302,7 @@ class XdsApi {
294
302
  std::pair<std::string /*cluster_name*/, std::string /*eds_service_name*/>,
295
303
  ClusterLoadReport>;
296
304
 
297
- XdsApi(XdsClient* client, TraceFlag* tracer, const XdsBootstrap::Node* node);
305
+ XdsApi(XdsClient* client, TraceFlag* tracer, const XdsBootstrap* bootstrap);
298
306
 
299
307
  // Creates an ADS request.
300
308
  // Takes ownership of \a error.
@@ -304,19 +312,25 @@ class XdsApi {
304
312
  const std::string& nonce, grpc_error* error,
305
313
  bool populate_node);
306
314
 
307
- // Parses the ADS response and outputs the validated update for either CDS or
308
- // EDS. If the response can't be parsed at the top level, \a type_url will
309
- // point to an empty string; otherwise, it will point to the received data.
310
- grpc_error* ParseAdsResponse(
315
+ // Parses an ADS response.
316
+ // If the response can't be parsed at the top level, the resulting
317
+ // type_url will be empty.
318
+ struct AdsParseResult {
319
+ grpc_error* parse_error = GRPC_ERROR_NONE;
320
+ std::string version;
321
+ std::string nonce;
322
+ std::string type_url;
323
+ absl::optional<LdsUpdate> lds_update;
324
+ absl::optional<RdsUpdate> rds_update;
325
+ CdsUpdateMap cds_update_map;
326
+ EdsUpdateMap eds_update_map;
327
+ };
328
+ AdsParseResult ParseAdsResponse(
311
329
  const grpc_slice& encoded_response,
312
330
  const std::string& expected_server_name,
313
331
  const std::set<absl::string_view>& expected_route_configuration_names,
314
332
  const std::set<absl::string_view>& expected_cluster_names,
315
- const std::set<absl::string_view>& expected_eds_service_names,
316
- absl::optional<LdsUpdate>* lds_update,
317
- absl::optional<RdsUpdate>* rds_update, CdsUpdateMap* cds_update_map,
318
- EdsUpdateMap* eds_update_map, std::string* version, std::string* nonce,
319
- std::string* type_url);
333
+ const std::set<absl::string_view>& expected_eds_service_names);
320
334
 
321
335
  // Creates an LRS request querying \a server_name.
322
336
  grpc_slice CreateLrsInitialRequest(const std::string& server_name);
@@ -335,11 +349,12 @@ class XdsApi {
335
349
  private:
336
350
  XdsClient* client_;
337
351
  TraceFlag* tracer_;
338
- const XdsBootstrap::Node* node_;
352
+ const bool use_v3_;
353
+ const XdsBootstrap* bootstrap_; // Do not own.
339
354
  const std::string build_version_;
340
355
  const std::string user_agent_name_;
341
356
  };
342
357
 
343
358
  } // namespace grpc_core
344
359
 
345
- #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_API_H */
360
+ #endif /* GRPC_CORE_EXT_XDS_XDS_API_H */
@@ -16,7 +16,7 @@
16
16
 
17
17
  #include <grpc/support/port_platform.h>
18
18
 
19
- #include "src/core/ext/filters/client_channel/xds/xds_bootstrap.h"
19
+ #include "src/core/ext/xds/xds_bootstrap.h"
20
20
 
21
21
  #include <vector>
22
22
 
@@ -35,6 +35,10 @@
35
35
 
36
36
  namespace grpc_core {
37
37
 
38
+ bool XdsBootstrap::XdsServer::ShouldUseV3() const {
39
+ return server_features.find("xds_v3") != server_features.end();
40
+ }
41
+
38
42
  namespace {
39
43
 
40
44
  std::string BootstrapString(const XdsBootstrap& bootstrap) {
@@ -65,7 +69,13 @@ std::string BootstrapString(const XdsBootstrap& bootstrap) {
65
69
  parts.push_back(absl::StrFormat(" {type=\"%s\", config=%s},\n",
66
70
  creds.type, creds.config.Dump()));
67
71
  }
68
- parts.push_back(" ]\n }\n]");
72
+ parts.push_back(" ],\n");
73
+ if (!bootstrap.server().server_features.empty()) {
74
+ parts.push_back(absl::StrCat(
75
+ " server_features=[",
76
+ absl::StrJoin(bootstrap.server().server_features, ", "), "],\n"));
77
+ }
78
+ parts.push_back(" }\n]");
69
79
  return absl::StrJoin(parts, "");
70
80
  }
71
81
 
@@ -186,6 +196,16 @@ grpc_error* XdsBootstrap::ParseXdsServer(Json* json, size_t idx) {
186
196
  if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
187
197
  }
188
198
  }
199
+ it = json->mutable_object()->find("server_features");
200
+ if (it != json->mutable_object()->end()) {
201
+ if (it->second.type() != Json::Type::ARRAY) {
202
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
203
+ "\"server_features\" field is not an array"));
204
+ } else {
205
+ grpc_error* parse_error = ParseServerFeaturesArray(&it->second, &server);
206
+ if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
207
+ }
208
+ }
189
209
  // Can't use GRPC_ERROR_CREATE_FROM_VECTOR() here, because the error
190
210
  // string is not static in this case.
191
211
  if (error_list.empty()) return GRPC_ERROR_NONE;
@@ -251,6 +271,28 @@ grpc_error* XdsBootstrap::ParseChannelCreds(Json* json, size_t idx,
251
271
  return error;
252
272
  }
253
273
 
274
+ grpc_error* XdsBootstrap::ParseServerFeaturesArray(Json* json,
275
+ XdsServer* server) {
276
+ std::vector<grpc_error*> error_list;
277
+ for (size_t i = 0; i < json->mutable_array()->size(); ++i) {
278
+ Json& child = json->mutable_array()->at(i);
279
+ if (child.type() == Json::Type::STRING &&
280
+ child.string_value() == "xds_v3") {
281
+ // TODO(roth): Remove env var check once we do interop testing and
282
+ // are sure that the v3 code actually works.
283
+ grpc_core::UniquePtr<char> enable_str(
284
+ gpr_getenv("GRPC_XDS_EXPERIMENTAL_V3_SUPPORT"));
285
+ bool enabled = false;
286
+ if (gpr_parse_bool_value(enable_str.get(), &enabled) && enabled) {
287
+ server->server_features.insert(
288
+ std::move(*child.mutable_string_value()));
289
+ }
290
+ }
291
+ }
292
+ return GRPC_ERROR_CREATE_FROM_VECTOR(
293
+ "errors parsing \"server_features\" array", &error_list);
294
+ }
295
+
254
296
  grpc_error* XdsBootstrap::ParseNode(Json* json) {
255
297
  std::vector<grpc_error*> error_list;
256
298
  node_ = absl::make_unique<Node>();
@@ -14,12 +14,13 @@
14
14
  // limitations under the License.
15
15
  //
16
16
 
17
- #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_BOOTSTRAP_H
18
- #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_BOOTSTRAP_H
17
+ #ifndef GRPC_CORE_EXT_XDS_XDS_BOOTSTRAP_H
18
+ #define GRPC_CORE_EXT_XDS_XDS_BOOTSTRAP_H
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
22
  #include <memory>
23
+ #include <set>
23
24
  #include <string>
24
25
  #include <vector>
25
26
 
@@ -55,6 +56,9 @@ class XdsBootstrap {
55
56
  struct XdsServer {
56
57
  std::string server_uri;
57
58
  absl::InlinedVector<ChannelCreds, 1> channel_creds;
59
+ std::set<std::string> server_features;
60
+
61
+ bool ShouldUseV3() const;
58
62
  };
59
63
 
60
64
  // If *error is not GRPC_ERROR_NONE after returning, then there was an
@@ -76,6 +80,7 @@ class XdsBootstrap {
76
80
  grpc_error* ParseXdsServer(Json* json, size_t idx);
77
81
  grpc_error* ParseChannelCredsArray(Json* json, XdsServer* server);
78
82
  grpc_error* ParseChannelCreds(Json* json, size_t idx, XdsServer* server);
83
+ grpc_error* ParseServerFeaturesArray(Json* json, XdsServer* server);
79
84
  grpc_error* ParseNode(Json* json);
80
85
  grpc_error* ParseLocality(Json* json);
81
86
 
@@ -85,4 +90,4 @@ class XdsBootstrap {
85
90
 
86
91
  } // namespace grpc_core
87
92
 
88
- #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_BOOTSTRAP_H */
93
+ #endif /* GRPC_CORE_EXT_XDS_XDS_BOOTSTRAP_H */
@@ -16,14 +16,14 @@
16
16
  *
17
17
  */
18
18
 
19
- #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_CHANNEL_H
20
- #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_CHANNEL_H
19
+ #ifndef GRPC_CORE_EXT_XDS_XDS_CHANNEL_H
20
+ #define GRPC_CORE_EXT_XDS_XDS_CHANNEL_H
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
24
  #include <grpc/impl/codegen/grpc_types.h>
25
25
 
26
- #include "src/core/ext/filters/client_channel/xds/xds_bootstrap.h"
26
+ #include "src/core/ext/xds/xds_bootstrap.h"
27
27
  #include "src/core/lib/iomgr/error.h"
28
28
 
29
29
  namespace grpc_core {
@@ -42,5 +42,5 @@ grpc_channel* CreateXdsChannel(const XdsBootstrap& bootstrap,
42
42
 
43
43
  } // namespace grpc_core
44
44
 
45
- #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_CHANNEL_H \
45
+ #endif /* GRPC_CORE_EXT_XDS_XDS_CHANNEL_H \
46
46
  */
@@ -14,8 +14,8 @@
14
14
  // limitations under the License.
15
15
  //
16
16
 
17
- #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_CHANNEL_ARGS_H
18
- #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_CHANNEL_ARGS_H
17
+ #ifndef GRPC_CORE_EXT_XDS_XDS_CHANNEL_ARGS_H
18
+ #define GRPC_CORE_EXT_XDS_XDS_CHANNEL_ARGS_H
19
19
 
20
20
  // Boolean channel arg indicating whether the target is an xds server.
21
21
  #define GRPC_ARG_ADDRESS_IS_XDS_SERVER "grpc.address_is_xds_server"
@@ -23,4 +23,4 @@
23
23
  // Pointer channel arg containing a ref to the XdsClient object.
24
24
  #define GRPC_ARG_XDS_CLIENT "grpc.xds_client"
25
25
 
26
- #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_CHANNEL_ARGS_H */
26
+ #endif /* GRPC_CORE_EXT_XDS_XDS_CHANNEL_ARGS_H */
@@ -18,7 +18,7 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
- #include "src/core/ext/filters/client_channel/xds/xds_channel.h"
21
+ #include "src/core/ext/xds/xds_channel.h"
22
22
 
23
23
  #include <string.h>
24
24
 
@@ -28,14 +28,11 @@
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/client_channel.h"
32
- #include "src/core/ext/filters/client_channel/server_address.h"
33
31
  #include "src/core/lib/channel/channel_args.h"
34
32
  #include "src/core/lib/gpr/string.h"
35
33
  #include "src/core/lib/iomgr/sockaddr_utils.h"
36
34
  #include "src/core/lib/security/credentials/credentials.h"
37
35
  #include "src/core/lib/security/credentials/fake/fake_credentials.h"
38
- #include "src/core/lib/security/transport/target_authority_table.h"
39
36
  #include "src/core/lib/slice/slice_internal.h"
40
37
 
41
38
  namespace grpc_core {
@@ -73,7 +70,7 @@ grpc_channel* CreateXdsChannel(const XdsBootstrap& bootstrap,
73
70
  if (!bootstrap.server().channel_creds.empty()) {
74
71
  for (size_t i = 0; i < bootstrap.server().channel_creds.size(); ++i) {
75
72
  if (bootstrap.server().channel_creds[i].type == "google_default") {
76
- creds = grpc_google_default_credentials_create();
73
+ creds = grpc_google_default_credentials_create(nullptr);
77
74
  break;
78
75
  } else if (bootstrap.server().channel_creds[i].type == "fake") {
79
76
  creds = grpc_fake_transport_security_credentials_create();