grpc 1.33.0.pre1 → 1.34.0

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

Potentially problematic release.


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

Files changed (533) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +342 -134
  3. data/include/grpc/grpc.h +1 -2
  4. data/include/grpc/grpc_security.h +149 -172
  5. data/include/grpc/impl/codegen/grpc_types.h +9 -2
  6. data/include/grpc/impl/codegen/port_platform.h +22 -55
  7. data/src/core/ext/filters/client_channel/client_channel.cc +11 -34
  8. data/src/core/ext/filters/client_channel/config_selector.h +2 -3
  9. data/src/core/ext/filters/client_channel/health/health_check_client.cc +4 -1
  10. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
  11. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  12. data/src/core/ext/filters/client_channel/lb_policy.cc +5 -1
  13. data/src/core/ext/filters/client_channel/lb_policy.h +3 -3
  14. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +1 -1
  15. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +80 -71
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
  18. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +2 -2
  19. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +47 -17
  20. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +2 -2
  21. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +8 -5
  22. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -3
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +1 -1
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +16 -243
  25. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +53 -17
  26. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +809 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +20 -25
  28. data/src/core/ext/filters/client_channel/resolver.cc +3 -1
  29. data/src/core/ext/filters/client_channel/resolver.h +4 -1
  30. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +1 -1
  31. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -1
  32. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
  33. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
  34. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
  35. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +20 -0
  36. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +66 -7
  37. data/src/core/ext/filters/client_channel/resolver_registry.cc +4 -4
  38. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +13 -25
  39. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +1 -1
  40. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +2 -2
  41. data/src/core/ext/filters/client_channel/retry_throttle.h +1 -1
  42. data/src/core/ext/filters/client_channel/server_address.h +0 -4
  43. data/src/core/ext/filters/client_channel/service_config.cc +3 -1
  44. data/src/core/ext/filters/client_channel/service_config.h +1 -1
  45. data/src/core/ext/filters/client_channel/subchannel.cc +18 -15
  46. data/src/core/ext/filters/client_channel/subchannel.h +2 -2
  47. data/src/core/ext/filters/client_channel/subchannel_interface.h +7 -15
  48. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -2
  49. data/src/core/ext/filters/deadline/deadline_filter.cc +83 -77
  50. data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
  51. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -1
  52. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  53. data/src/core/ext/filters/max_age/max_age_filter.cc +1 -1
  54. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +1 -1
  55. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +17 -3
  56. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
  57. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +4 -24
  58. data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -2
  59. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  60. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -8
  61. data/src/core/ext/transport/chttp2/transport/internal.h +0 -1
  62. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
  63. data/src/core/ext/transport/chttp2/transport/writing.cc +1 -2
  64. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +38 -0
  65. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  66. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
  67. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  68. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +254 -0
  69. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  70. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
  71. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  72. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +558 -0
  73. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
  74. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
  75. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  76. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +133 -0
  77. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  78. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
  79. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  80. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
  81. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  82. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +266 -0
  83. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +125 -0
  84. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +143 -0
  85. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
  86. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
  87. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  88. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
  89. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
  90. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
  91. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  92. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
  93. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
  94. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
  95. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  96. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +228 -0
  97. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +80 -0
  98. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +46 -0
  99. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  100. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
  101. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  102. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +55 -0
  103. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  104. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +110 -0
  105. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  106. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
  107. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
  108. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
  109. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  110. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
  111. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  112. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +190 -0
  113. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +55 -0
  114. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +185 -0
  115. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  116. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +62 -0
  117. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  118. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +97 -0
  119. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
  120. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +915 -0
  121. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +280 -0
  122. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
  123. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  124. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +64 -0
  125. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  126. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +511 -0
  127. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +115 -0
  128. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +48 -0
  129. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  130. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +166 -0
  131. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
  132. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +105 -0
  133. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  134. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +249 -0
  135. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
  136. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
  137. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
  138. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
  139. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  140. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +152 -0
  141. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +60 -0
  142. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +83 -0
  143. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
  144. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +82 -0
  145. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
  146. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +83 -0
  147. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  148. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +86 -0
  149. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
  150. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
  151. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
  152. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
  153. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  154. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
  155. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  156. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
  157. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  158. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +73 -0
  159. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  160. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +72 -0
  161. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  162. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
  163. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  164. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
  165. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  166. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
  167. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  168. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
  169. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +30 -0
  170. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
  171. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  172. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
  173. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  174. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
  175. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  176. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  177. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  178. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
  179. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  180. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +38 -0
  181. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  182. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
  183. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  184. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +39 -0
  185. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  186. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
  187. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  188. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
  189. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  190. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +39 -0
  191. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  192. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
  193. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  194. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
  195. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  196. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
  197. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  198. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
  199. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  200. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
  201. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  202. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
  203. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  204. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
  205. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  206. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +42 -0
  207. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +35 -0
  208. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +62 -0
  209. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +40 -0
  210. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +45 -0
  211. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +40 -0
  212. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +49 -0
  213. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +35 -0
  214. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +68 -0
  215. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +40 -0
  216. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +51 -0
  217. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +35 -0
  218. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +307 -0
  219. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  220. data/src/core/ext/xds/certificate_provider_factory.h +7 -5
  221. data/src/core/ext/xds/certificate_provider_store.cc +84 -0
  222. data/src/core/ext/xds/certificate_provider_store.h +65 -8
  223. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +119 -0
  224. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +72 -0
  225. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +28 -140
  226. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +6 -4
  227. data/src/core/ext/xds/xds_api.cc +241 -718
  228. data/src/core/ext/xds/xds_api.h +50 -9
  229. data/src/core/ext/xds/xds_bootstrap.cc +172 -25
  230. data/src/core/ext/xds/xds_bootstrap.h +23 -7
  231. data/src/core/ext/xds/xds_certificate_provider.cc +240 -0
  232. data/src/core/ext/xds/xds_certificate_provider.h +74 -0
  233. data/src/core/ext/xds/xds_client.cc +161 -128
  234. data/src/core/ext/xds/xds_client.h +12 -11
  235. data/src/core/ext/xds/xds_client_stats.cc +41 -4
  236. data/src/core/ext/xds/xds_client_stats.h +2 -2
  237. data/src/core/lib/channel/channel_args.cc +2 -1
  238. data/src/core/lib/channel/channel_trace.cc +4 -2
  239. data/src/core/lib/channel/channelz.h +2 -2
  240. data/src/core/lib/channel/handshaker.h +2 -2
  241. data/src/core/lib/compression/compression.cc +8 -4
  242. data/src/core/lib/compression/compression_internal.cc +10 -5
  243. data/src/core/lib/compression/compression_internal.h +2 -1
  244. data/src/core/lib/compression/stream_compression_identity.cc +1 -3
  245. data/src/core/lib/debug/stats_data.cc +1 -0
  246. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  247. data/src/core/lib/gpr/log_linux.cc +17 -3
  248. data/src/core/lib/gpr/log_posix.cc +13 -1
  249. data/src/core/lib/gpr/log_windows.cc +16 -4
  250. data/src/core/lib/gpr/murmur_hash.cc +1 -1
  251. data/src/core/lib/gpr/string.cc +1 -1
  252. data/src/core/lib/gpr/time_precise.cc +3 -2
  253. data/src/core/lib/gpr/tls.h +4 -0
  254. data/src/core/lib/gpr/tls_msvc.h +2 -0
  255. data/src/core/lib/gpr/tls_stdcpp.h +48 -0
  256. data/src/core/lib/gpr/useful.h +5 -4
  257. data/src/core/lib/gprpp/dual_ref_counted.h +44 -49
  258. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  259. data/src/core/lib/gprpp/examine_stack.h +46 -0
  260. data/src/core/lib/gprpp/fork.cc +2 -2
  261. data/src/core/lib/gprpp/manual_constructor.h +1 -1
  262. data/src/core/lib/gprpp/orphanable.h +4 -8
  263. data/src/core/lib/gprpp/ref_counted.h +40 -46
  264. data/src/core/lib/gprpp/ref_counted_ptr.h +9 -11
  265. data/src/core/lib/{security/authorization/mock_cel/statusor.h → gprpp/stat.h} +13 -25
  266. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  267. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  268. data/src/core/lib/gprpp/thd.h +2 -2
  269. data/src/core/lib/gprpp/thd_posix.cc +36 -36
  270. data/src/core/lib/http/parser.cc +46 -25
  271. data/src/core/lib/iomgr/error.cc +2 -1
  272. data/src/core/lib/iomgr/ev_epollex_linux.cc +8 -4
  273. data/src/core/lib/iomgr/exec_ctx.cc +1 -1
  274. data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
  275. data/src/core/lib/iomgr/executor/threadpool.h +3 -3
  276. data/src/core/lib/iomgr/parse_address.cc +84 -6
  277. data/src/core/lib/iomgr/parse_address.h +20 -0
  278. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
  279. data/src/core/lib/iomgr/python_util.h +3 -3
  280. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -5
  281. data/src/core/lib/iomgr/tcp_posix.cc +3 -2
  282. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  283. data/src/core/lib/iomgr/unix_sockets_posix.cc +27 -15
  284. data/src/core/lib/iomgr/unix_sockets_posix.h +5 -0
  285. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +7 -0
  286. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  287. data/src/core/lib/json/json.h +2 -2
  288. data/src/core/lib/json/json_reader.cc +8 -4
  289. data/src/core/lib/json/json_util.h +167 -0
  290. data/src/core/lib/json/json_writer.cc +2 -1
  291. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +3 -1
  292. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +5 -4
  293. data/src/core/lib/security/authorization/mock_cel/cel_value.h +4 -0
  294. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +6 -6
  295. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +10 -9
  296. data/src/core/lib/security/context/security_context.h +3 -1
  297. data/src/core/lib/security/credentials/credentials.cc +1 -1
  298. data/src/core/lib/security/credentials/credentials.h +3 -3
  299. data/src/core/lib/security/credentials/external/aws_request_signer.cc +208 -0
  300. data/src/core/lib/security/credentials/external/aws_request_signer.h +73 -0
  301. data/src/core/lib/security/credentials/external/external_account_credentials.cc +311 -0
  302. data/src/core/lib/security/credentials/external/external_account_credentials.h +118 -0
  303. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +136 -0
  304. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +49 -0
  305. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +211 -0
  306. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +59 -0
  307. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +51 -0
  308. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  309. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
  310. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -1
  311. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +2 -2
  312. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +35 -5
  313. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +12 -8
  314. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +78 -0
  315. data/src/core/lib/security/{certificate_provider.h → credentials/tls/grpc_tls_certificate_provider.h} +32 -18
  316. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +77 -149
  317. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +58 -187
  318. data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -12
  319. data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
  320. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
  321. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +88 -0
  322. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +70 -0
  323. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  324. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  325. data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
  326. data/src/core/lib/security/security_connector/security_connector.cc +1 -1
  327. data/src/core/lib/security/security_connector/security_connector.h +4 -2
  328. data/src/core/lib/security/security_connector/ssl_utils.h +4 -2
  329. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +293 -275
  330. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +106 -61
  331. data/src/core/lib/security/transport/security_handshaker.cc +1 -1
  332. data/src/core/lib/security/transport/server_auth_filter.cc +2 -1
  333. data/src/core/lib/security/util/json_util.h +1 -0
  334. data/src/core/lib/slice/slice.cc +7 -4
  335. data/src/core/lib/slice/slice_buffer.cc +2 -1
  336. data/src/core/lib/slice/slice_intern.cc +2 -2
  337. data/src/core/lib/surface/call.cc +9 -8
  338. data/src/core/lib/surface/completion_queue.cc +7 -6
  339. data/src/core/lib/surface/server.cc +4 -2
  340. data/src/core/lib/surface/server.h +2 -2
  341. data/src/core/lib/surface/validate_metadata.h +3 -0
  342. data/src/core/lib/surface/version.cc +2 -2
  343. data/src/core/lib/transport/authority_override.h +2 -0
  344. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  345. data/src/core/lib/transport/byte_stream.h +3 -3
  346. data/src/core/lib/transport/connectivity_state.h +3 -3
  347. data/src/core/lib/transport/metadata.h +2 -2
  348. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  349. data/src/core/lib/transport/transport.cc +5 -3
  350. data/src/core/lib/transport/transport.h +1 -1
  351. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -4
  352. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -3
  353. data/src/core/tsi/fake_transport_security.cc +1 -0
  354. data/src/core/tsi/local_transport_security.cc +5 -1
  355. data/src/core/tsi/local_transport_security.h +6 -7
  356. data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -0
  357. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -1
  358. data/src/core/tsi/ssl_transport_security.cc +14 -7
  359. data/src/core/tsi/ssl_transport_security.h +3 -0
  360. data/src/core/tsi/transport_security.cc +4 -2
  361. data/src/ruby/ext/grpc/extconf.rb +1 -1
  362. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +22 -14
  363. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -24
  364. data/src/ruby/lib/grpc/version.rb +1 -1
  365. data/third_party/abseil-cpp/absl/algorithm/container.h +59 -22
  366. data/third_party/abseil-cpp/absl/base/attributes.h +99 -38
  367. data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
  368. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  369. data/third_party/abseil-cpp/absl/base/config.h +60 -17
  370. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +428 -335
  371. data/third_party/abseil-cpp/absl/base/internal/bits.h +17 -16
  372. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -0
  373. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  374. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  375. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +1 -1
  376. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +29 -1
  377. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +2 -2
  378. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +7 -5
  379. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +25 -38
  380. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +19 -25
  381. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +8 -0
  382. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
  383. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  384. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  385. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +2 -2
  386. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
  387. data/third_party/abseil-cpp/absl/base/macros.h +36 -109
  388. data/third_party/abseil-cpp/absl/base/optimization.h +61 -1
  389. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  390. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  391. data/third_party/abseil-cpp/absl/base/thread_annotations.h +94 -39
  392. data/third_party/abseil-cpp/absl/container/fixed_array.h +42 -25
  393. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +2 -1
  394. data/third_party/abseil-cpp/absl/container/inlined_vector.h +33 -36
  395. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -2
  396. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +33 -8
  397. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +49 -29
  398. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +15 -0
  399. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +24 -7
  400. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -1
  401. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +35 -11
  402. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +10 -9
  403. data/third_party/abseil-cpp/absl/container/internal/layout.h +7 -5
  404. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +55 -34
  405. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +5 -4
  406. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +66 -16
  407. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +4 -0
  408. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +13 -4
  409. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +43 -24
  410. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +12 -3
  411. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +10 -2
  412. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +22 -1
  413. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +0 -21
  414. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +12 -1
  415. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  416. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +100 -20
  417. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  418. data/third_party/abseil-cpp/absl/functional/function_ref.h +1 -1
  419. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  420. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
  421. data/third_party/abseil-cpp/absl/hash/hash.h +6 -5
  422. data/third_party/abseil-cpp/absl/hash/internal/hash.h +73 -65
  423. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  424. data/third_party/abseil-cpp/absl/meta/type_traits.h +2 -8
  425. data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
  426. data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
  427. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +51 -0
  428. data/third_party/abseil-cpp/absl/status/status.cc +4 -6
  429. data/third_party/abseil-cpp/absl/status/status.h +502 -113
  430. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +5 -10
  431. data/third_party/abseil-cpp/absl/strings/charconv.cc +2 -2
  432. data/third_party/abseil-cpp/absl/strings/cord.cc +91 -112
  433. data/third_party/abseil-cpp/absl/strings/cord.h +360 -205
  434. data/third_party/abseil-cpp/absl/strings/escaping.cc +9 -9
  435. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  436. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  437. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  438. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  439. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +45 -23
  440. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +222 -136
  441. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +136 -64
  442. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +1 -1
  443. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +14 -21
  444. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -14
  445. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
  446. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
  447. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +999 -87
  448. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +3 -3
  449. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  450. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +8 -6
  451. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +13 -11
  452. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -2
  453. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  454. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  455. data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
  456. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  457. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -0
  458. data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
  459. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
  460. data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
  461. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
  462. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +3 -3
  463. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +28 -28
  464. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +4 -16
  465. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -1
  466. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +8 -0
  467. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -2
  468. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -64
  469. data/third_party/abseil-cpp/absl/synchronization/mutex.h +15 -6
  470. data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
  471. data/third_party/abseil-cpp/absl/time/clock.cc +3 -3
  472. data/third_party/abseil-cpp/absl/time/duration.cc +90 -59
  473. data/third_party/abseil-cpp/absl/time/format.cc +43 -36
  474. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +26 -16
  475. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
  476. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
  477. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
  478. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
  479. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
  480. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
  481. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
  482. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +8 -7
  483. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -6
  484. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
  485. data/third_party/abseil-cpp/absl/time/time.h +15 -16
  486. data/third_party/abseil-cpp/absl/types/internal/variant.h +4 -4
  487. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  488. data/third_party/abseil-cpp/absl/types/span.h +49 -36
  489. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  490. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  491. data/third_party/boringssl-with-bazel/err_data.c +340 -336
  492. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  493. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +173 -35
  494. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +46 -7
  495. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +8 -2
  496. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +90 -63
  497. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +60 -60
  498. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +179 -47
  499. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +10 -0
  501. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
  502. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +14 -14
  503. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
  504. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +24 -0
  505. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +7 -5
  506. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -2
  507. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
  508. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  509. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  510. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
  511. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +55 -1
  512. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  513. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +31 -23
  514. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +435 -394
  515. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  516. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +35 -0
  517. data/third_party/boringssl-with-bazel/src/ssl/internal.h +36 -1
  518. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +42 -1
  519. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +67 -0
  520. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +11 -14
  521. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +216 -11
  522. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +53 -11
  523. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +133 -39
  524. data/third_party/upb/upb/def.c +2169 -0
  525. data/third_party/upb/upb/def.h +330 -0
  526. data/third_party/upb/upb/def.hpp +525 -0
  527. data/third_party/upb/upb/reflection.c +391 -0
  528. data/third_party/upb/upb/reflection.h +168 -0
  529. data/third_party/upb/upb/text_encode.c +398 -0
  530. data/third_party/upb/upb/text_encode.h +35 -0
  531. metadata +227 -37
  532. data/src/core/ext/filters/client_channel/lb_policy/xds/eds_drop.cc +0 -571
  533. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
@@ -0,0 +1,240 @@
1
+ //
2
+ //
3
+ // Copyright 2020 gRPC authors.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+ // You may obtain a copy of the License at
8
+ //
9
+ // http://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing, software
12
+ // distributed under the License is distributed on an "AS IS" BASIS,
13
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ // See the License for the specific language governing permissions and
15
+ // limitations under the License.
16
+ //
17
+ //
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include "absl/functional/bind_front.h"
22
+ #include "absl/strings/str_cat.h"
23
+
24
+ #include "src/core/ext/xds/xds_certificate_provider.h"
25
+
26
+ namespace grpc_core {
27
+
28
+ namespace {
29
+
30
+ class RootCertificatesWatcher
31
+ : public grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface {
32
+ public:
33
+ // Takes a ref to \a parent instead of a raw pointer since the watcher is
34
+ // owned by the root certificate distributor and not by \a parent. Note that
35
+ // presently, the watcher is immediately deleted when
36
+ // CancelTlsCertificatesWatch() is called, but that can potentially change in
37
+ // the future.
38
+ explicit RootCertificatesWatcher(
39
+ RefCountedPtr<grpc_tls_certificate_distributor> parent)
40
+ : parent_(std::move(parent)) {}
41
+
42
+ void OnCertificatesChanged(absl::optional<absl::string_view> root_certs,
43
+ absl::optional<PemKeyCertPairList>
44
+ /* key_cert_pairs */) override {
45
+ if (root_certs.has_value()) {
46
+ parent_->SetKeyMaterials("", std::string(root_certs.value()),
47
+ absl::nullopt);
48
+ }
49
+ }
50
+
51
+ void OnError(grpc_error* root_cert_error,
52
+ grpc_error* identity_cert_error) override {
53
+ if (root_cert_error != GRPC_ERROR_NONE) {
54
+ parent_->SetErrorForCert("", root_cert_error /* pass the ref */,
55
+ absl::nullopt);
56
+ }
57
+ GRPC_ERROR_UNREF(identity_cert_error);
58
+ }
59
+
60
+ private:
61
+ RefCountedPtr<grpc_tls_certificate_distributor> parent_;
62
+ };
63
+
64
+ class IdentityCertificatesWatcher
65
+ : public grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface {
66
+ public:
67
+ // Takes a ref to \a parent instead of a raw pointer since the watcher is
68
+ // owned by the root certificate distributor and not by \a parent. Note that
69
+ // presently, the watcher is immediately deleted when
70
+ // CancelTlsCertificatesWatch() is called, but that can potentially change in
71
+ // the future.
72
+ explicit IdentityCertificatesWatcher(
73
+ RefCountedPtr<grpc_tls_certificate_distributor> parent)
74
+ : parent_(std::move(parent)) {}
75
+
76
+ void OnCertificatesChanged(
77
+ absl::optional<absl::string_view> /* root_certs */,
78
+ absl::optional<PemKeyCertPairList> key_cert_pairs) override {
79
+ if (key_cert_pairs.has_value()) {
80
+ parent_->SetKeyMaterials("", absl::nullopt, key_cert_pairs);
81
+ }
82
+ }
83
+
84
+ void OnError(grpc_error* root_cert_error,
85
+ grpc_error* identity_cert_error) override {
86
+ if (identity_cert_error != GRPC_ERROR_NONE) {
87
+ parent_->SetErrorForCert("", absl::nullopt,
88
+ identity_cert_error /* pass the ref */);
89
+ }
90
+ GRPC_ERROR_UNREF(root_cert_error);
91
+ }
92
+
93
+ private:
94
+ RefCountedPtr<grpc_tls_certificate_distributor> parent_;
95
+ };
96
+
97
+ } // namespace
98
+
99
+ XdsCertificateProvider::XdsCertificateProvider(
100
+ absl::string_view root_cert_name,
101
+ RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor,
102
+ absl::string_view identity_cert_name,
103
+ RefCountedPtr<grpc_tls_certificate_distributor> identity_cert_distributor)
104
+ : root_cert_name_(root_cert_name),
105
+ identity_cert_name_(identity_cert_name),
106
+ root_cert_distributor_(std::move(root_cert_distributor)),
107
+ identity_cert_distributor_(std::move(identity_cert_distributor)),
108
+ distributor_(MakeRefCounted<grpc_tls_certificate_distributor>()) {
109
+ distributor_->SetWatchStatusCallback(
110
+ absl::bind_front(&XdsCertificateProvider::WatchStatusCallback, this));
111
+ }
112
+
113
+ void XdsCertificateProvider::UpdateRootCertNameAndDistributor(
114
+ absl::string_view root_cert_name,
115
+ RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor) {
116
+ MutexLock lock(&mu_);
117
+ root_cert_name_ = std::string(root_cert_name);
118
+ if (watching_root_certs_) {
119
+ // The root certificates are being watched. Swap out the watcher.
120
+ if (root_cert_distributor_ != nullptr) {
121
+ root_cert_distributor_->CancelTlsCertificatesWatch(root_cert_watcher_);
122
+ }
123
+ if (root_cert_distributor != nullptr) {
124
+ UpdateRootCertWatcher(root_cert_distributor.get());
125
+ } else {
126
+ root_cert_watcher_ = nullptr;
127
+ distributor_->SetErrorForCert(
128
+ "",
129
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING(
130
+ "No certificate provider available for root certificates"),
131
+ absl::nullopt);
132
+ }
133
+ }
134
+ // Swap out the root certificate distributor
135
+ root_cert_distributor_ = std::move(root_cert_distributor);
136
+ }
137
+
138
+ void XdsCertificateProvider::UpdateIdentityCertNameAndDistributor(
139
+ absl::string_view identity_cert_name,
140
+ RefCountedPtr<grpc_tls_certificate_distributor> identity_cert_distributor) {
141
+ MutexLock lock(&mu_);
142
+ identity_cert_name_ = std::string(identity_cert_name);
143
+ if (watching_identity_certs_) {
144
+ // The identity certificates are being watched. Swap out the watcher.
145
+ if (identity_cert_distributor_ != nullptr) {
146
+ identity_cert_distributor_->CancelTlsCertificatesWatch(
147
+ identity_cert_watcher_);
148
+ }
149
+ if (identity_cert_distributor != nullptr) {
150
+ UpdateIdentityCertWatcher(identity_cert_distributor.get());
151
+ } else {
152
+ identity_cert_watcher_ = nullptr;
153
+ distributor_->SetErrorForCert(
154
+ "", absl::nullopt,
155
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING(
156
+ "No certificate provider available for identity certificates"));
157
+ }
158
+ }
159
+ // Swap out the identity certificate distributor
160
+ identity_cert_distributor_ = std::move(identity_cert_distributor);
161
+ }
162
+
163
+ void XdsCertificateProvider::WatchStatusCallback(std::string cert_name,
164
+ bool root_being_watched,
165
+ bool identity_being_watched) {
166
+ // We aren't specially handling the case where root_cert_distributor is same
167
+ // as identity_cert_distributor. Always using two separate watchers
168
+ // irrespective of the fact results in a straightforward design, and using a
169
+ // single watcher does not seem to provide any benefit other than cutting down
170
+ // on the number of callbacks.
171
+ MutexLock lock(&mu_);
172
+ if (!cert_name.empty()) {
173
+ grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
174
+ absl::StrCat("Illegal certificate name: \'", cert_name,
175
+ "\'. Should be empty.")
176
+ .c_str());
177
+ distributor_->SetErrorForCert(cert_name, GRPC_ERROR_REF(error),
178
+ GRPC_ERROR_REF(error));
179
+ GRPC_ERROR_UNREF(error);
180
+ return;
181
+ }
182
+ if (root_being_watched && !watching_root_certs_) {
183
+ // We need to start watching root certs.
184
+ watching_root_certs_ = true;
185
+ if (root_cert_distributor_ == nullptr) {
186
+ distributor_->SetErrorForCert(
187
+ "",
188
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING(
189
+ "No certificate provider available for root certificates"),
190
+ absl::nullopt);
191
+ } else {
192
+ UpdateRootCertWatcher(root_cert_distributor_.get());
193
+ }
194
+ } else if (!root_being_watched && watching_root_certs_) {
195
+ // We need to cancel root certs watch.
196
+ watching_root_certs_ = false;
197
+ if (root_cert_distributor_ != nullptr) {
198
+ root_cert_distributor_->CancelTlsCertificatesWatch(root_cert_watcher_);
199
+ root_cert_watcher_ = nullptr;
200
+ }
201
+ GPR_ASSERT(root_cert_watcher_ == nullptr);
202
+ }
203
+ if (identity_being_watched && !watching_identity_certs_) {
204
+ watching_identity_certs_ = true;
205
+ if (identity_cert_distributor_ == nullptr) {
206
+ distributor_->SetErrorForCert(
207
+ "", absl::nullopt,
208
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING(
209
+ "No certificate provider available for identity certificates"));
210
+ } else {
211
+ UpdateIdentityCertWatcher(identity_cert_distributor_.get());
212
+ }
213
+ } else if (!identity_being_watched && watching_identity_certs_) {
214
+ watching_identity_certs_ = false;
215
+ if (identity_cert_distributor_ != nullptr) {
216
+ identity_cert_distributor_->CancelTlsCertificatesWatch(
217
+ identity_cert_watcher_);
218
+ identity_cert_watcher_ = nullptr;
219
+ }
220
+ GPR_ASSERT(identity_cert_watcher_ == nullptr);
221
+ }
222
+ }
223
+
224
+ void XdsCertificateProvider::UpdateRootCertWatcher(
225
+ grpc_tls_certificate_distributor* root_cert_distributor) {
226
+ auto watcher = absl::make_unique<RootCertificatesWatcher>(distributor());
227
+ root_cert_watcher_ = watcher.get();
228
+ root_cert_distributor->WatchTlsCertificates(std::move(watcher),
229
+ root_cert_name_, absl::nullopt);
230
+ }
231
+
232
+ void XdsCertificateProvider::UpdateIdentityCertWatcher(
233
+ grpc_tls_certificate_distributor* identity_cert_distributor) {
234
+ auto watcher = absl::make_unique<IdentityCertificatesWatcher>(distributor());
235
+ identity_cert_watcher_ = watcher.get();
236
+ identity_cert_distributor->WatchTlsCertificates(
237
+ std::move(watcher), absl::nullopt, identity_cert_name_);
238
+ }
239
+
240
+ } // namespace grpc_core
@@ -0,0 +1,74 @@
1
+ //
2
+ //
3
+ // Copyright 2020 gRPC authors.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+ // You may obtain a copy of the License at
8
+ //
9
+ // http://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing, software
12
+ // distributed under the License is distributed on an "AS IS" BASIS,
13
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ // See the License for the specific language governing permissions and
15
+ // limitations under the License.
16
+ //
17
+ //
18
+
19
+ #ifndef GRPC_CORE_EXT_XDS_XDS_CERTIFICATE_PROVIDER_H
20
+ #define GRPC_CORE_EXT_XDS_XDS_CERTIFICATE_PROVIDER_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include "src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h"
25
+
26
+ namespace grpc_core {
27
+
28
+ class XdsCertificateProvider : public grpc_tls_certificate_provider {
29
+ public:
30
+ XdsCertificateProvider(
31
+ absl::string_view root_cert_name,
32
+ RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor,
33
+ absl::string_view identity_cert_name,
34
+ RefCountedPtr<grpc_tls_certificate_distributor>
35
+ identity_cert_distributor);
36
+
37
+ void UpdateRootCertNameAndDistributor(
38
+ absl::string_view root_cert_name,
39
+ RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor);
40
+ void UpdateIdentityCertNameAndDistributor(
41
+ absl::string_view identity_cert_name,
42
+ RefCountedPtr<grpc_tls_certificate_distributor>
43
+ identity_cert_distributor);
44
+
45
+ grpc_core::RefCountedPtr<grpc_tls_certificate_distributor> distributor()
46
+ const override {
47
+ return distributor_;
48
+ }
49
+
50
+ private:
51
+ void WatchStatusCallback(std::string cert_name, bool root_being_watched,
52
+ bool identity_being_watched);
53
+ void UpdateRootCertWatcher(
54
+ grpc_tls_certificate_distributor* root_cert_distributor);
55
+ void UpdateIdentityCertWatcher(
56
+ grpc_tls_certificate_distributor* identity_cert_distributor);
57
+
58
+ Mutex mu_;
59
+ bool watching_root_certs_ = false;
60
+ bool watching_identity_certs_ = false;
61
+ std::string root_cert_name_;
62
+ std::string identity_cert_name_;
63
+ RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor_;
64
+ RefCountedPtr<grpc_tls_certificate_distributor> identity_cert_distributor_;
65
+ RefCountedPtr<grpc_tls_certificate_distributor> distributor_;
66
+ grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface*
67
+ root_cert_watcher_ = nullptr;
68
+ grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface*
69
+ identity_cert_watcher_ = nullptr;
70
+ };
71
+
72
+ } // namespace grpc_core
73
+
74
+ #endif // GRPC_CORE_EXT_XDS_XDS_CERTIFICATE_PROVIDER_H
@@ -50,8 +50,6 @@
50
50
  #include "src/core/lib/iomgr/sockaddr.h"
51
51
  #include "src/core/lib/iomgr/sockaddr_utils.h"
52
52
  #include "src/core/lib/iomgr/timer.h"
53
- #include "src/core/lib/security/credentials/credentials.h"
54
- #include "src/core/lib/security/credentials/fake/fake_credentials.h"
55
53
  #include "src/core/lib/slice/slice_internal.h"
56
54
  #include "src/core/lib/slice/slice_string_helpers.h"
57
55
  #include "src/core/lib/surface/call.h"
@@ -143,8 +141,11 @@ class XdsClient::ChannelState::AdsCallState
143
141
  private:
144
142
  class ResourceState : public InternallyRefCounted<ResourceState> {
145
143
  public:
146
- ResourceState(const std::string& type_url, const std::string& name)
147
- : type_url_(type_url), name_(name) {
144
+ ResourceState(const std::string& type_url, const std::string& name,
145
+ bool sent_initial_request)
146
+ : type_url_(type_url),
147
+ name_(name),
148
+ sent_initial_request_(sent_initial_request) {
148
149
  GRPC_CLOSURE_INIT(&timer_callback_, OnTimer, this,
149
150
  grpc_schedule_on_exec_ctx);
150
151
  }
@@ -155,8 +156,8 @@ class XdsClient::ChannelState::AdsCallState
155
156
  }
156
157
 
157
158
  void Start(RefCountedPtr<AdsCallState> ads_calld) {
158
- if (sent_) return;
159
- sent_ = true;
159
+ if (sent_initial_request_) return;
160
+ sent_initial_request_ = true;
160
161
  ads_calld_ = std::move(ads_calld);
161
162
  Ref(DEBUG_LOCATION, "timer").release();
162
163
  timer_pending_ = true;
@@ -229,7 +230,7 @@ class XdsClient::ChannelState::AdsCallState
229
230
  const std::string name_;
230
231
 
231
232
  RefCountedPtr<AdsCallState> ads_calld_;
232
- bool sent_ = false;
233
+ bool sent_initial_request_;
233
234
  bool timer_pending_ = false;
234
235
  grpc_timer timer_;
235
236
  grpc_closure timer_callback_;
@@ -238,8 +239,7 @@ class XdsClient::ChannelState::AdsCallState
238
239
  struct ResourceTypeState {
239
240
  ~ResourceTypeState() { GRPC_ERROR_UNREF(error); }
240
241
 
241
- // Version, nonce, and error for this resource type.
242
- std::string version;
242
+ // Nonce and error for this resource type.
243
243
  std::string nonce;
244
244
  grpc_error* error = GRPC_ERROR_NONE;
245
245
 
@@ -336,7 +336,7 @@ class XdsClient::ChannelState::LrsCallState
336
336
  void ScheduleNextReportLocked();
337
337
  static void OnNextReportTimer(void* arg, grpc_error* error);
338
338
  bool OnNextReportTimerLocked(grpc_error* error);
339
- void SendReportLocked();
339
+ bool SendReportLocked();
340
340
  static void OnReportDone(void* arg, grpc_error* error);
341
341
  bool OnReportDoneLocked(grpc_error* error);
342
342
 
@@ -431,11 +431,44 @@ class XdsClient::ChannelState::StateWatcher
431
431
  // XdsClient::ChannelState
432
432
  //
433
433
 
434
+ namespace {
435
+
436
+ grpc_channel* CreateXdsChannel(const XdsBootstrap::XdsServer& server) {
437
+ // Build channel args.
438
+ absl::InlinedVector<grpc_arg, 2> args_to_add = {
439
+ grpc_channel_arg_integer_create(
440
+ const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS),
441
+ 5 * 60 * GPR_MS_PER_SEC),
442
+ grpc_channel_arg_integer_create(
443
+ const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
444
+ };
445
+ grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
446
+ g_channel_args, args_to_add.data(), args_to_add.size());
447
+ // Create channel creds.
448
+ RefCountedPtr<grpc_channel_credentials> channel_creds =
449
+ XdsChannelCredsRegistry::MakeChannelCreds(server.channel_creds_type,
450
+ server.channel_creds_config);
451
+ // Create channel.
452
+ grpc_channel* channel = grpc_secure_channel_create(
453
+ channel_creds.get(), server.server_uri.c_str(), new_args, nullptr);
454
+ grpc_channel_args_destroy(new_args);
455
+ return channel;
456
+ }
457
+
458
+ } // namespace
459
+
434
460
  XdsClient::ChannelState::ChannelState(WeakRefCountedPtr<XdsClient> xds_client,
435
- grpc_channel* channel)
436
- : InternallyRefCounted<ChannelState>(&grpc_xds_client_trace),
461
+ const XdsBootstrap::XdsServer& server)
462
+ : InternallyRefCounted<ChannelState>(
463
+ GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace) ? "ChannelState"
464
+ : nullptr),
437
465
  xds_client_(std::move(xds_client)),
438
- channel_(channel) {
466
+ server_(server) {
467
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
468
+ gpr_log(GPR_INFO, "[xds_client %p] creating channel to %s",
469
+ xds_client_.get(), server.server_uri.c_str());
470
+ }
471
+ channel_ = CreateXdsChannel(server);
439
472
  GPR_ASSERT(channel_ != nullptr);
440
473
  StartConnectivityWatchLocked();
441
474
  }
@@ -634,7 +667,9 @@ void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimerLocked(
634
667
 
635
668
  XdsClient::ChannelState::AdsCallState::AdsCallState(
636
669
  RefCountedPtr<RetryableCall<AdsCallState>> parent)
637
- : InternallyRefCounted<AdsCallState>(&grpc_xds_client_trace),
670
+ : InternallyRefCounted<AdsCallState>(
671
+ GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace) ? "AdsCallState"
672
+ : nullptr),
638
673
  parent_(std::move(parent)) {
639
674
  // Init the ADS call. Note that the call will progress every time there's
640
675
  // activity in xds_client()->interested_parties_, which is comprised of
@@ -642,7 +677,7 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
642
677
  GPR_ASSERT(xds_client() != nullptr);
643
678
  // Create a call with the specified method name.
644
679
  const auto& method =
645
- xds_client()->bootstrap_->server().ShouldUseV3()
680
+ chand()->server_.ShouldUseV3()
646
681
  ? GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_DISCOVERY_DOT_V3_DOT_AGGREGATEDDISCOVERYSERVICE_SLASH_STREAMAGGREGATEDRESOURCES
647
682
  : GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_DISCOVERY_DOT_V2_DOT_AGGREGATEDDISCOVERYSERVICE_SLASH_STREAMAGGREGATEDRESOURCES;
648
683
  call_ = grpc_channel_create_pollset_set_call(
@@ -763,7 +798,8 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
763
798
  std::set<absl::string_view> resource_names =
764
799
  ResourceNamesForRequest(type_url);
765
800
  request_payload_slice = xds_client()->api_.CreateAdsRequest(
766
- type_url, resource_names, state.version, state.nonce,
801
+ chand()->server_, type_url, resource_names,
802
+ xds_client()->resource_version_map_[type_url], state.nonce,
767
803
  GRPC_ERROR_REF(state.error), !sent_initial_message_);
768
804
  if (type_url != XdsApi::kLdsTypeUrl && type_url != XdsApi::kRdsTypeUrl &&
769
805
  type_url != XdsApi::kCdsTypeUrl && type_url != XdsApi::kEdsTypeUrl) {
@@ -774,7 +810,8 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
774
810
  gpr_log(GPR_INFO,
775
811
  "[xds_client %p] sending ADS request: type=%s version=%s nonce=%s "
776
812
  "error=%s resources=%s",
777
- xds_client(), type_url.c_str(), state.version.c_str(),
813
+ xds_client(), type_url.c_str(),
814
+ xds_client()->resource_version_map_[type_url].c_str(),
778
815
  state.nonce.c_str(), grpc_error_string(state.error),
779
816
  absl::StrJoin(resource_names, " ").c_str());
780
817
  }
@@ -806,7 +843,8 @@ void XdsClient::ChannelState::AdsCallState::Subscribe(
806
843
  const std::string& type_url, const std::string& name) {
807
844
  auto& state = state_map_[type_url].subscribed_resources[name];
808
845
  if (state == nullptr) {
809
- state = MakeOrphanable<ResourceState>(type_url, name);
846
+ state = MakeOrphanable<ResourceState>(
847
+ type_url, name, !xds_client()->resource_version_map_[type_url].empty());
810
848
  SendMessageLocked(type_url);
811
849
  }
812
850
  }
@@ -1170,7 +1208,8 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
1170
1208
  } else if (result.type_url == XdsApi::kEdsTypeUrl) {
1171
1209
  AcceptEdsUpdate(std::move(result.eds_update_map));
1172
1210
  }
1173
- state.version = std::move(result.version);
1211
+ xds_client()->resource_version_map_[result.type_url] =
1212
+ std::move(result.version);
1174
1213
  // ACK the update.
1175
1214
  SendMessageLocked(result.type_url);
1176
1215
  // Start load reporting if needed.
@@ -1287,8 +1326,7 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimerLocked(
1287
1326
  GRPC_ERROR_UNREF(error);
1288
1327
  return true;
1289
1328
  }
1290
- SendReportLocked();
1291
- return false;
1329
+ return SendReportLocked();
1292
1330
  }
1293
1331
 
1294
1332
  namespace {
@@ -1307,7 +1345,7 @@ bool LoadReportCountersAreZero(const XdsApi::ClusterLoadReportMap& snapshot) {
1307
1345
 
1308
1346
  } // namespace
1309
1347
 
1310
- void XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
1348
+ bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
1311
1349
  // Construct snapshot from all reported stats.
1312
1350
  XdsApi::ClusterLoadReportMap snapshot =
1313
1351
  xds_client()->BuildLoadReportSnapshotLocked(parent_->send_all_clusters_,
@@ -1317,8 +1355,12 @@ void XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
1317
1355
  const bool old_val = last_report_counters_were_zero_;
1318
1356
  last_report_counters_were_zero_ = LoadReportCountersAreZero(snapshot);
1319
1357
  if (old_val && last_report_counters_were_zero_) {
1358
+ if (xds_client()->load_report_map_.empty()) {
1359
+ parent_->chand()->StopLrsCall();
1360
+ return true;
1361
+ }
1320
1362
  ScheduleNextReportLocked();
1321
- return;
1363
+ return false;
1322
1364
  }
1323
1365
  // Create a request that contains the snapshot.
1324
1366
  grpc_slice request_payload_slice =
@@ -1339,6 +1381,7 @@ void XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
1339
1381
  xds_client(), this, call_error);
1340
1382
  GPR_ASSERT(GRPC_CALL_OK == call_error);
1341
1383
  }
1384
+ return false;
1342
1385
  }
1343
1386
 
1344
1387
  void XdsClient::ChannelState::LrsCallState::Reporter::OnReportDone(
@@ -1381,14 +1424,16 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked(
1381
1424
 
1382
1425
  XdsClient::ChannelState::LrsCallState::LrsCallState(
1383
1426
  RefCountedPtr<RetryableCall<LrsCallState>> parent)
1384
- : InternallyRefCounted<LrsCallState>(&grpc_xds_client_trace),
1427
+ : InternallyRefCounted<LrsCallState>(
1428
+ GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace) ? "LrsCallState"
1429
+ : nullptr),
1385
1430
  parent_(std::move(parent)) {
1386
1431
  // Init the LRS call. Note that the call will progress every time there's
1387
1432
  // activity in xds_client()->interested_parties_, which is comprised of
1388
1433
  // the polling entities from client_channel.
1389
1434
  GPR_ASSERT(xds_client() != nullptr);
1390
1435
  const auto& method =
1391
- xds_client()->bootstrap_->server().ShouldUseV3()
1436
+ chand()->server_.ShouldUseV3()
1392
1437
  ? GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_LOAD_STATS_DOT_V3_DOT_LOADREPORTINGSERVICE_SLASH_STREAMLOADSTATS
1393
1438
  : GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_LOAD_STATS_DOT_V2_DOT_LOADREPORTINGSERVICE_SLASH_STREAMLOADSTATS;
1394
1439
  call_ = grpc_channel_create_pollset_set_call(
@@ -1398,7 +1443,7 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
1398
1443
  GPR_ASSERT(call_ != nullptr);
1399
1444
  // Init the request payload.
1400
1445
  grpc_slice request_payload_slice =
1401
- xds_client()->api_.CreateLrsInitialRequest();
1446
+ xds_client()->api_.CreateLrsInitialRequest(chand()->server_);
1402
1447
  send_message_payload_ =
1403
1448
  grpc_raw_byte_buffer_create(&request_payload_slice, 1);
1404
1449
  grpc_slice_unref_internal(request_payload_slice);
@@ -1689,56 +1734,18 @@ grpc_millis GetRequestTimeout() {
1689
1734
  {15000, 0, INT_MAX});
1690
1735
  }
1691
1736
 
1692
- grpc_channel* CreateXdsChannel(const XdsBootstrap& bootstrap,
1693
- grpc_error** error) {
1694
- // Build channel args.
1695
- absl::InlinedVector<grpc_arg, 2> args_to_add = {
1696
- grpc_channel_arg_integer_create(
1697
- const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS),
1698
- 5 * 60 * GPR_MS_PER_SEC),
1699
- grpc_channel_arg_integer_create(
1700
- const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
1701
- };
1702
- grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
1703
- g_channel_args, args_to_add.data(), args_to_add.size());
1704
- // Find credentials and create channel.
1705
- RefCountedPtr<grpc_channel_credentials> creds;
1706
- for (const auto& channel_creds : bootstrap.server().channel_creds) {
1707
- if (channel_creds.type == "google_default") {
1708
- creds.reset(grpc_google_default_credentials_create(nullptr));
1709
- break;
1710
- }
1711
- if (channel_creds.type == "insecure") {
1712
- grpc_channel* channel = grpc_insecure_channel_create(
1713
- bootstrap.server().server_uri.c_str(), new_args, nullptr);
1714
- grpc_channel_args_destroy(new_args);
1715
- return channel;
1716
- }
1717
- if (channel_creds.type == "fake") {
1718
- creds.reset(grpc_fake_transport_security_credentials_create());
1719
- break;
1720
- }
1721
- }
1722
- if (creds == nullptr) {
1723
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1724
- "no supported credential types found");
1725
- return nullptr;
1726
- }
1727
- grpc_channel* channel = grpc_secure_channel_create(
1728
- creds.get(), bootstrap.server().server_uri.c_str(), new_args, nullptr);
1729
- grpc_channel_args_destroy(new_args);
1730
- return channel;
1731
- }
1732
-
1733
1737
  } // namespace
1734
1738
 
1735
1739
  XdsClient::XdsClient(grpc_error** error)
1736
- : DualRefCounted<XdsClient>(&grpc_xds_client_trace),
1740
+ : DualRefCounted<XdsClient>(GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)
1741
+ ? "XdsClient"
1742
+ : nullptr),
1737
1743
  request_timeout_(GetRequestTimeout()),
1738
1744
  interested_parties_(grpc_pollset_set_create()),
1739
1745
  bootstrap_(
1740
1746
  XdsBootstrap::ReadFromFile(this, &grpc_xds_client_trace, error)),
1741
- api_(this, &grpc_xds_client_trace, bootstrap_.get()) {
1747
+ api_(this, &grpc_xds_client_trace,
1748
+ bootstrap_ == nullptr ? nullptr : bootstrap_->node()) {
1742
1749
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1743
1750
  gpr_log(GPR_INFO, "[xds_client %p] creating xds client", this);
1744
1751
  }
@@ -1747,19 +1754,9 @@ XdsClient::XdsClient(grpc_error** error)
1747
1754
  this, grpc_error_string(*error));
1748
1755
  return;
1749
1756
  }
1750
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1751
- gpr_log(GPR_INFO, "[xds_client %p] creating channel to %s", this,
1752
- bootstrap_->server().server_uri.c_str());
1753
- }
1754
- grpc_channel* channel = CreateXdsChannel(*bootstrap_, error);
1755
- if (*error != GRPC_ERROR_NONE) {
1756
- gpr_log(GPR_ERROR, "[xds_client %p] failed to create xds channel: %s", this,
1757
- grpc_error_string(*error));
1758
- return;
1759
- }
1760
1757
  // Create ChannelState object.
1761
1758
  chand_ = MakeOrphanable<ChannelState>(
1762
- WeakRef(DEBUG_LOCATION, "XdsClient+ChannelState"), channel);
1759
+ WeakRef(DEBUG_LOCATION, "XdsClient+ChannelState"), bootstrap_->server());
1763
1760
  }
1764
1761
 
1765
1762
  XdsClient::~XdsClient() {
@@ -1982,10 +1979,22 @@ RefCountedPtr<XdsClusterDropStats> XdsClient::AddClusterDropStats(
1982
1979
  auto it = load_report_map_
1983
1980
  .emplace(std::make_pair(std::move(key), LoadReportState()))
1984
1981
  .first;
1985
- auto cluster_drop_stats = MakeRefCounted<XdsClusterDropStats>(
1986
- Ref(DEBUG_LOCATION, "DropStats"), lrs_server,
1987
- it->first.first /*cluster_name*/, it->first.second /*eds_service_name*/);
1988
- it->second.drop_stats.insert(cluster_drop_stats.get());
1982
+ LoadReportState& load_report_state = it->second;
1983
+ RefCountedPtr<XdsClusterDropStats> cluster_drop_stats;
1984
+ if (load_report_state.drop_stats != nullptr) {
1985
+ cluster_drop_stats = load_report_state.drop_stats->RefIfNonZero();
1986
+ }
1987
+ if (cluster_drop_stats == nullptr) {
1988
+ if (load_report_state.drop_stats != nullptr) {
1989
+ load_report_state.deleted_drop_stats +=
1990
+ load_report_state.drop_stats->GetSnapshotAndReset();
1991
+ }
1992
+ cluster_drop_stats = MakeRefCounted<XdsClusterDropStats>(
1993
+ Ref(DEBUG_LOCATION, "DropStats"), lrs_server,
1994
+ it->first.first /*cluster_name*/,
1995
+ it->first.second /*eds_service_name*/);
1996
+ load_report_state.drop_stats = cluster_drop_stats.get();
1997
+ }
1989
1998
  chand_->MaybeStartLrsCall();
1990
1999
  return cluster_drop_stats;
1991
2000
  }
@@ -1995,19 +2004,18 @@ void XdsClient::RemoveClusterDropStats(
1995
2004
  absl::string_view eds_service_name,
1996
2005
  XdsClusterDropStats* cluster_drop_stats) {
1997
2006
  MutexLock lock(&mu_);
1998
- auto load_report_it = load_report_map_.find(
1999
- std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
2000
- if (load_report_it == load_report_map_.end()) return;
2001
- LoadReportState& load_report_state = load_report_it->second;
2002
2007
  // TODO(roth): When we add support for direct federation, use the
2003
2008
  // server name specified in lrs_server.
2004
- auto it = load_report_state.drop_stats.find(cluster_drop_stats);
2005
- if (it != load_report_state.drop_stats.end()) {
2006
- // Record final drop stats in deleted_drop_stats, which will be
2009
+ auto it = load_report_map_.find(
2010
+ std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
2011
+ if (it == load_report_map_.end()) return;
2012
+ LoadReportState& load_report_state = it->second;
2013
+ if (load_report_state.drop_stats == cluster_drop_stats) {
2014
+ // Record final snapshot in deleted_drop_stats, which will be
2007
2015
  // added to the next load report.
2008
- auto dropped_requests = cluster_drop_stats->GetSnapshotAndReset();
2009
- load_report_state.deleted_drop_stats += dropped_requests;
2010
- load_report_state.drop_stats.erase(it);
2016
+ load_report_state.deleted_drop_stats +=
2017
+ load_report_state.drop_stats->GetSnapshotAndReset();
2018
+ load_report_state.drop_stats = nullptr;
2011
2019
  }
2012
2020
  }
2013
2021
 
@@ -2026,12 +2034,24 @@ RefCountedPtr<XdsClusterLocalityStats> XdsClient::AddClusterLocalityStats(
2026
2034
  auto it = load_report_map_
2027
2035
  .emplace(std::make_pair(std::move(key), LoadReportState()))
2028
2036
  .first;
2029
- auto cluster_locality_stats = MakeRefCounted<XdsClusterLocalityStats>(
2030
- Ref(DEBUG_LOCATION, "LocalityStats"), lrs_server,
2031
- it->first.first /*cluster_name*/, it->first.second /*eds_service_name*/,
2032
- locality);
2033
- it->second.locality_stats[std::move(locality)].locality_stats.insert(
2034
- cluster_locality_stats.get());
2037
+ LoadReportState& load_report_state = it->second;
2038
+ LoadReportState::LocalityState& locality_state =
2039
+ load_report_state.locality_stats[locality];
2040
+ RefCountedPtr<XdsClusterLocalityStats> cluster_locality_stats;
2041
+ if (locality_state.locality_stats != nullptr) {
2042
+ cluster_locality_stats = locality_state.locality_stats->RefIfNonZero();
2043
+ }
2044
+ if (cluster_locality_stats == nullptr) {
2045
+ if (locality_state.locality_stats != nullptr) {
2046
+ locality_state.deleted_locality_stats +=
2047
+ locality_state.locality_stats->GetSnapshotAndReset();
2048
+ }
2049
+ cluster_locality_stats = MakeRefCounted<XdsClusterLocalityStats>(
2050
+ Ref(DEBUG_LOCATION, "LocalityStats"), lrs_server,
2051
+ it->first.first /*cluster_name*/, it->first.second /*eds_service_name*/,
2052
+ std::move(locality));
2053
+ locality_state.locality_stats = cluster_locality_stats.get();
2054
+ }
2035
2055
  chand_->MaybeStartLrsCall();
2036
2056
  return cluster_locality_stats;
2037
2057
  }
@@ -2042,22 +2062,21 @@ void XdsClient::RemoveClusterLocalityStats(
2042
2062
  const RefCountedPtr<XdsLocalityName>& locality,
2043
2063
  XdsClusterLocalityStats* cluster_locality_stats) {
2044
2064
  MutexLock lock(&mu_);
2045
- auto load_report_it = load_report_map_.find(
2046
- std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
2047
- if (load_report_it == load_report_map_.end()) return;
2048
- LoadReportState& load_report_state = load_report_it->second;
2049
2065
  // TODO(roth): When we add support for direct federation, use the
2050
2066
  // server name specified in lrs_server.
2067
+ auto it = load_report_map_.find(
2068
+ std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
2069
+ if (it == load_report_map_.end()) return;
2070
+ LoadReportState& load_report_state = it->second;
2051
2071
  auto locality_it = load_report_state.locality_stats.find(locality);
2052
2072
  if (locality_it == load_report_state.locality_stats.end()) return;
2053
- auto& locality_set = locality_it->second.locality_stats;
2054
- auto it = locality_set.find(cluster_locality_stats);
2055
- if (it != locality_set.end()) {
2073
+ LoadReportState::LocalityState& locality_state = locality_it->second;
2074
+ if (locality_state.locality_stats == cluster_locality_stats) {
2056
2075
  // Record final snapshot in deleted_locality_stats, which will be
2057
2076
  // added to the next load report.
2058
- locality_it->second.deleted_locality_stats.emplace_back(
2059
- cluster_locality_stats->GetSnapshotAndReset());
2060
- locality_set.erase(it);
2077
+ locality_state.deleted_locality_stats +=
2078
+ locality_state.locality_stats->GetSnapshotAndReset();
2079
+ locality_state.locality_stats = nullptr;
2061
2080
  }
2062
2081
  }
2063
2082
 
@@ -2098,6 +2117,9 @@ void XdsClient::NotifyOnErrorLocked(grpc_error* error) {
2098
2117
 
2099
2118
  XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
2100
2119
  bool send_all_clusters, const std::set<std::string>& clusters) {
2120
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
2121
+ gpr_log(GPR_INFO, "[xds_client %p] start building load report", this);
2122
+ }
2101
2123
  XdsApi::ClusterLoadReportMap snapshot_map;
2102
2124
  for (auto load_report_it = load_report_map_.begin();
2103
2125
  load_report_it != load_report_map_.end();) {
@@ -2116,9 +2138,15 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
2116
2138
  XdsApi::ClusterLoadReport snapshot;
2117
2139
  // Aggregate drop stats.
2118
2140
  snapshot.dropped_requests = std::move(load_report.deleted_drop_stats);
2119
- for (auto& drop_stats : load_report.drop_stats) {
2120
- auto dropped_requests = drop_stats->GetSnapshotAndReset();
2121
- snapshot.dropped_requests += dropped_requests;
2141
+ if (load_report.drop_stats != nullptr) {
2142
+ snapshot.dropped_requests +=
2143
+ load_report.drop_stats->GetSnapshotAndReset();
2144
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
2145
+ gpr_log(GPR_INFO,
2146
+ "[xds_client %p] cluster=%s eds_service_name=%s drop_stats=%p",
2147
+ this, cluster_key.first.c_str(), cluster_key.second.c_str(),
2148
+ load_report.drop_stats);
2149
+ }
2122
2150
  }
2123
2151
  // Aggregate locality stats.
2124
2152
  for (auto it = load_report.locality_stats.begin();
@@ -2127,34 +2155,39 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
2127
2155
  auto& locality_state = it->second;
2128
2156
  XdsClusterLocalityStats::Snapshot& locality_snapshot =
2129
2157
  snapshot.locality_stats[locality_name];
2130
- for (auto& locality_stats : locality_state.locality_stats) {
2131
- locality_snapshot += locality_stats->GetSnapshotAndReset();
2132
- }
2133
- // Add final snapshots from recently deleted locality stats objects.
2134
- for (auto& deleted_locality_stats :
2135
- locality_state.deleted_locality_stats) {
2136
- locality_snapshot += deleted_locality_stats;
2158
+ locality_snapshot = std::move(locality_state.deleted_locality_stats);
2159
+ if (locality_state.locality_stats != nullptr) {
2160
+ locality_snapshot +=
2161
+ locality_state.locality_stats->GetSnapshotAndReset();
2162
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
2163
+ gpr_log(GPR_INFO,
2164
+ "[xds_client %p] cluster=%s eds_service_name=%s "
2165
+ "locality=%s locality_stats=%p",
2166
+ this, cluster_key.first.c_str(), cluster_key.second.c_str(),
2167
+ locality_name->AsHumanReadableString().c_str(),
2168
+ locality_state.locality_stats);
2169
+ }
2137
2170
  }
2138
- locality_state.deleted_locality_stats.clear();
2139
2171
  // If the only thing left in this entry was final snapshots from
2140
2172
  // deleted locality stats objects, remove the entry.
2141
- if (locality_state.locality_stats.empty()) {
2173
+ if (locality_state.locality_stats == nullptr) {
2142
2174
  it = load_report.locality_stats.erase(it);
2143
2175
  } else {
2144
2176
  ++it;
2145
2177
  }
2146
2178
  }
2179
+ // Compute load report interval.
2180
+ const grpc_millis now = ExecCtx::Get()->Now();
2181
+ snapshot.load_report_interval = now - load_report.last_report_time;
2182
+ load_report.last_report_time = now;
2183
+ // Record snapshot.
2147
2184
  if (record_stats) {
2148
- // Compute load report interval.
2149
- const grpc_millis now = ExecCtx::Get()->Now();
2150
- snapshot.load_report_interval = now - load_report.last_report_time;
2151
- load_report.last_report_time = now;
2152
- // Record snapshot.
2153
2185
  snapshot_map[cluster_key] = std::move(snapshot);
2154
2186
  }
2155
2187
  // If the only thing left in this entry was final snapshots from
2156
2188
  // deleted stats objects, remove the entry.
2157
- if (load_report.locality_stats.empty() && load_report.drop_stats.empty()) {
2189
+ if (load_report.locality_stats.empty() &&
2190
+ load_report.drop_stats == nullptr) {
2158
2191
  load_report_it = load_report_map_.erase(load_report_it);
2159
2192
  } else {
2160
2193
  ++load_report_it;