grpc 1.30.2 → 1.32.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (674) 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/same_package_service_name.proto +27 -0
  369. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  370. data/src/ruby/spec/pb/codegen/package_option_spec.rb +20 -0
  371. data/src/ruby/spec/user_agent_spec.rb +74 -0
  372. data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
  373. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
  374. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  375. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  376. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  377. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  378. data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
  379. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  380. data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
  381. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
  382. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
  383. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
  384. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  385. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
  386. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
  387. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  388. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
  389. data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
  390. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  391. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
  392. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
  393. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  394. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
  395. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  396. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  397. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  398. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
  399. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
  400. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
  401. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
  402. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  403. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  404. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
  405. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  406. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
  407. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
  408. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  409. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  410. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  411. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
  412. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  413. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
  414. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  415. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  416. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  417. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  418. data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
  419. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  420. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  421. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  422. data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
  423. data/third_party/abseil-cpp/absl/status/status.cc +447 -0
  424. data/third_party/abseil-cpp/absl/status/status.h +428 -0
  425. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
  426. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  427. data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
  428. data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
  429. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
  430. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  431. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  432. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  433. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  434. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  435. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  436. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
  437. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  438. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  439. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
  440. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  441. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  442. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
  443. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  444. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
  445. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
  446. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  447. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  448. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  449. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  450. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  451. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  452. data/third_party/boringssl-with-bazel/err_data.c +266 -254
  453. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  454. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
  455. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
  456. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
  457. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  458. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
  459. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
  460. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  461. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  462. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  463. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  464. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
  465. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
  466. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
  467. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +159 -0
  468. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  469. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +11 -1
  470. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -1
  471. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
  472. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
  473. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
  474. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
  475. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  476. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
  477. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +456 -0
  478. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +192 -0
  479. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -15
  480. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  481. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
  482. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +0 -29
  483. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +116 -363
  484. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +7 -45
  485. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
  486. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
  487. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  488. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  489. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
  490. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
  491. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +41 -0
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +28 -9
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
  499. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
  500. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
  501. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  502. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +52 -0
  503. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
  504. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +2 -2
  505. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
  506. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +72 -23
  507. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -3
  508. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -10
  509. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +800 -715
  510. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +3 -3
  511. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -2
  512. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -2
  513. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +9 -0
  514. data/third_party/boringssl-with-bazel/src/ssl/internal.h +21 -14
  515. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -7
  516. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
  517. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +38 -0
  518. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +4 -24
  519. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
  520. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +45 -24
  521. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +34 -9
  522. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +31 -21
  523. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +17 -9
  524. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  525. data/third_party/re2/re2/bitmap256.h +117 -0
  526. data/third_party/re2/re2/bitstate.cc +385 -0
  527. data/third_party/re2/re2/compile.cc +1279 -0
  528. data/third_party/re2/re2/dfa.cc +2130 -0
  529. data/third_party/re2/re2/filtered_re2.cc +121 -0
  530. data/third_party/re2/re2/filtered_re2.h +109 -0
  531. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  532. data/third_party/re2/re2/nfa.cc +713 -0
  533. data/third_party/re2/re2/onepass.cc +623 -0
  534. data/third_party/re2/re2/parse.cc +2464 -0
  535. data/third_party/re2/re2/perl_groups.cc +119 -0
  536. data/third_party/re2/re2/pod_array.h +55 -0
  537. data/third_party/re2/re2/prefilter.cc +710 -0
  538. data/third_party/re2/re2/prefilter.h +108 -0
  539. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  540. data/third_party/re2/re2/prefilter_tree.h +139 -0
  541. data/third_party/re2/re2/prog.cc +988 -0
  542. data/third_party/re2/re2/prog.h +436 -0
  543. data/third_party/re2/re2/re2.cc +1362 -0
  544. data/third_party/re2/re2/re2.h +1002 -0
  545. data/third_party/re2/re2/regexp.cc +980 -0
  546. data/third_party/re2/re2/regexp.h +659 -0
  547. data/third_party/re2/re2/set.cc +154 -0
  548. data/third_party/re2/re2/set.h +80 -0
  549. data/third_party/re2/re2/simplify.cc +657 -0
  550. data/third_party/re2/re2/sparse_array.h +392 -0
  551. data/third_party/re2/re2/sparse_set.h +264 -0
  552. data/third_party/re2/re2/stringpiece.cc +65 -0
  553. data/third_party/re2/re2/stringpiece.h +210 -0
  554. data/third_party/re2/re2/tostring.cc +351 -0
  555. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  556. data/third_party/re2/re2/unicode_casefold.h +78 -0
  557. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  558. data/third_party/re2/re2/unicode_groups.h +67 -0
  559. data/third_party/re2/re2/walker-inl.h +246 -0
  560. data/third_party/re2/util/benchmark.h +156 -0
  561. data/third_party/re2/util/flags.h +26 -0
  562. data/third_party/re2/util/logging.h +109 -0
  563. data/third_party/re2/util/malloc_counter.h +19 -0
  564. data/third_party/re2/util/mix.h +41 -0
  565. data/third_party/re2/util/mutex.h +148 -0
  566. data/third_party/re2/util/pcre.cc +1025 -0
  567. data/third_party/re2/util/pcre.h +681 -0
  568. data/third_party/re2/util/rune.cc +260 -0
  569. data/third_party/re2/util/strutil.cc +149 -0
  570. data/third_party/re2/util/strutil.h +21 -0
  571. data/third_party/re2/util/test.h +50 -0
  572. data/third_party/re2/util/utf.h +44 -0
  573. data/third_party/re2/util/util.h +42 -0
  574. data/third_party/upb/upb/decode.c +517 -505
  575. data/third_party/upb/upb/encode.c +165 -123
  576. data/third_party/upb/upb/msg.c +130 -64
  577. data/third_party/upb/upb/msg.h +418 -14
  578. data/third_party/upb/upb/port_def.inc +35 -6
  579. data/third_party/upb/upb/port_undef.inc +8 -1
  580. data/third_party/upb/upb/table.c +53 -86
  581. data/third_party/upb/upb/table.int.h +11 -52
  582. data/third_party/upb/upb/upb.c +151 -125
  583. data/third_party/upb/upb/upb.h +91 -147
  584. data/third_party/upb/upb/upb.hpp +88 -0
  585. metadata +308 -148
  586. data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -1906
  587. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
  588. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -35
  589. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
  590. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -418
  591. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
  592. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -197
  593. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
  594. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -378
  595. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -53
  596. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
  597. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1447
  598. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
  599. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -218
  600. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  601. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -305
  602. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
  603. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -328
  604. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -78
  605. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
  606. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -897
  607. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
  608. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -322
  609. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
  610. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -72
  611. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
  612. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -642
  613. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
  614. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -673
  615. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  616. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
  617. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -518
  618. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -89
  619. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
  620. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -392
  621. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -53
  622. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
  623. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -240
  624. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
  625. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -33
  626. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
  627. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -266
  628. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
  629. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -324
  630. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -53
  631. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
  632. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -399
  633. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
  634. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -33
  635. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
  636. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -527
  637. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
  638. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -112
  639. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -53
  640. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
  641. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -199
  642. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
  643. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -33
  644. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
  645. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -3032
  646. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
  647. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -134
  648. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -53
  649. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
  650. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -725
  651. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
  652. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1132
  653. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  654. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
  655. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
  656. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -50
  657. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
  658. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -134
  659. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
  660. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -144
  661. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
  662. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  663. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
  664. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  665. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -87
  666. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -112
  667. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -62
  668. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
  669. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -249
  670. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  671. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  672. data/src/core/lib/slice/slice_hash_table.h +0 -199
  673. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
  674. 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;