grpc 1.30.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 (676) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +723 -15910
  3. data/include/grpc/grpc_security.h +31 -14
  4. data/include/grpc/grpc_security_constants.h +3 -0
  5. data/include/grpc/impl/codegen/README.md +22 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +7 -5
  7. data/include/grpc/impl/codegen/port_platform.h +6 -33
  8. data/src/core/ext/filters/client_channel/backend_metric.cc +12 -9
  9. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
  10. data/src/core/ext/filters/client_channel/client_channel.cc +470 -285
  11. data/src/core/ext/filters/client_channel/client_channel.h +1 -1
  12. data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
  13. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  14. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  15. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
  16. data/src/core/ext/filters/client_channel/health/health_check_client.cc +8 -1
  17. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +8 -8
  18. data/src/core/ext/filters/client_channel/http_proxy.cc +6 -4
  19. data/src/core/ext/filters/client_channel/lb_policy.h +4 -0
  20. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -4
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -36
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
  25. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -13
  26. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +29 -10
  27. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +5 -4
  28. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +4 -6
  29. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +23 -13
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +18 -12
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +22 -14
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +18 -9
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +385 -78
  34. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -5
  35. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +5 -2
  36. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +6 -5
  37. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +8 -6
  38. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +9 -7
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +7 -5
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +36 -51
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  43. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  44. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
  45. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  46. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +383 -31
  47. data/src/core/ext/filters/client_channel/resolver_registry.cc +13 -14
  48. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +6 -7
  49. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +0 -1
  50. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +38 -32
  51. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +39 -20
  52. data/src/core/ext/filters/client_channel/server_address.cc +40 -7
  53. data/src/core/ext/filters/client_channel/server_address.h +42 -4
  54. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  55. data/src/core/ext/filters/client_channel/subchannel.cc +65 -24
  56. data/src/core/ext/filters/client_channel/subchannel.h +16 -4
  57. data/src/core/ext/filters/http/client/http_client_filter.cc +5 -5
  58. data/src/core/ext/filters/http/http_filters_plugin.cc +2 -1
  59. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +74 -33
  60. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
  61. data/src/core/ext/filters/max_age/max_age_filter.cc +2 -1
  62. data/src/core/ext/filters/message_size/message_size_filter.cc +56 -80
  63. data/src/core/ext/filters/message_size/message_size_filter.h +6 -0
  64. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
  65. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +18 -1
  66. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
  67. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +378 -348
  68. data/src/core/ext/transport/chttp2/server/chttp2_server.h +7 -2
  69. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -3
  70. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +10 -16
  71. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +9 -9
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +256 -279
  73. data/src/core/ext/transport/chttp2/transport/flow_control.cc +23 -28
  74. data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
  75. data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
  76. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
  77. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  78. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
  79. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +8 -9
  80. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  81. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
  82. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
  83. data/src/core/ext/transport/chttp2/transport/internal.h +18 -1
  84. data/src/core/ext/transport/chttp2/transport/parsing.cc +34 -71
  85. data/src/core/ext/transport/chttp2/transport/writing.cc +15 -19
  86. data/src/core/ext/transport/inproc/inproc_transport.cc +47 -27
  87. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
  88. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
  89. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +224 -0
  90. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +700 -0
  91. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  92. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
  93. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +380 -0
  94. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1378 -0
  95. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
  96. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
  97. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
  98. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
  99. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +112 -0
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +334 -0
  101. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +309 -0
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +96 -0
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +328 -0
  107. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +195 -0
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +634 -0
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  112. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
  113. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
  114. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +152 -0
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +536 -0
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
  119. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
  120. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
  121. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
  122. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
  123. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  124. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
  125. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  126. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
  127. data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
  128. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
  129. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +108 -0
  130. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +401 -0
  131. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +138 -0
  132. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +490 -0
  133. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
  134. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
  135. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +174 -0
  136. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +599 -0
  137. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
  138. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
  139. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +773 -0
  140. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2855 -0
  141. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +59 -0
  142. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +135 -0
  143. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
  144. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
  145. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +312 -0
  146. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1125 -0
  147. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
  148. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
  149. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +111 -0
  150. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +401 -0
  151. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +72 -0
  152. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +198 -0
  153. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +105 -0
  154. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +388 -0
  155. data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
  156. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
  157. data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
  158. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
  159. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +129 -0
  160. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +386 -0
  161. data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
  162. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
  163. data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
  164. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
  165. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
  166. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
  167. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
  168. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
  169. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
  170. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
  171. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  172. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
  173. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  174. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
  175. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  176. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
  177. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  178. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
  179. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
  180. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +127 -0
  181. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  182. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
  183. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  184. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
  185. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  186. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
  187. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
  188. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -9
  189. data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
  190. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
  191. data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
  192. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
  193. data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
  194. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
  195. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
  196. data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
  197. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
  198. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
  199. data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
  200. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
  201. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +39 -39
  202. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +412 -386
  203. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
  204. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
  205. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
  206. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +34 -55
  207. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
  208. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
  209. data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
  210. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
  211. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
  212. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
  213. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
  214. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
  215. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
  216. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
  217. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
  218. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
  219. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +5 -6
  220. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  221. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
  222. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
  223. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
  224. data/src/core/ext/upb-generated/validate/validate.upb.c +11 -11
  225. data/src/core/ext/upb-generated/validate/validate.upb.h +537 -536
  226. data/src/core/ext/xds/xds_api.cc +2388 -0
  227. data/src/core/ext/{filters/client_channel/xds → xds}/xds_api.h +120 -40
  228. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +56 -25
  229. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +8 -3
  230. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel.h +4 -4
  231. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +3 -3
  232. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_secure.cc +2 -5
  233. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +94 -347
  234. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +12 -45
  235. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +2 -2
  236. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +13 -13
  237. data/src/core/lib/channel/channel_trace.cc +2 -6
  238. data/src/core/lib/channel/channelz.cc +19 -30
  239. data/src/core/lib/channel/channelz.h +1 -1
  240. data/src/core/lib/channel/channelz_registry.cc +3 -1
  241. data/src/core/lib/gpr/log_linux.cc +6 -8
  242. data/src/core/lib/gpr/log_posix.cc +6 -8
  243. data/src/core/lib/gpr/string.cc +10 -9
  244. data/src/core/lib/gpr/string.h +4 -2
  245. data/src/core/lib/gpr/sync_posix.cc +2 -8
  246. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  247. data/src/core/lib/http/httpcli.cc +13 -10
  248. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  249. data/src/core/lib/iomgr/cfstream_handle.cc +1 -0
  250. data/src/core/lib/iomgr/endpoint.cc +5 -1
  251. data/src/core/lib/iomgr/endpoint.h +7 -3
  252. data/src/core/lib/iomgr/endpoint_cfstream.cc +32 -11
  253. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  254. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  255. data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -6
  256. data/src/core/lib/iomgr/ev_epollex_linux.cc +15 -21
  257. data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
  258. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  259. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +1 -1
  260. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +3 -3
  261. data/src/core/lib/iomgr/port.h +1 -21
  262. data/src/core/lib/iomgr/resolve_address_custom.cc +13 -18
  263. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -8
  264. data/src/core/lib/iomgr/resource_quota.cc +34 -31
  265. data/src/core/lib/iomgr/sockaddr_utils.cc +9 -6
  266. data/src/core/lib/iomgr/sockaddr_utils.h +3 -2
  267. data/src/core/lib/iomgr/socket_utils_common_posix.cc +95 -55
  268. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  269. data/src/core/lib/iomgr/tcp_client_cfstream.cc +9 -11
  270. data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
  271. data/src/core/lib/iomgr/tcp_client_posix.cc +27 -36
  272. data/src/core/lib/iomgr/tcp_client_windows.cc +9 -9
  273. data/src/core/lib/iomgr/tcp_custom.cc +33 -17
  274. data/src/core/lib/iomgr/tcp_custom.h +1 -1
  275. data/src/core/lib/iomgr/tcp_posix.cc +31 -13
  276. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  277. data/src/core/lib/iomgr/tcp_server.h +7 -5
  278. data/src/core/lib/iomgr/tcp_server_custom.cc +6 -14
  279. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -41
  280. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
  281. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -7
  282. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -9
  283. data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
  284. data/src/core/lib/iomgr/tcp_windows.cc +26 -10
  285. data/src/core/lib/iomgr/timer_generic.cc +13 -12
  286. data/src/core/lib/iomgr/udp_server.cc +24 -23
  287. data/src/core/lib/iomgr/udp_server.h +5 -2
  288. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  289. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  290. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  291. data/src/core/lib/json/json_reader.cc +20 -21
  292. data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
  293. data/src/core/lib/security/authorization/authorization_engine.h +84 -0
  294. data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
  295. data/src/core/lib/security/authorization/evaluate_args.h +59 -0
  296. data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
  297. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
  298. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
  299. data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
  300. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
  301. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
  302. data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
  303. data/src/core/lib/security/credentials/credentials.h +5 -3
  304. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  305. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +64 -43
  306. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
  307. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +19 -28
  308. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -6
  309. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
  310. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
  311. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +10 -0
  312. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +11 -12
  313. data/src/core/lib/security/security_connector/security_connector.cc +2 -0
  314. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  315. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -11
  316. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
  317. data/src/core/lib/security/security_connector/ssl_utils.cc +44 -23
  318. data/src/core/lib/security/security_connector/ssl_utils.h +6 -2
  319. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +27 -24
  320. data/src/core/lib/security/transport/client_auth_filter.cc +10 -9
  321. data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
  322. data/src/core/lib/security/util/json_util.cc +12 -13
  323. data/src/core/lib/slice/slice.cc +38 -1
  324. data/src/core/lib/slice/slice_internal.h +1 -0
  325. data/src/core/lib/surface/call.cc +52 -53
  326. data/src/core/lib/surface/call.h +2 -1
  327. data/src/core/lib/surface/channel.cc +28 -20
  328. data/src/core/lib/surface/channel.h +12 -2
  329. data/src/core/lib/surface/completion_queue.cc +0 -5
  330. data/src/core/lib/surface/init.cc +1 -1
  331. data/src/core/lib/surface/server.cc +1102 -1347
  332. data/src/core/lib/surface/server.h +369 -71
  333. data/src/core/lib/surface/version.cc +2 -2
  334. data/src/core/lib/transport/authority_override.cc +38 -0
  335. data/src/core/lib/transport/authority_override.h +32 -0
  336. data/src/core/lib/transport/connectivity_state.cc +18 -13
  337. data/src/core/lib/transport/connectivity_state.h +18 -6
  338. data/src/core/lib/transport/error_utils.cc +13 -0
  339. data/src/core/lib/transport/error_utils.h +6 -0
  340. data/src/core/lib/transport/static_metadata.cc +295 -276
  341. data/src/core/lib/transport/static_metadata.h +80 -73
  342. data/src/core/lib/transport/transport.h +13 -0
  343. data/src/core/lib/uri/uri_parser.cc +30 -35
  344. data/src/core/lib/uri/uri_parser.h +3 -1
  345. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  346. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -13
  347. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +24 -0
  348. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
  349. data/src/core/tsi/ssl_transport_security.cc +102 -11
  350. data/src/core/tsi/ssl_transport_security.h +14 -2
  351. data/src/core/tsi/transport_security_interface.h +5 -0
  352. data/src/ruby/bin/math_services_pb.rb +4 -4
  353. data/src/ruby/ext/grpc/extconf.rb +5 -2
  354. data/src/ruby/ext/grpc/rb_call.c +3 -2
  355. data/src/ruby/ext/grpc/rb_call.h +4 -0
  356. data/src/ruby/ext/grpc/rb_call_credentials.c +54 -10
  357. data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
  358. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -2
  359. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -4
  360. data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
  361. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  362. data/src/ruby/lib/grpc/version.rb +1 -1
  363. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  364. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
  365. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
  366. data/src/ruby/spec/channel_credentials_spec.rb +10 -0
  367. data/src/ruby/spec/generic/active_call_spec.rb +19 -8
  368. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  369. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +2 -0
  370. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  371. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  372. data/src/ruby/spec/pb/codegen/package_option_spec.rb +25 -1
  373. data/src/ruby/spec/user_agent_spec.rb +74 -0
  374. data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
  375. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
  376. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  377. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  378. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  379. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  380. data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
  381. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  382. data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
  383. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
  384. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
  385. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
  386. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  387. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
  388. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
  389. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  390. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
  391. data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
  392. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  393. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
  394. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
  395. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  396. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
  397. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  398. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  399. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  400. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
  401. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
  402. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
  403. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
  404. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  405. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  406. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
  407. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  408. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
  409. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
  410. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  411. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  412. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  413. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
  414. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  415. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
  416. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  417. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  418. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  419. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  420. data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
  421. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  422. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  423. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  424. data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
  425. data/third_party/abseil-cpp/absl/status/status.cc +447 -0
  426. data/third_party/abseil-cpp/absl/status/status.h +428 -0
  427. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
  428. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  429. data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
  430. data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
  431. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
  432. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  433. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  434. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  435. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  436. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  437. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  438. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
  439. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  440. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  441. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
  442. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  443. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  444. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
  445. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  446. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
  447. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
  448. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  449. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  450. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  451. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  452. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  453. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  454. data/third_party/boringssl-with-bazel/err_data.c +266 -254
  455. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  456. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
  457. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
  458. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
  459. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  460. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
  461. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
  462. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  463. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  464. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  465. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  466. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
  467. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
  468. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
  469. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +159 -0
  470. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  471. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +11 -1
  472. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -1
  473. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
  474. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
  475. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
  476. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
  477. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  478. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
  479. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +456 -0
  480. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +192 -0
  481. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -15
  482. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  483. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
  484. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +0 -29
  485. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +116 -363
  486. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +7 -45
  487. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
  488. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
  489. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  490. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  491. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +41 -0
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +28 -9
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
  499. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
  501. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
  502. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
  503. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  504. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +52 -0
  505. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
  506. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +2 -2
  507. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
  508. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +72 -23
  509. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -3
  510. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -10
  511. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +800 -715
  512. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +3 -3
  513. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -2
  514. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -2
  515. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +9 -0
  516. data/third_party/boringssl-with-bazel/src/ssl/internal.h +21 -14
  517. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -7
  518. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
  519. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +38 -0
  520. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +4 -24
  521. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
  522. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +45 -24
  523. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +34 -9
  524. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +31 -21
  525. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +17 -9
  526. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  527. data/third_party/re2/re2/bitmap256.h +117 -0
  528. data/third_party/re2/re2/bitstate.cc +385 -0
  529. data/third_party/re2/re2/compile.cc +1279 -0
  530. data/third_party/re2/re2/dfa.cc +2130 -0
  531. data/third_party/re2/re2/filtered_re2.cc +121 -0
  532. data/third_party/re2/re2/filtered_re2.h +109 -0
  533. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  534. data/third_party/re2/re2/nfa.cc +713 -0
  535. data/third_party/re2/re2/onepass.cc +623 -0
  536. data/third_party/re2/re2/parse.cc +2464 -0
  537. data/third_party/re2/re2/perl_groups.cc +119 -0
  538. data/third_party/re2/re2/pod_array.h +55 -0
  539. data/third_party/re2/re2/prefilter.cc +710 -0
  540. data/third_party/re2/re2/prefilter.h +108 -0
  541. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  542. data/third_party/re2/re2/prefilter_tree.h +139 -0
  543. data/third_party/re2/re2/prog.cc +988 -0
  544. data/third_party/re2/re2/prog.h +436 -0
  545. data/third_party/re2/re2/re2.cc +1362 -0
  546. data/third_party/re2/re2/re2.h +1002 -0
  547. data/third_party/re2/re2/regexp.cc +980 -0
  548. data/third_party/re2/re2/regexp.h +659 -0
  549. data/third_party/re2/re2/set.cc +154 -0
  550. data/third_party/re2/re2/set.h +80 -0
  551. data/third_party/re2/re2/simplify.cc +657 -0
  552. data/third_party/re2/re2/sparse_array.h +392 -0
  553. data/third_party/re2/re2/sparse_set.h +264 -0
  554. data/third_party/re2/re2/stringpiece.cc +65 -0
  555. data/third_party/re2/re2/stringpiece.h +210 -0
  556. data/third_party/re2/re2/tostring.cc +351 -0
  557. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  558. data/third_party/re2/re2/unicode_casefold.h +78 -0
  559. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  560. data/third_party/re2/re2/unicode_groups.h +67 -0
  561. data/third_party/re2/re2/walker-inl.h +246 -0
  562. data/third_party/re2/util/benchmark.h +156 -0
  563. data/third_party/re2/util/flags.h +26 -0
  564. data/third_party/re2/util/logging.h +109 -0
  565. data/third_party/re2/util/malloc_counter.h +19 -0
  566. data/third_party/re2/util/mix.h +41 -0
  567. data/third_party/re2/util/mutex.h +148 -0
  568. data/third_party/re2/util/pcre.cc +1025 -0
  569. data/third_party/re2/util/pcre.h +681 -0
  570. data/third_party/re2/util/rune.cc +260 -0
  571. data/third_party/re2/util/strutil.cc +149 -0
  572. data/third_party/re2/util/strutil.h +21 -0
  573. data/third_party/re2/util/test.h +50 -0
  574. data/third_party/re2/util/utf.h +44 -0
  575. data/third_party/re2/util/util.h +42 -0
  576. data/third_party/upb/upb/decode.c +517 -505
  577. data/third_party/upb/upb/encode.c +165 -123
  578. data/third_party/upb/upb/msg.c +130 -64
  579. data/third_party/upb/upb/msg.h +418 -14
  580. data/third_party/upb/upb/port_def.inc +35 -6
  581. data/third_party/upb/upb/port_undef.inc +8 -1
  582. data/third_party/upb/upb/table.c +53 -86
  583. data/third_party/upb/upb/table.int.h +11 -52
  584. data/third_party/upb/upb/upb.c +151 -125
  585. data/third_party/upb/upb/upb.h +91 -147
  586. data/third_party/upb/upb/upb.hpp +88 -0
  587. metadata +310 -148
  588. data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -1906
  589. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
  590. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -35
  591. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
  592. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -418
  593. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
  594. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -197
  595. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
  596. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -378
  597. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -53
  598. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
  599. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1447
  600. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
  601. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -218
  602. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  603. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -305
  604. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
  605. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -328
  606. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -78
  607. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
  608. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -897
  609. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
  610. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -322
  611. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
  612. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -72
  613. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
  614. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -642
  615. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
  616. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -673
  617. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  618. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
  619. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -518
  620. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -89
  621. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
  622. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -392
  623. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -53
  624. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
  625. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -240
  626. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
  627. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -33
  628. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
  629. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -266
  630. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
  631. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -324
  632. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -53
  633. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
  634. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -399
  635. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
  636. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -33
  637. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
  638. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -527
  639. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
  640. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -112
  641. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -53
  642. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
  643. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -199
  644. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
  645. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -33
  646. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
  647. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -3032
  648. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
  649. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -134
  650. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -53
  651. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
  652. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -725
  653. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
  654. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1132
  655. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  656. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
  657. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
  658. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -50
  659. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
  660. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -134
  661. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
  662. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -144
  663. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
  664. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  665. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
  666. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  667. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -87
  668. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -112
  669. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -62
  670. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
  671. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -249
  672. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  673. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  674. data/src/core/lib/slice/slice_hash_table.h +0 -199
  675. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
  676. data/third_party/upb/upb/generated_util.h +0 -105
@@ -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();
@@ -30,18 +30,15 @@
30
30
  #include <grpc/byte_buffer_reader.h>
31
31
  #include <grpc/grpc.h>
32
32
  #include <grpc/support/alloc.h>
33
- #include <grpc/support/string_util.h>
34
33
  #include <grpc/support/time.h>
35
34
 
36
35
  #include "src/core/ext/filters/client_channel/client_channel.h"
37
- #include "src/core/ext/filters/client_channel/parse_address.h"
38
- #include "src/core/ext/filters/client_channel/server_address.h"
39
36
  #include "src/core/ext/filters/client_channel/service_config.h"
40
- #include "src/core/ext/filters/client_channel/xds/xds_api.h"
41
- #include "src/core/ext/filters/client_channel/xds/xds_channel.h"
42
- #include "src/core/ext/filters/client_channel/xds/xds_channel_args.h"
43
- #include "src/core/ext/filters/client_channel/xds/xds_client.h"
44
- #include "src/core/ext/filters/client_channel/xds/xds_client_stats.h"
37
+ #include "src/core/ext/xds/xds_api.h"
38
+ #include "src/core/ext/xds/xds_channel.h"
39
+ #include "src/core/ext/xds/xds_channel_args.h"
40
+ #include "src/core/ext/xds/xds_client.h"
41
+ #include "src/core/ext/xds/xds_client_stats.h"
45
42
  #include "src/core/lib/backoff/backoff.h"
46
43
  #include "src/core/lib/channel/channel_args.h"
47
44
  #include "src/core/lib/channel/channel_stack.h"
@@ -55,7 +52,6 @@
55
52
  #include "src/core/lib/iomgr/sockaddr_utils.h"
56
53
  #include "src/core/lib/iomgr/timer.h"
57
54
  #include "src/core/lib/iomgr/work_serializer.h"
58
- #include "src/core/lib/slice/slice_hash_table.h"
59
55
  #include "src/core/lib/slice/slice_internal.h"
60
56
  #include "src/core/lib/slice/slice_string_helpers.h"
61
57
  #include "src/core/lib/surface/call.h"
@@ -180,21 +176,18 @@ class XdsClient::ChannelState::AdsCallState
180
176
  void OnTimerLocked(grpc_error* error) {
181
177
  if (error == GRPC_ERROR_NONE && timer_pending_) {
182
178
  timer_pending_ = false;
183
- char* msg;
184
- gpr_asprintf(
185
- &msg,
186
- "timeout obtaining resource {type=%s name=%s} from xds server",
187
- type_url_.c_str(), name_.c_str());
188
- grpc_error* watcher_error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
189
- gpr_free(msg);
179
+ grpc_error* watcher_error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
180
+ absl::StrFormat(
181
+ "timeout obtaining resource {type=%s name=%s} from xds server",
182
+ type_url_, name_)
183
+ .c_str());
190
184
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
191
185
  gpr_log(GPR_INFO, "[xds_client %p] %s", ads_calld_->xds_client(),
192
186
  grpc_error_string(watcher_error));
193
187
  }
194
188
  if (type_url_ == XdsApi::kLdsTypeUrl ||
195
189
  type_url_ == XdsApi::kRdsTypeUrl) {
196
- ads_calld_->xds_client()->service_config_watcher_->OnError(
197
- watcher_error);
190
+ ads_calld_->xds_client()->listener_watcher_->OnError(watcher_error);
198
191
  } else if (type_url_ == XdsApi::kCdsTypeUrl) {
199
192
  ClusterState& state = ads_calld_->xds_client()->cluster_map_[name_];
200
193
  for (const auto& p : state.watchers) {
@@ -401,13 +394,15 @@ class XdsClient::ChannelState::StateWatcher
401
394
  parent_(std::move(parent)) {}
402
395
 
403
396
  private:
404
- void OnConnectivityStateChange(grpc_connectivity_state new_state) override {
397
+ void OnConnectivityStateChange(grpc_connectivity_state new_state,
398
+ const absl::Status& status) override {
405
399
  if (!parent_->shutting_down_ &&
406
400
  new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
407
401
  // In TRANSIENT_FAILURE. Notify all watchers of error.
408
402
  gpr_log(GPR_INFO,
409
- "[xds_client %p] xds channel in state TRANSIENT_FAILURE",
410
- parent_->xds_client());
403
+ "[xds_client %p] xds channel in state:TRANSIENT_FAILURE "
404
+ "status_message:(%s)",
405
+ parent_->xds_client(), status.ToString().c_str());
411
406
  parent_->xds_client()->NotifyOnError(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
412
407
  "xds channel in TRANSIENT_FAILURE"));
413
408
  }
@@ -686,11 +681,14 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
686
681
  GPR_ASSERT(xds_client() != nullptr);
687
682
  GPR_ASSERT(!xds_client()->server_name_.empty());
688
683
  // Create a call with the specified method name.
684
+ const auto& method =
685
+ xds_client()->bootstrap_->server().ShouldUseV3()
686
+ ? GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_DISCOVERY_DOT_V3_DOT_AGGREGATEDDISCOVERYSERVICE_SLASH_STREAMAGGREGATEDRESOURCES
687
+ : GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_DISCOVERY_DOT_V2_DOT_AGGREGATEDDISCOVERYSERVICE_SLASH_STREAMAGGREGATEDRESOURCES;
689
688
  call_ = grpc_channel_create_pollset_set_call(
690
689
  chand()->channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
691
- xds_client()->interested_parties_,
692
- GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_DISCOVERY_DOT_V2_DOT_AGGREGATEDDISCOVERYSERVICE_SLASH_STREAMAGGREGATEDRESOURCES,
693
- nullptr, GRPC_MILLIS_INF_FUTURE, nullptr);
690
+ xds_client()->interested_parties_, method, nullptr,
691
+ GRPC_MILLIS_INF_FUTURE, nullptr);
694
692
  GPR_ASSERT(call_ != nullptr);
695
693
  // Init data associated with the call.
696
694
  grpc_metadata_array_init(&initial_metadata_recv_);
@@ -720,7 +718,7 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
720
718
  // Op: send request message.
721
719
  GRPC_CLOSURE_INIT(&on_request_sent_, OnRequestSent, this,
722
720
  grpc_schedule_on_exec_ctx);
723
- if (xds_client()->service_config_watcher_ != nullptr) {
721
+ if (xds_client()->listener_watcher_ != nullptr) {
724
722
  Subscribe(XdsApi::kLdsTypeUrl, xds_client()->server_name_);
725
723
  if (xds_client()->lds_result_.has_value() &&
726
724
  !xds_client()->lds_result_->route_config_name.empty()) {
@@ -789,7 +787,7 @@ void XdsClient::ChannelState::AdsCallState::Orphan() {
789
787
  // on_status_received_ will complete the cancellation and clean up. Otherwise,
790
788
  // we are here because xds_client has to orphan a failed call, then the
791
789
  // following cancellation will be a no-op.
792
- grpc_call_cancel(call_, nullptr);
790
+ grpc_call_cancel_internal(call_);
793
791
  state_map_.clear();
794
792
  // Note that the initial ref is hold by on_status_received_. So the
795
793
  // corresponding unref happens in on_status_received_ instead of here.
@@ -883,7 +881,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
883
881
  xds_client()->rds_result_.reset();
884
882
  }
885
883
  xds_client()->lds_result_.reset();
886
- xds_client()->service_config_watcher_->OnResourceDoesNotExist();
884
+ xds_client()->listener_watcher_->OnResourceDoesNotExist();
887
885
  return;
888
886
  }
889
887
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
@@ -894,15 +892,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
894
892
  ? lds_update->route_config_name.c_str()
895
893
  : "<inlined>"));
896
894
  if (lds_update->rds_update.has_value()) {
897
- gpr_log(GPR_INFO, " RouteConfiguration contains %" PRIuPTR " routes",
898
- lds_update->rds_update.value().routes.size());
899
- for (const auto& route : lds_update->rds_update.value().routes) {
900
- gpr_log(GPR_INFO,
901
- " route: { service=\"%s\", "
902
- "method=\"%s\" }, cluster=\"%s\" }",
903
- route.service.c_str(), route.method.c_str(),
904
- route.cluster_name.c_str());
905
- }
895
+ gpr_log(GPR_INFO, "RouteConfiguration: %s",
896
+ lds_update->rds_update->ToString().c_str());
906
897
  }
907
898
  }
908
899
  auto& lds_state = state_map_[XdsApi::kLdsTypeUrl];
@@ -928,14 +919,15 @@ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
928
919
  if (xds_client()->lds_result_->rds_update.has_value()) {
929
920
  // If the RouteConfiguration was found inlined in LDS response, notify
930
921
  // the watcher immediately.
931
- RefCountedPtr<ServiceConfig> service_config;
932
- grpc_error* error = xds_client()->CreateServiceConfig(
933
- xds_client()->lds_result_->rds_update.value(), &service_config);
934
- if (error == GRPC_ERROR_NONE) {
935
- xds_client()->service_config_watcher_->OnServiceConfigChanged(
936
- std::move(service_config));
922
+ const XdsApi::RdsUpdate::VirtualHost* vhost =
923
+ xds_client()->lds_result_->rds_update->FindVirtualHostForDomain(
924
+ xds_client()->server_name_);
925
+ if (vhost == nullptr) {
926
+ xds_client()->listener_watcher_->OnError(
927
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING(
928
+ "no VirtualHost found for domain"));
937
929
  } else {
938
- xds_client()->service_config_watcher_->OnError(error);
930
+ xds_client()->listener_watcher_->OnListenerChanged(vhost->routes);
939
931
  }
940
932
  } else {
941
933
  // Send RDS request for dynamic resolution.
@@ -951,21 +943,12 @@ void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdate(
951
943
  "[xds_client %p] RDS update does not include requested resource",
952
944
  xds_client());
953
945
  xds_client()->rds_result_.reset();
954
- xds_client()->service_config_watcher_->OnResourceDoesNotExist();
946
+ xds_client()->listener_watcher_->OnResourceDoesNotExist();
955
947
  return;
956
948
  }
957
949
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
958
- gpr_log(GPR_INFO,
959
- "[xds_client %p] RDS update received; RouteConfiguration contains "
960
- "%" PRIuPTR " routes",
961
- this, rds_update.value().routes.size());
962
- for (const auto& route : rds_update.value().routes) {
963
- gpr_log(GPR_INFO,
964
- " route: { service=\"%s\", "
965
- "method=\"%s\" }, cluster=\"%s\" }",
966
- route.service.c_str(), route.method.c_str(),
967
- route.cluster_name.c_str());
968
- }
950
+ gpr_log(GPR_INFO, "[xds_client %p] RDS update received:\n%s", xds_client(),
951
+ rds_update->ToString().c_str());
969
952
  }
970
953
  auto& rds_state = state_map_[XdsApi::kRdsTypeUrl];
971
954
  auto& state =
@@ -983,14 +966,15 @@ void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdate(
983
966
  }
984
967
  xds_client()->rds_result_ = std::move(rds_update);
985
968
  // Notify the watcher.
986
- RefCountedPtr<ServiceConfig> service_config;
987
- grpc_error* error = xds_client()->CreateServiceConfig(
988
- xds_client()->rds_result_.value(), &service_config);
989
- if (error == GRPC_ERROR_NONE) {
990
- xds_client()->service_config_watcher_->OnServiceConfigChanged(
991
- std::move(service_config));
969
+ const XdsApi::RdsUpdate::VirtualHost* vhost =
970
+ xds_client()->rds_result_->FindVirtualHostForDomain(
971
+ xds_client()->server_name_);
972
+ if (vhost == nullptr) {
973
+ xds_client()->listener_watcher_->OnError(
974
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING(
975
+ "no VirtualHost found for domain"));
992
976
  } else {
993
- xds_client()->service_config_watcher_->OnError(error);
977
+ xds_client()->listener_watcher_->OnListenerChanged(vhost->routes);
994
978
  }
995
979
  }
996
980
 
@@ -1042,6 +1026,13 @@ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
1042
1026
  const std::string& cluster_name = p.first;
1043
1027
  if (cds_update_map.find(cluster_name) == cds_update_map.end()) {
1044
1028
  ClusterState& cluster_state = xds_client()->cluster_map_[cluster_name];
1029
+ // If the resource was newly requested but has not yet been received,
1030
+ // we don't want to generate an error for the watchers, because this CDS
1031
+ // response may be in reaction to an earlier request that did not yet
1032
+ // request the new resource, so its absence from the response does not
1033
+ // necessarily indicate that the resource does not exist.
1034
+ // For that case, we rely on the request timeout instead.
1035
+ if (!cluster_state.update.has_value()) continue;
1045
1036
  cluster_state.update.reset();
1046
1037
  for (const auto& p : cluster_state.watchers) {
1047
1038
  p.first->OnResourceDoesNotExist();
@@ -1097,8 +1088,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdate(
1097
1088
  "[xds_client %p] Priority %" PRIuPTR ", locality %" PRIuPTR
1098
1089
  " %s has weight %d, contains %" PRIuPTR " server addresses",
1099
1090
  xds_client(), priority, locality_count,
1100
- locality.name->AsHumanReadableString(), locality.lb_weight,
1101
- locality.serverlist.size());
1091
+ locality.name->AsHumanReadableString().c_str(),
1092
+ locality.lb_weight, locality.serverlist.size());
1102
1093
  for (size_t i = 0; i < locality.serverlist.size(); ++i) {
1103
1094
  std::string ipport = grpc_sockaddr_to_string(
1104
1095
  &locality.serverlist[i].address(), false);
@@ -1106,7 +1097,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdate(
1106
1097
  "[xds_client %p] Priority %" PRIuPTR ", locality %" PRIuPTR
1107
1098
  " %s, server address %" PRIuPTR ": %s",
1108
1099
  xds_client(), priority, locality_count,
1109
- locality.name->AsHumanReadableString(), i, ipport.c_str());
1100
+ locality.name->AsHumanReadableString().c_str(), i,
1101
+ ipport.c_str());
1110
1102
  }
1111
1103
  ++locality_count;
1112
1104
  }
@@ -1203,66 +1195,49 @@ void XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
1203
1195
  grpc_byte_buffer_reader_destroy(&bbr);
1204
1196
  grpc_byte_buffer_destroy(recv_message_payload_);
1205
1197
  recv_message_payload_ = nullptr;
1206
- // TODO(juanlishen): When we convert this to use the xds protocol, the
1207
- // balancer will send us a fallback timeout such that we should go into
1208
- // fallback mode if we have lost contact with the balancer after a certain
1209
- // period of time. We will need to save the timeout value here, and then
1210
- // when the balancer call ends, we will need to start a timer for the
1211
- // specified period of time, and if the timer fires, we go into fallback
1212
- // mode. We will also need to cancel the timer when we receive a serverlist
1213
- // from the balancer.
1214
- // Parse the response.
1215
- absl::optional<XdsApi::LdsUpdate> lds_update;
1216
- absl::optional<XdsApi::RdsUpdate> rds_update;
1217
- XdsApi::CdsUpdateMap cds_update_map;
1218
- XdsApi::EdsUpdateMap eds_update_map;
1219
- std::string version;
1220
- std::string nonce;
1221
- std::string type_url;
1222
- // Note that ParseAdsResponse() also validates the response.
1223
- grpc_error* parse_error = xds_client()->api_.ParseAdsResponse(
1198
+ // Parse and validate the response.
1199
+ XdsApi::AdsParseResult result = xds_client()->api_.ParseAdsResponse(
1224
1200
  response_slice, xds_client()->server_name_,
1225
1201
  ResourceNamesForRequest(XdsApi::kRdsTypeUrl),
1226
1202
  ResourceNamesForRequest(XdsApi::kCdsTypeUrl),
1227
- ResourceNamesForRequest(XdsApi::kEdsTypeUrl), &lds_update, &rds_update,
1228
- &cds_update_map, &eds_update_map, &version, &nonce, &type_url);
1203
+ ResourceNamesForRequest(XdsApi::kEdsTypeUrl));
1229
1204
  grpc_slice_unref_internal(response_slice);
1230
- if (type_url.empty()) {
1205
+ if (result.type_url.empty()) {
1231
1206
  // Ignore unparsable response.
1232
1207
  gpr_log(GPR_ERROR,
1233
1208
  "[xds_client %p] Error parsing ADS response (%s) -- ignoring",
1234
- xds_client(), grpc_error_string(parse_error));
1235
- GRPC_ERROR_UNREF(parse_error);
1209
+ xds_client(), grpc_error_string(result.parse_error));
1210
+ GRPC_ERROR_UNREF(result.parse_error);
1236
1211
  } else {
1237
1212
  // Update nonce.
1238
- auto& state = state_map_[type_url];
1239
- state.nonce = std::move(nonce);
1213
+ auto& state = state_map_[result.type_url];
1214
+ state.nonce = std::move(result.nonce);
1240
1215
  // NACK or ACK the response.
1241
- if (parse_error != GRPC_ERROR_NONE) {
1216
+ if (result.parse_error != GRPC_ERROR_NONE) {
1242
1217
  GRPC_ERROR_UNREF(state.error);
1243
- state.error = parse_error;
1218
+ state.error = result.parse_error;
1244
1219
  // NACK unacceptable update.
1245
1220
  gpr_log(GPR_ERROR,
1246
1221
  "[xds_client %p] ADS response invalid for resource type %s "
1247
1222
  "version %s, will NACK: nonce=%s error=%s",
1248
- xds_client(), type_url.c_str(), version.c_str(),
1249
- state.nonce.c_str(), grpc_error_string(parse_error));
1250
- SendMessageLocked(type_url);
1223
+ xds_client(), result.type_url.c_str(), result.version.c_str(),
1224
+ state.nonce.c_str(), grpc_error_string(result.parse_error));
1225
+ SendMessageLocked(result.type_url);
1251
1226
  } else {
1252
1227
  seen_response_ = true;
1253
1228
  // Accept the ADS response according to the type_url.
1254
- if (type_url == XdsApi::kLdsTypeUrl) {
1255
- AcceptLdsUpdate(std::move(lds_update));
1256
- } else if (type_url == XdsApi::kRdsTypeUrl) {
1257
- AcceptRdsUpdate(std::move(rds_update));
1258
- } else if (type_url == XdsApi::kCdsTypeUrl) {
1259
- AcceptCdsUpdate(std::move(cds_update_map));
1260
- } else if (type_url == XdsApi::kEdsTypeUrl) {
1261
- AcceptEdsUpdate(std::move(eds_update_map));
1229
+ if (result.type_url == XdsApi::kLdsTypeUrl) {
1230
+ AcceptLdsUpdate(std::move(result.lds_update));
1231
+ } else if (result.type_url == XdsApi::kRdsTypeUrl) {
1232
+ AcceptRdsUpdate(std::move(result.rds_update));
1233
+ } else if (result.type_url == XdsApi::kCdsTypeUrl) {
1234
+ AcceptCdsUpdate(std::move(result.cds_update_map));
1235
+ } else if (result.type_url == XdsApi::kEdsTypeUrl) {
1236
+ AcceptEdsUpdate(std::move(result.eds_update_map));
1262
1237
  }
1263
- state.version = std::move(version);
1238
+ state.version = std::move(result.version);
1264
1239
  // ACK the update.
1265
- SendMessageLocked(type_url);
1240
+ SendMessageLocked(result.type_url);
1266
1241
  // Start load reporting if needed.
1267
1242
  auto& lrs_call = chand()->lrs_calld_;
1268
1243
  if (lrs_call != nullptr) {
@@ -1476,11 +1451,14 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
1476
1451
  // the polling entities from client_channel.
1477
1452
  GPR_ASSERT(xds_client() != nullptr);
1478
1453
  GPR_ASSERT(!xds_client()->server_name_.empty());
1454
+ const auto& method =
1455
+ xds_client()->bootstrap_->server().ShouldUseV3()
1456
+ ? GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_LOAD_STATS_DOT_V3_DOT_LOADREPORTINGSERVICE_SLASH_STREAMLOADSTATS
1457
+ : GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_LOAD_STATS_DOT_V2_DOT_LOADREPORTINGSERVICE_SLASH_STREAMLOADSTATS;
1479
1458
  call_ = grpc_channel_create_pollset_set_call(
1480
1459
  chand()->channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
1481
- xds_client()->interested_parties_,
1482
- GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_LOAD_STATS_DOT_V2_DOT_LOADREPORTINGSERVICE_SLASH_STREAMLOADSTATS,
1483
- nullptr, GRPC_MILLIS_INF_FUTURE, nullptr);
1460
+ xds_client()->interested_parties_, method, nullptr,
1461
+ GRPC_MILLIS_INF_FUTURE, nullptr);
1484
1462
  GPR_ASSERT(call_ != nullptr);
1485
1463
  // Init the request payload.
1486
1464
  grpc_slice request_payload_slice =
@@ -1579,7 +1557,7 @@ void XdsClient::ChannelState::LrsCallState::Orphan() {
1579
1557
  // on_status_received_ will complete the cancellation and clean up. Otherwise,
1580
1558
  // we are here because xds_client has to orphan a failed call, then the
1581
1559
  // following cancellation will be a no-op.
1582
- grpc_call_cancel(call_, nullptr);
1560
+ grpc_call_cancel_internal(call_);
1583
1561
  // Note that the initial ref is hold by on_status_received_. So the
1584
1562
  // corresponding unref happens in on_status_received_ instead of here.
1585
1563
  }
@@ -1778,7 +1756,7 @@ grpc_millis GetRequestTimeout(const grpc_channel_args& args) {
1778
1756
  XdsClient::XdsClient(std::shared_ptr<WorkSerializer> work_serializer,
1779
1757
  grpc_pollset_set* interested_parties,
1780
1758
  absl::string_view server_name,
1781
- std::unique_ptr<ServiceConfigWatcherInterface> watcher,
1759
+ std::unique_ptr<ListenerWatcherInterface> watcher,
1782
1760
  const grpc_channel_args& channel_args, grpc_error** error)
1783
1761
  : InternallyRefCounted<XdsClient>(&grpc_xds_client_trace),
1784
1762
  request_timeout_(GetRequestTimeout(channel_args)),
@@ -1786,10 +1764,9 @@ XdsClient::XdsClient(std::shared_ptr<WorkSerializer> work_serializer,
1786
1764
  interested_parties_(interested_parties),
1787
1765
  bootstrap_(
1788
1766
  XdsBootstrap::ReadFromFile(this, &grpc_xds_client_trace, error)),
1789
- api_(this, &grpc_xds_client_trace,
1790
- bootstrap_ == nullptr ? nullptr : bootstrap_->node()),
1767
+ api_(this, &grpc_xds_client_trace, bootstrap_.get()),
1791
1768
  server_name_(server_name),
1792
- service_config_watcher_(std::move(watcher)) {
1769
+ listener_watcher_(std::move(watcher)) {
1793
1770
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1794
1771
  gpr_log(GPR_INFO, "[xds_client %p] creating xds client", this);
1795
1772
  }
@@ -1812,7 +1789,7 @@ XdsClient::XdsClient(std::shared_ptr<WorkSerializer> work_serializer,
1812
1789
  }
1813
1790
  chand_ = MakeOrphanable<ChannelState>(
1814
1791
  Ref(DEBUG_LOCATION, "XdsClient+ChannelState"), channel);
1815
- if (service_config_watcher_ != nullptr) {
1792
+ if (listener_watcher_ != nullptr) {
1816
1793
  chand_->Subscribe(XdsApi::kLdsTypeUrl, std::string(server_name));
1817
1794
  }
1818
1795
  }
@@ -1835,7 +1812,7 @@ void XdsClient::Orphan() {
1835
1812
  // possible for ADS calls to be in progress. Unreffing the loadbalancing
1836
1813
  // policies before those calls are done would lead to issues such as
1837
1814
  // https://github.com/grpc/grpc/issues/20928.
1838
- if (service_config_watcher_ != nullptr) {
1815
+ if (listener_watcher_ != nullptr) {
1839
1816
  cluster_map_.clear();
1840
1817
  endpoint_map_.clear();
1841
1818
  }
@@ -2010,236 +1987,6 @@ void XdsClient::ResetBackoff() {
2010
1987
  }
2011
1988
  }
2012
1989
 
2013
- namespace {
2014
- std::string CreateServiceConfigActionCluster(const std::string& cluster_name) {
2015
- return absl::StrFormat(
2016
- " \"cds:%s\":{\n"
2017
- " \"childPolicy\":[ {\n"
2018
- " \"cds_experimental\":{\n"
2019
- " \"cluster\": \"%s\"\n"
2020
- " }\n"
2021
- " } ]\n"
2022
- " }",
2023
- cluster_name, cluster_name);
2024
- }
2025
-
2026
- std::string CreateServiceConfigRoute(const std::string& action_name,
2027
- const std::string& service,
2028
- const std::string& method) {
2029
- return absl::StrFormat(
2030
- " { \n"
2031
- " \"methodName\": {\n"
2032
- " \"service\": \"%s\",\n"
2033
- " \"method\": \"%s\"\n"
2034
- " },\n"
2035
- " \"action\": \"%s\"\n"
2036
- " }",
2037
- service, method, action_name);
2038
- }
2039
-
2040
- // Create the service config for one weighted cluster.
2041
- std::string CreateServiceConfigActionWeightedCluster(
2042
- const std::string& name,
2043
- const std::vector<XdsApi::RdsUpdate::RdsRoute::ClusterWeight>& clusters) {
2044
- std::vector<std::string> config_parts;
2045
- config_parts.push_back(
2046
- absl::StrFormat(" \"weighted:%s\":{\n"
2047
- " \"childPolicy\":[ {\n"
2048
- " \"weighted_target_experimental\":{\n"
2049
- " \"targets\":{\n",
2050
- name));
2051
- std::vector<std::string> weighted_targets;
2052
- weighted_targets.reserve(clusters.size());
2053
- for (const auto& cluster_weight : clusters) {
2054
- weighted_targets.push_back(absl::StrFormat(
2055
- " \"%s\":{\n"
2056
- " \"weight\":%d,\n"
2057
- " \"childPolicy\":[ {\n"
2058
- " \"cds_experimental\":{\n"
2059
- " \"cluster\": \"%s\"\n"
2060
- " }\n"
2061
- " } ]\n"
2062
- " }",
2063
- cluster_weight.name, cluster_weight.weight, cluster_weight.name));
2064
- }
2065
- config_parts.push_back(absl::StrJoin(weighted_targets, ",\n"));
2066
- config_parts.push_back(
2067
- " }\n"
2068
- " }\n"
2069
- " } ]\n"
2070
- " }");
2071
- return absl::StrJoin(config_parts, "");
2072
- }
2073
-
2074
- struct WeightedClustersKeys {
2075
- std::string cluster_names_key;
2076
- std::string cluster_weights_key;
2077
- };
2078
-
2079
- // Returns the cluster names and weights key or the cluster names only key.
2080
- WeightedClustersKeys GetWeightedClustersKey(
2081
- const std::vector<XdsApi::RdsUpdate::RdsRoute::ClusterWeight>&
2082
- weighted_clusters) {
2083
- std::set<std::string> cluster_names;
2084
- std::set<std::string> cluster_weights;
2085
- for (const auto& cluster_weight : weighted_clusters) {
2086
- cluster_names.emplace(absl::StrFormat("%s", cluster_weight.name));
2087
- cluster_weights.emplace(
2088
- absl::StrFormat("%s_%d", cluster_weight.name, cluster_weight.weight));
2089
- }
2090
- return {absl::StrJoin(cluster_names, "_"),
2091
- absl::StrJoin(cluster_weights, "_")};
2092
- }
2093
-
2094
- } // namespace
2095
-
2096
- std::string XdsClient::WeightedClustersActionName(
2097
- const std::vector<XdsApi::RdsUpdate::RdsRoute::ClusterWeight>&
2098
- weighted_clusters) {
2099
- WeightedClustersKeys keys = GetWeightedClustersKey(weighted_clusters);
2100
- auto cluster_names_map_it =
2101
- weighted_cluster_index_map_.find(keys.cluster_names_key);
2102
- GPR_ASSERT(cluster_names_map_it != weighted_cluster_index_map_.end());
2103
- const auto& cluster_weights_map =
2104
- cluster_names_map_it->second.cluster_weights_map;
2105
- auto cluster_weights_map_it =
2106
- cluster_weights_map.find(keys.cluster_weights_key);
2107
- GPR_ASSERT(cluster_weights_map_it != cluster_weights_map.end());
2108
- return absl::StrFormat("%s_%d", keys.cluster_names_key,
2109
- cluster_weights_map_it->second);
2110
- }
2111
-
2112
- void XdsClient::UpdateWeightedClusterIndexMap(
2113
- const XdsApi::RdsUpdate& rds_update) {
2114
- // Construct a list of unique WeightedCluster
2115
- // actions which we need to process: to find action names
2116
- std::map<std::string /* cluster_weights_key */,
2117
- std::string /* cluster_names_key */>
2118
- actions_to_process;
2119
- for (const auto& route : rds_update.routes) {
2120
- if (!route.weighted_clusters.empty()) {
2121
- WeightedClustersKeys keys =
2122
- GetWeightedClustersKey(route.weighted_clusters);
2123
- auto action_it = actions_to_process.find(keys.cluster_weights_key);
2124
- if (action_it == actions_to_process.end()) {
2125
- actions_to_process[std::move(keys.cluster_weights_key)] =
2126
- std::move(keys.cluster_names_key);
2127
- }
2128
- }
2129
- }
2130
- // First pass of all unique WeightedCluster actions: if the exact same
2131
- // weighted target policy (same clusters and weights) appears in the old map,
2132
- // then that old action name is taken again and should be moved to the new
2133
- // map; any other action names from the old set of actions are candidates for
2134
- // reuse.
2135
- XdsClient::WeightedClusterIndexMap new_weighted_cluster_index_map;
2136
- for (auto action_it = actions_to_process.begin();
2137
- action_it != actions_to_process.end();) {
2138
- const std::string& cluster_names_key = action_it->second;
2139
- const std::string& cluster_weights_key = action_it->first;
2140
- auto old_cluster_names_map_it =
2141
- weighted_cluster_index_map_.find(cluster_names_key);
2142
- if (old_cluster_names_map_it != weighted_cluster_index_map_.end()) {
2143
- // Add cluster_names_key to the new map and copy next_index.
2144
- auto& new_cluster_names_info =
2145
- new_weighted_cluster_index_map[cluster_names_key];
2146
- new_cluster_names_info.next_index =
2147
- old_cluster_names_map_it->second.next_index;
2148
- // Lookup cluster_weights_key in old map.
2149
- auto& old_cluster_weights_map =
2150
- old_cluster_names_map_it->second.cluster_weights_map;
2151
- auto old_cluster_weights_map_it =
2152
- old_cluster_weights_map.find(cluster_weights_key);
2153
- if (old_cluster_weights_map_it != old_cluster_weights_map.end()) {
2154
- // same policy found, move from old map to new map.
2155
- new_cluster_names_info.cluster_weights_map[cluster_weights_key] =
2156
- old_cluster_weights_map_it->second;
2157
- old_cluster_weights_map.erase(old_cluster_weights_map_it);
2158
- // This action has been added to new map, so no need to process it
2159
- // again.
2160
- action_it = actions_to_process.erase(action_it);
2161
- continue;
2162
- }
2163
- }
2164
- ++action_it;
2165
- }
2166
- // Second pass of all remaining unique WeightedCluster actions: if clusters
2167
- // for a new action are the same as an old unused action, reuse the name. If
2168
- // clusters differ, use a brand new name.
2169
- for (const auto& action : actions_to_process) {
2170
- const std::string& cluster_names_key = action.second;
2171
- const std::string& cluster_weights_key = action.first;
2172
- auto& new_cluster_names_info =
2173
- new_weighted_cluster_index_map[cluster_names_key];
2174
- auto& old_cluster_weights_map =
2175
- weighted_cluster_index_map_[cluster_names_key].cluster_weights_map;
2176
- auto old_cluster_weights_it = old_cluster_weights_map.begin();
2177
- if (old_cluster_weights_it != old_cluster_weights_map.end()) {
2178
- // There is something to reuse: this action uses the same set
2179
- // of clusters as a previous action and that action name is not
2180
- // already taken.
2181
- new_cluster_names_info.cluster_weights_map[cluster_weights_key] =
2182
- old_cluster_weights_it->second;
2183
- // Remove the name from being able to reuse again.
2184
- old_cluster_weights_map.erase(old_cluster_weights_it);
2185
- } else {
2186
- // There is nothing to reuse, take the next index to use and
2187
- // increment.
2188
- new_cluster_names_info.cluster_weights_map[cluster_weights_key] =
2189
- new_cluster_names_info.next_index++;
2190
- }
2191
- }
2192
- weighted_cluster_index_map_ = std::move(new_weighted_cluster_index_map);
2193
- }
2194
-
2195
- grpc_error* XdsClient::CreateServiceConfig(
2196
- const XdsApi::RdsUpdate& rds_update,
2197
- RefCountedPtr<ServiceConfig>* service_config) {
2198
- UpdateWeightedClusterIndexMap(rds_update);
2199
- std::vector<std::string> actions_vector;
2200
- std::vector<std::string> route_table;
2201
- std::set<std::string> actions_set;
2202
- for (const auto& route : rds_update.routes) {
2203
- const std::string action_name =
2204
- route.weighted_clusters.empty()
2205
- ? route.cluster_name
2206
- : WeightedClustersActionName(route.weighted_clusters);
2207
- if (actions_set.find(action_name) == actions_set.end()) {
2208
- actions_set.emplace(action_name);
2209
- actions_vector.push_back(
2210
- route.weighted_clusters.empty()
2211
- ? CreateServiceConfigActionCluster(action_name)
2212
- : CreateServiceConfigActionWeightedCluster(
2213
- action_name, route.weighted_clusters));
2214
- }
2215
- route_table.push_back(CreateServiceConfigRoute(
2216
- absl::StrFormat("%s:%s",
2217
- route.weighted_clusters.empty() ? "cds" : "weighted",
2218
- action_name),
2219
- route.service, route.method));
2220
- }
2221
- std::vector<std::string> config_parts;
2222
- config_parts.push_back(
2223
- "{\n"
2224
- " \"loadBalancingConfig\":[\n"
2225
- " { \"xds_routing_experimental\":{\n"
2226
- " \"actions\":{\n");
2227
- config_parts.push_back(absl::StrJoin(actions_vector, ",\n"));
2228
- config_parts.push_back(
2229
- " },\n"
2230
- " \"routes\":[\n");
2231
- config_parts.push_back(absl::StrJoin(route_table, ",\n"));
2232
- config_parts.push_back(
2233
- " ]\n"
2234
- " } }\n"
2235
- " ]\n"
2236
- "}");
2237
- std::string json = absl::StrJoin(config_parts, "");
2238
- grpc_error* error = GRPC_ERROR_NONE;
2239
- *service_config = ServiceConfig::Create(json.c_str(), &error);
2240
- return error;
2241
- }
2242
-
2243
1990
  XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshot(
2244
1991
  bool send_all_clusters, const std::set<std::string>& clusters) {
2245
1992
  XdsApi::ClusterLoadReportMap snapshot_map;
@@ -2309,8 +2056,8 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshot(
2309
2056
  }
2310
2057
 
2311
2058
  void XdsClient::NotifyOnError(grpc_error* error) {
2312
- if (service_config_watcher_ != nullptr) {
2313
- service_config_watcher_->OnError(GRPC_ERROR_REF(error));
2059
+ if (listener_watcher_ != nullptr) {
2060
+ listener_watcher_->OnError(GRPC_ERROR_REF(error));
2314
2061
  }
2315
2062
  for (const auto& p : cluster_map_) {
2316
2063
  const ClusterState& cluster_state = p.second;