grpc 1.31.0.pre2 → 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 (944) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1030 -16151
  3. data/include/grpc/grpc.h +1 -7
  4. data/include/grpc/grpc_security.h +196 -186
  5. data/include/grpc/impl/codegen/README.md +22 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +9 -7
  7. data/include/grpc/impl/codegen/port_platform.h +28 -56
  8. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
  9. data/src/core/ext/filters/client_channel/client_channel.cc +243 -188
  10. data/src/core/ext/filters/client_channel/client_channel.h +1 -1
  11. data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
  12. data/src/core/ext/filters/client_channel/config_selector.cc +0 -4
  13. data/src/core/ext/filters/client_channel/config_selector.h +36 -8
  14. data/src/core/ext/filters/client_channel/health/health_check_client.cc +10 -2
  15. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
  16. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +3 -4
  17. data/src/core/ext/filters/client_channel/lb_policy.cc +5 -1
  18. data/src/core/ext/filters/client_channel/lb_policy.h +6 -4
  19. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +48 -35
  20. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  21. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -7
  22. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +178 -162
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -17
  29. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +79 -30
  30. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +10 -9
  31. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +14 -34
  32. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +26 -15
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +208 -130
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +299 -328
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +53 -17
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +809 -0
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +722 -0
  38. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  39. data/src/core/ext/filters/client_channel/resolver.cc +3 -1
  40. data/src/core/ext/filters/client_channel/resolver.h +4 -1
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -2
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -1
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +3 -3
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  46. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
  48. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
  49. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +21 -1
  50. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +661 -58
  51. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +28 -0
  52. data/src/core/ext/filters/client_channel/resolver_registry.cc +4 -4
  53. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +18 -61
  54. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +4 -3
  55. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +50 -48
  56. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +7 -11
  57. data/src/core/ext/filters/client_channel/retry_throttle.h +1 -1
  58. data/src/core/ext/filters/client_channel/server_address.cc +120 -7
  59. data/src/core/ext/filters/client_channel/server_address.h +44 -21
  60. data/src/core/ext/filters/client_channel/service_config.cc +18 -13
  61. data/src/core/ext/filters/client_channel/service_config.h +8 -5
  62. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  63. data/src/core/ext/filters/client_channel/service_config_parser.cc +8 -6
  64. data/src/core/ext/filters/client_channel/service_config_parser.h +8 -5
  65. data/src/core/ext/filters/client_channel/subchannel.cc +82 -38
  66. data/src/core/ext/filters/client_channel/subchannel.h +18 -6
  67. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -5
  68. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -2
  69. data/src/core/ext/filters/deadline/deadline_filter.cc +83 -77
  70. data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
  71. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -1
  72. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  73. data/src/core/ext/filters/max_age/max_age_filter.cc +3 -2
  74. data/src/core/ext/filters/message_size/message_size_filter.cc +2 -1
  75. data/src/core/ext/filters/message_size/message_size_filter.h +2 -1
  76. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
  77. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +19 -2
  78. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
  79. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +36 -28
  80. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -1
  81. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -2
  82. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +6 -6
  83. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -2
  84. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
  85. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +260 -311
  86. data/src/core/ext/transport/chttp2/transport/flow_control.cc +11 -3
  87. data/src/core/ext/transport/chttp2/transport/flow_control.h +12 -2
  88. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  89. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  90. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -8
  91. data/src/core/ext/transport/chttp2/transport/internal.h +10 -2
  92. data/src/core/ext/transport/chttp2/transport/parsing.cc +19 -31
  93. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -7
  94. data/src/core/ext/transport/inproc/inproc_transport.cc +12 -12
  95. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +244 -0
  96. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +766 -0
  97. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  98. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
  99. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +458 -0
  100. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1635 -0
  101. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
  102. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
  103. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
  104. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +124 -0
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +379 -0
  107. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +310 -0
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +103 -0
  112. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +351 -0
  113. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  114. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +53 -0
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +133 -0
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +241 -0
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +752 -0
  119. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  120. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
  121. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
  122. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
  123. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +176 -0
  124. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +645 -0
  125. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
  126. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
  127. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
  128. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
  129. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +36 -0
  130. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +85 -0
  131. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
  132. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
  133. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  134. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
  135. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  136. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
  137. data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
  138. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
  139. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +128 -0
  140. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +467 -0
  141. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +155 -0
  142. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +539 -0
  143. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
  144. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
  145. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +178 -0
  146. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +616 -0
  147. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
  148. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
  149. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +900 -0
  150. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +3290 -0
  151. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +60 -0
  152. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +139 -0
  153. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
  154. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
  155. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +364 -0
  156. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1336 -0
  157. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
  158. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
  159. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +110 -0
  160. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +387 -0
  161. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +76 -0
  162. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +214 -0
  163. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +147 -0
  164. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +570 -0
  165. data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
  166. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
  167. data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
  168. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
  169. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +139 -0
  170. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +449 -0
  171. data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
  172. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
  173. data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
  174. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
  175. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
  176. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
  177. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
  178. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
  179. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
  180. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
  181. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  182. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
  183. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  184. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
  185. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  186. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
  187. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  188. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
  189. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +54 -0
  190. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +133 -0
  191. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  192. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
  193. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  194. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
  195. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  196. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
  197. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
  198. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -8
  199. data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
  200. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
  201. data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
  202. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
  203. data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
  204. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
  205. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +242 -0
  206. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +753 -0
  207. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
  208. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
  209. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +36 -36
  210. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +1 -1
  211. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -0
  212. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +57 -0
  213. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  214. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
  215. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +28 -0
  216. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +53 -0
  217. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +52 -0
  218. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +129 -0
  219. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +42 -0
  220. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +77 -0
  221. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +36 -0
  222. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +85 -0
  223. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +54 -0
  224. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +160 -0
  225. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +36 -0
  226. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +84 -0
  227. data/src/core/ext/upb-generated/validate/validate.upb.c +11 -11
  228. data/src/core/ext/upb-generated/validate/validate.upb.h +1 -1
  229. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +38 -0
  230. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  231. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
  232. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  233. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +254 -0
  234. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  235. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
  236. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  237. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +558 -0
  238. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
  239. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
  240. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  241. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +133 -0
  242. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  243. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
  244. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  245. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
  246. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  247. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +266 -0
  248. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +125 -0
  249. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +143 -0
  250. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
  251. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
  252. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  253. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
  254. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
  255. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
  256. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  257. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
  258. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
  259. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
  260. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  261. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +228 -0
  262. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +80 -0
  263. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +46 -0
  264. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  265. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
  266. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  267. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +55 -0
  268. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  269. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +110 -0
  270. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  271. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
  272. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
  273. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
  274. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  275. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
  276. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  277. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +190 -0
  278. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +55 -0
  279. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +185 -0
  280. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  281. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +62 -0
  282. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  283. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +97 -0
  284. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
  285. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +915 -0
  286. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +280 -0
  287. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
  288. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  289. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +64 -0
  290. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  291. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +511 -0
  292. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +115 -0
  293. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +48 -0
  294. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  295. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +166 -0
  296. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
  297. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +105 -0
  298. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  299. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +249 -0
  300. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
  301. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
  302. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
  303. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
  304. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  305. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +152 -0
  306. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +60 -0
  307. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +83 -0
  308. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
  309. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +82 -0
  310. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
  311. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +83 -0
  312. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  313. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +86 -0
  314. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
  315. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
  316. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
  317. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
  318. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  319. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
  320. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  321. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
  322. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  323. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +73 -0
  324. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  325. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +72 -0
  326. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  327. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
  328. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  329. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
  330. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  331. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
  332. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  333. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
  334. data/src/core/ext/{upb-generated/gogoproto/gogo.upb.h → upbdefs-generated/envoy/type/v3/http.upbdefs.h} +10 -9
  335. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
  336. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  337. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
  338. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  339. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
  340. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  341. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  342. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  343. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
  344. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  345. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +38 -0
  346. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  347. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
  348. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  349. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +39 -0
  350. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  351. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
  352. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  353. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
  354. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  355. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +39 -0
  356. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  357. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
  358. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  359. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
  360. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  361. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
  362. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  363. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
  364. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  365. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
  366. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  367. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
  368. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  369. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
  370. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  371. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +42 -0
  372. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +35 -0
  373. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +62 -0
  374. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +40 -0
  375. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +45 -0
  376. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +40 -0
  377. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +49 -0
  378. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +35 -0
  379. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +68 -0
  380. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +40 -0
  381. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +51 -0
  382. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +35 -0
  383. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +307 -0
  384. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  385. data/src/core/ext/xds/certificate_provider_factory.h +61 -0
  386. data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
  387. data/src/core/ext/xds/certificate_provider_registry.h +57 -0
  388. data/src/core/ext/xds/certificate_provider_store.cc +84 -0
  389. data/src/core/ext/xds/certificate_provider_store.h +107 -0
  390. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +119 -0
  391. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +72 -0
  392. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +265 -0
  393. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +104 -0
  394. data/src/core/ext/xds/xds_api.cc +2119 -0
  395. data/src/core/ext/xds/xds_api.h +438 -0
  396. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +208 -19
  397. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +31 -10
  398. data/src/core/ext/xds/xds_certificate_provider.cc +240 -0
  399. data/src/core/ext/xds/xds_certificate_provider.h +74 -0
  400. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +9 -6
  401. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +636 -847
  402. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +120 -98
  403. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +61 -18
  404. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +38 -10
  405. data/src/core/lib/channel/channel_args.cc +2 -1
  406. data/src/core/lib/channel/channel_args.h +0 -1
  407. data/src/core/lib/channel/channel_trace.cc +4 -2
  408. data/src/core/lib/channel/channelz.cc +24 -60
  409. data/src/core/lib/channel/channelz.h +14 -22
  410. data/src/core/lib/channel/channelz_registry.cc +15 -12
  411. data/src/core/lib/channel/channelz_registry.h +3 -0
  412. data/src/core/lib/channel/handshaker.h +2 -2
  413. data/src/core/lib/compression/compression.cc +8 -4
  414. data/src/core/lib/compression/compression_internal.cc +10 -5
  415. data/src/core/lib/compression/compression_internal.h +2 -1
  416. data/src/core/lib/compression/stream_compression_identity.cc +1 -3
  417. data/src/core/lib/debug/stats_data.cc +1 -0
  418. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  419. data/src/core/lib/gpr/log_linux.cc +17 -3
  420. data/src/core/lib/gpr/log_posix.cc +13 -1
  421. data/src/core/lib/gpr/log_windows.cc +16 -4
  422. data/src/core/lib/gpr/murmur_hash.cc +1 -1
  423. data/src/core/lib/gpr/string.cc +1 -1
  424. data/src/core/lib/gpr/sync_posix.cc +2 -8
  425. data/src/core/lib/gpr/time_precise.cc +5 -2
  426. data/src/core/lib/gpr/time_precise.h +6 -2
  427. data/src/core/lib/gpr/tls.h +4 -0
  428. data/src/core/lib/gpr/tls_msvc.h +2 -0
  429. data/src/core/lib/gpr/tls_stdcpp.h +48 -0
  430. data/src/core/lib/gpr/useful.h +5 -4
  431. data/src/core/lib/gprpp/dual_ref_counted.h +331 -0
  432. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  433. data/src/core/lib/gprpp/examine_stack.h +46 -0
  434. data/src/core/lib/gprpp/fork.cc +2 -2
  435. data/src/core/lib/gprpp/manual_constructor.h +1 -1
  436. data/src/core/lib/gprpp/orphanable.h +4 -8
  437. data/src/core/lib/gprpp/ref_counted.h +91 -68
  438. data/src/core/lib/gprpp/ref_counted_ptr.h +158 -7
  439. data/src/core/lib/gprpp/stat.h +38 -0
  440. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  441. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  442. data/src/core/lib/gprpp/thd.h +2 -2
  443. data/src/core/lib/gprpp/thd_posix.cc +36 -36
  444. data/src/core/lib/http/parser.cc +46 -25
  445. data/src/core/lib/iomgr/endpoint.cc +5 -1
  446. data/src/core/lib/iomgr/endpoint.h +7 -3
  447. data/src/core/lib/iomgr/endpoint_cfstream.cc +36 -11
  448. data/src/core/lib/iomgr/error.cc +2 -1
  449. data/src/core/lib/iomgr/ev_epollex_linux.cc +8 -4
  450. data/src/core/lib/iomgr/ev_posix.cc +0 -2
  451. data/src/core/lib/iomgr/exec_ctx.cc +1 -1
  452. data/src/core/lib/iomgr/exec_ctx.h +10 -8
  453. data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
  454. data/src/core/lib/iomgr/executor/threadpool.h +3 -3
  455. data/src/core/lib/iomgr/iomgr.cc +0 -10
  456. data/src/core/lib/iomgr/iomgr.h +0 -10
  457. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +85 -7
  458. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +23 -3
  459. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
  460. data/src/core/lib/iomgr/python_util.h +3 -3
  461. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -5
  462. data/src/core/lib/iomgr/sockaddr_utils.cc +2 -1
  463. data/src/core/lib/iomgr/sockaddr_utils.h +2 -1
  464. data/src/core/lib/iomgr/tcp_custom.cc +32 -16
  465. data/src/core/lib/iomgr/tcp_posix.cc +34 -15
  466. data/src/core/lib/iomgr/tcp_windows.cc +26 -10
  467. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  468. data/src/core/lib/iomgr/unix_sockets_posix.cc +27 -15
  469. data/src/core/lib/iomgr/unix_sockets_posix.h +5 -0
  470. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +7 -0
  471. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  472. data/src/core/lib/json/json.h +2 -2
  473. data/src/core/lib/json/json_reader.cc +8 -4
  474. data/src/core/lib/json/json_util.cc +58 -0
  475. data/src/core/lib/json/json_util.h +204 -0
  476. data/src/core/lib/json/json_writer.cc +2 -1
  477. data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
  478. data/src/core/lib/security/authorization/authorization_engine.h +84 -0
  479. data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
  480. data/src/core/lib/security/authorization/evaluate_args.h +59 -0
  481. data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
  482. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +44 -0
  483. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +69 -0
  484. data/src/core/lib/security/authorization/mock_cel/cel_value.h +97 -0
  485. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
  486. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +57 -0
  487. data/src/core/lib/security/context/security_context.h +3 -1
  488. data/src/core/lib/security/credentials/credentials.cc +1 -1
  489. data/src/core/lib/security/credentials/credentials.h +3 -3
  490. data/src/core/lib/security/credentials/external/aws_request_signer.cc +208 -0
  491. data/src/core/lib/security/credentials/external/aws_request_signer.h +73 -0
  492. data/src/core/lib/security/credentials/external/external_account_credentials.cc +311 -0
  493. data/src/core/lib/security/credentials/external/external_account_credentials.h +118 -0
  494. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +136 -0
  495. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +49 -0
  496. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +211 -0
  497. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +59 -0
  498. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +56 -38
  499. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +51 -0
  500. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  501. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
  502. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -1
  503. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +2 -2
  504. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +351 -0
  505. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +218 -0
  506. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +78 -0
  507. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +74 -0
  508. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +77 -149
  509. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +58 -187
  510. data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -12
  511. data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
  512. data/src/core/lib/security/credentials/xds/xds_credentials.cc +45 -0
  513. data/src/core/lib/security/credentials/xds/xds_credentials.h +51 -0
  514. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -14
  515. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +88 -0
  516. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +70 -0
  517. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  518. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  519. data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
  520. data/src/core/lib/security/security_connector/security_connector.cc +1 -1
  521. data/src/core/lib/security/security_connector/security_connector.h +4 -2
  522. data/src/core/lib/security/security_connector/ssl_utils.h +9 -2
  523. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +293 -275
  524. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +106 -61
  525. data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
  526. data/src/core/lib/security/transport/security_handshaker.cc +1 -1
  527. data/src/core/lib/security/transport/server_auth_filter.cc +2 -1
  528. data/src/core/lib/security/util/json_util.h +1 -0
  529. data/src/core/lib/slice/slice.cc +7 -4
  530. data/src/core/lib/slice/slice_buffer.cc +2 -1
  531. data/src/core/lib/slice/slice_intern.cc +2 -2
  532. data/src/core/lib/surface/call.cc +21 -20
  533. data/src/core/lib/surface/call.h +2 -1
  534. data/src/core/lib/surface/channel.cc +37 -51
  535. data/src/core/lib/surface/channel.h +18 -3
  536. data/src/core/lib/surface/completion_queue.cc +17 -278
  537. data/src/core/lib/surface/completion_queue.h +0 -8
  538. data/src/core/lib/surface/init.cc +27 -12
  539. data/src/core/lib/surface/server.cc +1069 -1245
  540. data/src/core/lib/surface/server.h +363 -87
  541. data/src/core/lib/surface/validate_metadata.h +3 -0
  542. data/src/core/lib/surface/version.cc +2 -2
  543. data/src/core/lib/transport/authority_override.cc +38 -0
  544. data/src/core/lib/transport/authority_override.h +34 -0
  545. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  546. data/src/core/lib/transport/bdp_estimator.h +2 -1
  547. data/src/core/lib/transport/byte_stream.h +3 -3
  548. data/src/core/lib/transport/connectivity_state.cc +18 -13
  549. data/src/core/lib/transport/connectivity_state.h +22 -10
  550. data/src/core/lib/transport/error_utils.cc +13 -0
  551. data/src/core/lib/transport/error_utils.h +6 -0
  552. data/src/core/lib/transport/metadata.cc +11 -1
  553. data/src/core/lib/transport/metadata.h +2 -2
  554. data/src/core/lib/transport/static_metadata.cc +295 -276
  555. data/src/core/lib/transport/static_metadata.h +80 -73
  556. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  557. data/src/core/lib/transport/transport.cc +5 -3
  558. data/src/core/lib/transport/transport.h +8 -1
  559. data/src/core/lib/uri/uri_parser.cc +23 -21
  560. data/src/core/lib/uri/uri_parser.h +3 -1
  561. data/src/core/plugin_registry/grpc_plugin_registry.cc +35 -20
  562. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +26 -3
  563. data/src/core/tsi/fake_transport_security.cc +1 -0
  564. data/src/core/tsi/local_transport_security.cc +5 -1
  565. data/src/core/tsi/local_transport_security.h +6 -7
  566. data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -0
  567. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -1
  568. data/src/core/tsi/ssl_transport_security.cc +16 -9
  569. data/src/core/tsi/ssl_transport_security.h +3 -0
  570. data/src/core/tsi/transport_security.cc +4 -2
  571. data/src/ruby/bin/math_services_pb.rb +4 -4
  572. data/src/ruby/ext/grpc/extconf.rb +1 -1
  573. data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
  574. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +26 -18
  575. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +43 -31
  576. data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
  577. data/src/ruby/lib/grpc/version.rb +1 -1
  578. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  579. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
  580. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
  581. data/src/ruby/spec/channel_credentials_spec.rb +10 -0
  582. data/src/ruby/spec/generic/active_call_spec.rb +19 -8
  583. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  584. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  585. data/src/ruby/spec/pb/codegen/package_option_spec.rb +20 -0
  586. data/src/ruby/spec/user_agent_spec.rb +74 -0
  587. data/third_party/abseil-cpp/absl/algorithm/container.h +1764 -0
  588. data/third_party/abseil-cpp/absl/base/attributes.h +99 -38
  589. data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
  590. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  591. data/third_party/abseil-cpp/absl/base/config.h +60 -17
  592. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +428 -335
  593. data/third_party/abseil-cpp/absl/base/internal/bits.h +17 -16
  594. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +166 -0
  595. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  596. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  597. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  598. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  599. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  600. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  601. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +29 -1
  602. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +2 -2
  603. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +7 -5
  604. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +25 -38
  605. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +19 -25
  606. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +8 -0
  607. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
  608. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  609. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  610. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +2 -2
  611. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
  612. data/third_party/abseil-cpp/absl/base/macros.h +36 -109
  613. data/third_party/abseil-cpp/absl/base/optimization.h +61 -1
  614. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  615. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  616. data/third_party/abseil-cpp/absl/base/thread_annotations.h +94 -39
  617. data/third_party/abseil-cpp/absl/container/fixed_array.h +532 -0
  618. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
  619. data/third_party/abseil-cpp/absl/container/inlined_vector.h +33 -36
  620. data/third_party/abseil-cpp/absl/container/internal/common.h +206 -0
  621. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +33 -8
  622. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +460 -0
  623. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +161 -0
  624. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +208 -0
  625. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  626. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +270 -0
  627. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +321 -0
  628. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  629. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +50 -0
  630. data/third_party/abseil-cpp/absl/container/internal/layout.h +743 -0
  631. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  632. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1903 -0
  633. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +139 -0
  634. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  635. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1945 -0
  636. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  637. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  638. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  639. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +196 -0
  640. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +134 -0
  641. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +89 -0
  642. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +108 -0
  643. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  644. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  645. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +93 -0
  646. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  647. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +149 -0
  648. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +173 -0
  649. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  650. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  651. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  652. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +36 -0
  653. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  654. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  655. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1560 -0
  656. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  657. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  658. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  659. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  660. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  661. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  662. data/third_party/abseil-cpp/absl/hash/hash.h +325 -0
  663. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  664. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  665. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  666. data/third_party/abseil-cpp/absl/hash/internal/hash.h +996 -0
  667. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  668. data/third_party/abseil-cpp/absl/meta/type_traits.h +2 -8
  669. data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
  670. data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
  671. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +51 -0
  672. data/third_party/abseil-cpp/absl/status/status.cc +445 -0
  673. data/third_party/abseil-cpp/absl/status/status.h +817 -0
  674. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +38 -0
  675. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  676. data/third_party/abseil-cpp/absl/strings/charconv.cc +2 -2
  677. data/third_party/abseil-cpp/absl/strings/cord.cc +1998 -0
  678. data/third_party/abseil-cpp/absl/strings/cord.h +1276 -0
  679. data/third_party/abseil-cpp/absl/strings/escaping.cc +9 -9
  680. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  681. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  682. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  683. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  684. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +173 -0
  685. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +222 -136
  686. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +136 -64
  687. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +1 -1
  688. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +14 -21
  689. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -14
  690. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
  691. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
  692. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +999 -87
  693. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +3 -3
  694. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  695. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +8 -6
  696. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +13 -11
  697. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -2
  698. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  699. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  700. data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
  701. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  702. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -0
  703. data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
  704. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
  705. data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
  706. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  707. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  708. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  709. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  710. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  711. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  712. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
  713. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  714. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  715. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +249 -0
  716. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  717. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  718. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +492 -0
  719. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  720. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2739 -0
  721. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1065 -0
  722. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  723. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  724. data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
  725. data/third_party/abseil-cpp/absl/time/clock.cc +3 -3
  726. data/third_party/abseil-cpp/absl/time/duration.cc +90 -59
  727. data/third_party/abseil-cpp/absl/time/format.cc +43 -36
  728. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +26 -16
  729. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
  730. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
  731. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
  732. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
  733. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
  734. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
  735. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
  736. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +8 -7
  737. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -6
  738. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
  739. data/third_party/abseil-cpp/absl/time/time.h +15 -16
  740. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  741. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  742. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  743. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  744. data/third_party/abseil-cpp/absl/types/span.h +49 -36
  745. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  746. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  747. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  748. data/third_party/boringssl-with-bazel/err_data.c +479 -467
  749. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +0 -6
  750. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  751. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +9 -43
  752. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
  753. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +34 -0
  754. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +4 -0
  755. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +16 -0
  756. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
  757. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +173 -35
  758. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +2 -0
  759. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +4 -0
  760. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +30 -10
  761. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +56 -22
  762. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +8 -2
  763. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +543 -0
  764. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +237 -0
  765. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +118 -49
  766. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +267 -95
  767. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +210 -34
  768. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  769. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +3 -3
  770. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +6 -4
  771. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +3 -3
  772. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -1
  773. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +7 -2
  774. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +21 -18
  775. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -1
  776. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +24 -3
  777. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +3 -3
  778. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
  779. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +3 -3
  780. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +29 -35
  781. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +13 -2
  782. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +9 -8
  783. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +10 -10
  784. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +2 -2
  785. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +28 -40
  786. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
  787. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +3 -1
  788. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
  789. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
  790. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +14 -14
  791. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +7 -3
  792. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +2 -2
  793. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
  794. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
  795. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +55 -8
  796. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -1
  797. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +24 -0
  798. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +54 -0
  799. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +0 -1
  800. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +6 -3
  801. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
  802. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +6 -0
  803. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +1 -1
  804. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  805. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +12 -0
  806. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +9 -0
  807. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +4 -1
  808. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  809. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
  810. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +103 -10
  811. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +5 -2
  812. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +42 -14
  813. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +199 -78
  814. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +482 -432
  815. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  816. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +35 -0
  817. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +18 -18
  818. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -3
  819. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1 -1
  820. data/third_party/boringssl-with-bazel/src/ssl/internal.h +49 -10
  821. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +42 -1
  822. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
  823. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +8 -9
  824. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +77 -0
  825. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +11 -14
  826. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +250 -20
  827. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -2
  828. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +57 -19
  829. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +140 -41
  830. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  831. data/third_party/upb/upb/decode.c +64 -15
  832. data/third_party/upb/upb/def.c +2169 -0
  833. data/third_party/upb/upb/def.h +330 -0
  834. data/third_party/upb/upb/def.hpp +525 -0
  835. data/third_party/upb/upb/encode.c +2 -2
  836. data/third_party/upb/upb/msg.h +2 -2
  837. data/third_party/upb/upb/port_def.inc +1 -1
  838. data/third_party/upb/upb/reflection.c +391 -0
  839. data/third_party/upb/upb/reflection.h +168 -0
  840. data/third_party/upb/upb/table.c +0 -11
  841. data/third_party/upb/upb/table.int.h +0 -9
  842. data/third_party/upb/upb/text_encode.c +398 -0
  843. data/third_party/upb/upb/text_encode.h +35 -0
  844. data/third_party/upb/upb/upb.c +16 -14
  845. data/third_party/upb/upb/upb.h +26 -0
  846. data/third_party/upb/upb/upb.hpp +2 -0
  847. metadata +489 -161
  848. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +0 -528
  849. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +0 -1143
  850. data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -2110
  851. data/src/core/ext/filters/client_channel/xds/xds_api.h +0 -345
  852. data/src/core/ext/filters/client_channel/xds/xds_channel.h +0 -46
  853. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +0 -106
  854. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
  855. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -34
  856. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
  857. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -429
  858. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
  859. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -198
  860. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
  861. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -388
  862. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -52
  863. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
  864. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1453
  865. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
  866. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -226
  867. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  868. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -323
  869. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
  870. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -334
  871. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -79
  872. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
  873. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -891
  874. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
  875. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -328
  876. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
  877. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -71
  878. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
  879. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -649
  880. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
  881. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -693
  882. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  883. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
  884. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -536
  885. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -88
  886. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
  887. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -386
  888. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -52
  889. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
  890. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -224
  891. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
  892. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -32
  893. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
  894. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -273
  895. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
  896. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -332
  897. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -52
  898. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
  899. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -415
  900. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
  901. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -32
  902. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
  903. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -538
  904. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
  905. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -111
  906. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -52
  907. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
  908. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -204
  909. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
  910. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -32
  911. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
  912. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -2984
  913. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
  914. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -135
  915. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -52
  916. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
  917. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -732
  918. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
  919. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1167
  920. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  921. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
  922. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
  923. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -49
  924. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
  925. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -136
  926. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
  927. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -145
  928. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
  929. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  930. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
  931. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  932. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -86
  933. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -111
  934. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -61
  935. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
  936. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -250
  937. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
  938. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  939. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  940. data/src/core/lib/slice/slice_hash_table.h +0 -199
  941. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
  942. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
  943. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
  944. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
@@ -79,4 +79,4 @@ void grpc_client_channel_stop_connectivity_watch(
79
79
  grpc_core::RefCountedPtr<grpc_core::SubchannelCall>
80
80
  grpc_client_channel_get_subchannel_call(grpc_call_element* elem);
81
81
 
82
- #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_H */
82
+ #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_H
@@ -29,9 +29,6 @@
29
29
  #include "src/core/lib/channel/channelz.h"
30
30
 
31
31
  namespace grpc_core {
32
-
33
- class Subchannel;
34
-
35
32
  namespace channelz {
36
33
 
37
34
  class SubchannelNode : public BaseNode {
@@ -17,12 +17,8 @@
17
17
  #include <grpc/support/port_platform.h>
18
18
 
19
19
  #include "src/core/ext/filters/client_channel/config_selector.h"
20
-
21
20
  #include "src/core/lib/channel/channel_args.h"
22
21
 
23
- // Channel arg key for ConfigSelector.
24
- #define GRPC_ARG_CONFIG_SELECTOR "grpc.internal.config_selector"
25
-
26
22
  namespace grpc_core {
27
23
 
28
24
  namespace {
@@ -24,8 +24,7 @@
24
24
 
25
25
  #include "absl/strings/string_view.h"
26
26
 
27
- #include <grpc/impl/codegen/grpc_types.h>
28
- #include <grpc/impl/codegen/slice.h>
27
+ #include <grpc/grpc.h>
29
28
 
30
29
  #include "src/core/ext/filters/client_channel/service_config.h"
31
30
  #include "src/core/ext/filters/client_channel/service_config_parser.h"
@@ -34,6 +33,9 @@
34
33
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
35
34
  #include "src/core/lib/transport/metadata_batch.h"
36
35
 
36
+ // Channel arg key for ConfigSelector.
37
+ #define GRPC_ARG_CONFIG_SELECTOR "grpc.internal.config_selector"
38
+
37
39
  namespace grpc_core {
38
40
 
39
41
  // Internal API used to allow resolver implementations to override
@@ -52,6 +54,9 @@ class ConfigSelector : public RefCounted<ConfigSelector> {
52
54
  // The per-method parsed configs that will be passed to
53
55
  // ServiceConfigCallData.
54
56
  const ServiceConfigParser::ParsedConfigVector* method_configs = nullptr;
57
+ // A ref to the service config that contains method_configs, held by
58
+ // the call to ensure that method_configs lives long enough.
59
+ RefCountedPtr<ServiceConfig> service_config;
55
60
  // Call attributes that will be accessible to LB policy implementations.
56
61
  std::map<const char*, absl::string_view> call_attributes;
57
62
  // A callback that, if set, will be invoked when the call is
@@ -60,7 +65,20 @@ class ConfigSelector : public RefCounted<ConfigSelector> {
60
65
  std::function<void()> on_call_committed;
61
66
  };
62
67
 
63
- virtual ~ConfigSelector() = default;
68
+ ~ConfigSelector() override = default;
69
+
70
+ virtual const char* name() const = 0;
71
+
72
+ // Will be called only if the two objects have the same name, so
73
+ // subclasses can be free to safely down-cast the argument.
74
+ virtual bool Equals(const ConfigSelector* other) const = 0;
75
+
76
+ static bool Equals(const ConfigSelector* cs1, const ConfigSelector* cs2) {
77
+ if (cs1 == nullptr) return cs2 == nullptr;
78
+ if (cs2 == nullptr) return false;
79
+ if (strcmp(cs1->name(), cs2->name()) != 0) return false;
80
+ return cs1->Equals(cs2);
81
+ }
64
82
 
65
83
  virtual CallConfig GetCallConfig(GetCallConfigArgs args) = 0;
66
84
 
@@ -73,14 +91,24 @@ class ConfigSelector : public RefCounted<ConfigSelector> {
73
91
  class DefaultConfigSelector : public ConfigSelector {
74
92
  public:
75
93
  explicit DefaultConfigSelector(RefCountedPtr<ServiceConfig> service_config)
76
- : service_config_(std::move(service_config)) {}
94
+ : service_config_(std::move(service_config)) {
95
+ // The client channel code ensures that this will never be null.
96
+ // If neither the resolver nor the client application provide a
97
+ // config, a default empty config will be used.
98
+ GPR_DEBUG_ASSERT(service_config_ != nullptr);
99
+ }
100
+
101
+ const char* name() const override { return "default"; }
102
+
103
+ // Only comparing the ConfigSelector itself, not the underlying
104
+ // service config, so we always return true.
105
+ bool Equals(const ConfigSelector* other) const override { return true; }
77
106
 
78
107
  CallConfig GetCallConfig(GetCallConfigArgs args) override {
79
108
  CallConfig call_config;
80
- if (service_config_ != nullptr) {
81
- call_config.method_configs =
82
- service_config_->GetMethodParsedConfigVector(*args.path);
83
- }
109
+ call_config.method_configs =
110
+ service_config_->GetMethodParsedConfigVector(*args.path);
111
+ call_config.service_config = service_config_;
84
112
  return call_config;
85
113
  }
86
114
 
@@ -51,7 +51,10 @@ HealthCheckClient::HealthCheckClient(
51
51
  grpc_pollset_set* interested_parties,
52
52
  RefCountedPtr<channelz::SubchannelNode> channelz_node,
53
53
  RefCountedPtr<ConnectivityStateWatcherInterface> watcher)
54
- : InternallyRefCounted<HealthCheckClient>(&grpc_health_check_client_trace),
54
+ : InternallyRefCounted<HealthCheckClient>(
55
+ GRPC_TRACE_FLAG_ENABLED(grpc_health_check_client_trace)
56
+ ? "HealthCheckClient"
57
+ : nullptr),
55
58
  service_name_(service_name),
56
59
  connected_subchannel_(std::move(connected_subchannel)),
57
60
  interested_parties_(interested_parties),
@@ -91,7 +94,12 @@ void HealthCheckClient::SetHealthStatusLocked(grpc_connectivity_state state,
91
94
  gpr_log(GPR_INFO, "HealthCheckClient %p: setting state=%s reason=%s", this,
92
95
  ConnectivityStateName(state), reason);
93
96
  }
94
- if (watcher_ != nullptr) watcher_->Notify(state);
97
+ if (watcher_ != nullptr) {
98
+ watcher_->Notify(state,
99
+ state == GRPC_CHANNEL_TRANSIENT_FAILURE
100
+ ? absl::Status(absl::StatusCode::kUnavailable, reason)
101
+ : absl::Status());
102
+ }
95
103
  }
96
104
 
97
105
  void HealthCheckClient::Orphan() {
@@ -50,7 +50,7 @@ class HealthCheckClient : public InternallyRefCounted<HealthCheckClient> {
50
50
  RefCountedPtr<channelz::SubchannelNode> channelz_node,
51
51
  RefCountedPtr<ConnectivityStateWatcherInterface> watcher);
52
52
 
53
- ~HealthCheckClient();
53
+ ~HealthCheckClient() override;
54
54
 
55
55
  void Orphan() override;
56
56
 
@@ -60,7 +60,7 @@ class HealthCheckClient : public InternallyRefCounted<HealthCheckClient> {
60
60
  public:
61
61
  CallState(RefCountedPtr<HealthCheckClient> health_check_client,
62
62
  grpc_pollset_set* interested_parties_);
63
- ~CallState();
63
+ ~CallState() override;
64
64
 
65
65
  void Orphan() override;
66
66
 
@@ -54,7 +54,7 @@ class HttpConnectHandshaker : public Handshaker {
54
54
  const char* name() const override { return "http_connect"; }
55
55
 
56
56
  private:
57
- virtual ~HttpConnectHandshaker();
57
+ ~HttpConnectHandshaker() override;
58
58
  void CleanupArgsForFailureLocked();
59
59
  void HandshakeFailedLocked(grpc_error* error);
60
60
  static void OnWriteDone(void* arg, grpc_error* error);
@@ -325,10 +325,9 @@ void HttpConnectHandshaker::DoHandshake(grpc_tcp_server_acceptor* /*acceptor*/,
325
325
  args_ = args;
326
326
  on_handshake_done_ = on_handshake_done;
327
327
  // Log connection via proxy.
328
- char* proxy_name = grpc_endpoint_get_peer(args->endpoint);
328
+ std::string proxy_name(grpc_endpoint_get_peer(args->endpoint));
329
329
  gpr_log(GPR_INFO, "Connecting to server %s via HTTP proxy %s", server_name,
330
- proxy_name);
331
- gpr_free(proxy_name);
330
+ proxy_name.c_str());
332
331
  // Construct HTTP CONNECT request.
333
332
  grpc_httpcli_request request;
334
333
  request.host = server_name;
@@ -32,7 +32,11 @@ DebugOnlyTraceFlag grpc_trace_lb_policy_refcount(false, "lb_policy_refcount");
32
32
  //
33
33
 
34
34
  LoadBalancingPolicy::LoadBalancingPolicy(Args args, intptr_t initial_refcount)
35
- : InternallyRefCounted(&grpc_trace_lb_policy_refcount, initial_refcount),
35
+ : InternallyRefCounted(
36
+ GRPC_TRACE_FLAG_ENABLED(grpc_trace_lb_policy_refcount)
37
+ ? "LoadBalancingPolicy"
38
+ : nullptr,
39
+ initial_refcount),
36
40
  work_serializer_(std::move(args.work_serializer)),
37
41
  interested_parties_(grpc_pollset_set_create()),
38
42
  channel_control_helper_(std::move(args.channel_control_helper)) {}
@@ -24,6 +24,7 @@
24
24
  #include <functional>
25
25
  #include <iterator>
26
26
 
27
+ #include "absl/status/status.h"
27
28
  #include "absl/strings/string_view.h"
28
29
 
29
30
  #include "src/core/ext/filters/client_channel/server_address.h"
@@ -278,11 +279,12 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
278
279
 
279
280
  /// Creates a new subchannel with the specified channel args.
280
281
  virtual RefCountedPtr<SubchannelInterface> CreateSubchannel(
281
- const grpc_channel_args& args) = 0;
282
+ ServerAddress address, const grpc_channel_args& args) = 0;
282
283
 
283
284
  /// Sets the connectivity state and returns a new picker to be used
284
285
  /// by the client channel.
285
286
  virtual void UpdateState(grpc_connectivity_state state,
287
+ const absl::Status& status,
286
288
  std::unique_ptr<SubchannelPicker>) = 0;
287
289
 
288
290
  /// Requests that the resolver re-resolve.
@@ -299,7 +301,7 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
299
301
  /// return the parameters they need.
300
302
  class Config : public RefCounted<Config> {
301
303
  public:
302
- virtual ~Config() = default;
304
+ ~Config() override = default;
303
305
 
304
306
  // Returns the load balancing policy name
305
307
  virtual const char* name() const = 0;
@@ -339,7 +341,7 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
339
341
  };
340
342
 
341
343
  explicit LoadBalancingPolicy(Args args, intptr_t initial_refcount = 1);
342
- virtual ~LoadBalancingPolicy();
344
+ ~LoadBalancingPolicy() override;
343
345
 
344
346
  // Not copyable nor movable.
345
347
  LoadBalancingPolicy(const LoadBalancingPolicy&) = delete;
@@ -374,7 +376,7 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
374
376
  explicit QueuePicker(RefCountedPtr<LoadBalancingPolicy> parent)
375
377
  : parent_(std::move(parent)) {}
376
378
 
377
- ~QueuePicker() { parent_.reset(DEBUG_LOCATION, "QueuePicker"); }
379
+ ~QueuePicker() override { parent_.reset(DEBUG_LOCATION, "QueuePicker"); }
378
380
 
379
381
  PickResult Pick(PickArgs args) override;
380
382
 
@@ -18,64 +18,77 @@
18
18
 
19
19
  #include "src/core/ext/filters/client_channel/lb_policy/address_filtering.h"
20
20
 
21
+ #include "absl/strings/str_cat.h"
22
+ #include "absl/strings/str_join.h"
23
+
21
24
  #include "src/core/lib/channel/channel_args.h"
22
25
 
23
26
  #define GRPC_ARG_HIERARCHICAL_PATH "grpc.internal.address.hierarchical_path"
24
27
 
25
28
  namespace grpc_core {
26
29
 
30
+ const char* kHierarchicalPathAttributeKey = "hierarchical_path";
31
+
27
32
  namespace {
28
33
 
29
- void* HierarchicalPathCopy(void* p) {
30
- std::vector<std::string>* path = static_cast<std::vector<std::string>*>(p);
31
- return static_cast<void*>(new std::vector<std::string>(*path));
32
- }
34
+ class HierarchicalPathAttribute : public ServerAddress::AttributeInterface {
35
+ public:
36
+ explicit HierarchicalPathAttribute(std::vector<std::string> path)
37
+ : path_(std::move(path)) {}
33
38
 
34
- void HierarchicalPathDestroy(void* p) {
35
- std::vector<std::string>* path = static_cast<std::vector<std::string>*>(p);
36
- delete path;
37
- }
39
+ std::unique_ptr<AttributeInterface> Copy() const override {
40
+ return absl::make_unique<HierarchicalPathAttribute>(path_);
41
+ }
38
42
 
39
- int HierarchicalPathCompare(void* p1, void* p2) {
40
- std::vector<std::string>* path1 = static_cast<std::vector<std::string>*>(p1);
41
- std::vector<std::string>* path2 = static_cast<std::vector<std::string>*>(p2);
42
- for (size_t i = 0; i < path1->size(); ++i) {
43
- if (path2->size() == i) return 1;
44
- int r = (*path1)[i].compare((*path2)[i]);
45
- if (r != 0) return r;
43
+ int Cmp(const AttributeInterface* other) const override {
44
+ const std::vector<std::string>& other_path =
45
+ static_cast<const HierarchicalPathAttribute*>(other)->path_;
46
+ for (size_t i = 0; i < path_.size(); ++i) {
47
+ if (other_path.size() == i) return 1;
48
+ int r = path_[i].compare(other_path[i]);
49
+ if (r != 0) return r;
50
+ }
51
+ if (other_path.size() > path_.size()) return -1;
52
+ return 0;
46
53
  }
47
- if (path2->size() > path1->size()) return -1;
48
- return 0;
49
- }
50
54
 
51
- const grpc_arg_pointer_vtable hierarchical_path_arg_vtable = {
52
- HierarchicalPathCopy, HierarchicalPathDestroy, HierarchicalPathCompare};
55
+ std::string ToString() const override {
56
+ return absl::StrCat("[", absl::StrJoin(path_, ", "), "]");
57
+ }
58
+
59
+ const std::vector<std::string>& path() const { return path_; }
60
+
61
+ private:
62
+ std::vector<std::string> path_;
63
+ };
53
64
 
54
65
  } // namespace
55
66
 
56
- grpc_arg MakeHierarchicalPathArg(const std::vector<std::string>& path) {
57
- return grpc_channel_arg_pointer_create(
58
- const_cast<char*>(GRPC_ARG_HIERARCHICAL_PATH),
59
- const_cast<std::vector<std::string>*>(&path),
60
- &hierarchical_path_arg_vtable);
67
+ std::unique_ptr<ServerAddress::AttributeInterface>
68
+ MakeHierarchicalPathAttribute(std::vector<std::string> path) {
69
+ return absl::make_unique<HierarchicalPathAttribute>(std::move(path));
61
70
  }
62
71
 
63
72
  HierarchicalAddressMap MakeHierarchicalAddressMap(
64
73
  const ServerAddressList& addresses) {
65
74
  HierarchicalAddressMap result;
66
75
  for (const ServerAddress& address : addresses) {
67
- auto* path = grpc_channel_args_find_pointer<std::vector<std::string>>(
68
- address.args(), GRPC_ARG_HIERARCHICAL_PATH);
69
- if (path == nullptr || path->empty()) continue;
70
- auto it = path->begin();
76
+ const HierarchicalPathAttribute* path_attribute =
77
+ static_cast<const HierarchicalPathAttribute*>(
78
+ address.GetAttribute(kHierarchicalPathAttributeKey));
79
+ if (path_attribute == nullptr) continue;
80
+ const std::vector<std::string>& path = path_attribute->path();
81
+ auto it = path.begin();
71
82
  ServerAddressList& target_list = result[*it];
83
+ std::unique_ptr<HierarchicalPathAttribute> new_attribute;
72
84
  ++it;
73
- std::vector<std::string> remaining_path(it, path->end());
74
- const char* name_to_remove = GRPC_ARG_HIERARCHICAL_PATH;
75
- grpc_arg new_arg = MakeHierarchicalPathArg(remaining_path);
76
- grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
77
- address.args(), &name_to_remove, 1, &new_arg, 1);
78
- target_list.emplace_back(address.address(), new_args);
85
+ if (it != path.end()) {
86
+ std::vector<std::string> remaining_path(it, path.end());
87
+ new_attribute = absl::make_unique<HierarchicalPathAttribute>(
88
+ std::move(remaining_path));
89
+ }
90
+ target_list.emplace_back(address.WithAttribute(
91
+ kHierarchicalPathAttributeKey, std::move(new_attribute)));
79
92
  }
80
93
  return result;
81
94
  }
@@ -23,8 +23,6 @@
23
23
  #include <string>
24
24
  #include <vector>
25
25
 
26
- #include "absl/strings/string_view.h"
27
-
28
26
  #include "src/core/ext/filters/client_channel/server_address.h"
29
27
 
30
28
  // The resolver returns a flat list of addresses. When a hierarchy of
@@ -81,9 +79,13 @@
81
79
 
82
80
  namespace grpc_core {
83
81
 
84
- // Constructs a channel arg containing the hierarchical path
85
- // to be associated with an address.
86
- grpc_arg MakeHierarchicalPathArg(const std::vector<std::string>& path);
82
+ // The attribute key to be used for hierarchical paths in ServerAddress.
83
+ extern const char* kHierarchicalPathAttributeKey;
84
+
85
+ // Constructs an address attribute containing the hierarchical path
86
+ // to be associated with the address.
87
+ std::unique_ptr<ServerAddress::AttributeInterface>
88
+ MakeHierarchicalPathAttribute(std::vector<std::string> path);
87
89
 
88
90
  // A map from the next path element to the addresses that fall under
89
91
  // that path element.
@@ -36,16 +36,17 @@ class ChildPolicyHandler::Helper
36
36
  explicit Helper(RefCountedPtr<ChildPolicyHandler> parent)
37
37
  : parent_(std::move(parent)) {}
38
38
 
39
- ~Helper() { parent_.reset(DEBUG_LOCATION, "Helper"); }
39
+ ~Helper() override { parent_.reset(DEBUG_LOCATION, "Helper"); }
40
40
 
41
41
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
42
- const grpc_channel_args& args) override {
42
+ ServerAddress address, const grpc_channel_args& args) override {
43
43
  if (parent_->shutting_down_) return nullptr;
44
44
  if (!CalledByCurrentChild() && !CalledByPendingChild()) return nullptr;
45
- return parent_->channel_control_helper()->CreateSubchannel(args);
45
+ return parent_->channel_control_helper()->CreateSubchannel(
46
+ std::move(address), args);
46
47
  }
47
48
 
48
- void UpdateState(grpc_connectivity_state state,
49
+ void UpdateState(grpc_connectivity_state state, const absl::Status& status,
49
50
  std::unique_ptr<SubchannelPicker> picker) override {
50
51
  if (parent_->shutting_down_) return;
51
52
  // If this request is from the pending child policy, ignore it until
@@ -55,8 +56,9 @@ class ChildPolicyHandler::Helper
55
56
  if (GRPC_TRACE_FLAG_ENABLED(*(parent_->tracer_))) {
56
57
  gpr_log(GPR_INFO,
57
58
  "[child_policy_handler %p] helper %p: pending child policy %p "
58
- "reports state=%s",
59
- parent_.get(), this, child_, ConnectivityStateName(state));
59
+ "reports state=%s (%s)",
60
+ parent_.get(), this, child_, ConnectivityStateName(state),
61
+ status.ToString().c_str());
60
62
  }
61
63
  if (state == GRPC_CHANNEL_CONNECTING) return;
62
64
  grpc_pollset_set_del_pollset_set(
@@ -67,7 +69,8 @@ class ChildPolicyHandler::Helper
67
69
  // This request is from an outdated child, so ignore it.
68
70
  return;
69
71
  }
70
- parent_->channel_control_helper()->UpdateState(state, std::move(picker));
72
+ parent_->channel_control_helper()->UpdateState(state, status,
73
+ std::move(picker));
71
74
  }
72
75
 
73
76
  void RequestReresolution() override {
@@ -36,7 +36,7 @@ class ChildPolicyHandler : public LoadBalancingPolicy {
36
36
  ChildPolicyHandler(Args args, TraceFlag* tracer)
37
37
  : LoadBalancingPolicy(std::move(args)), tracer_(tracer) {}
38
38
 
39
- virtual const char* name() const override { return "child_policy_handler"; }
39
+ const char* name() const override { return "child_policy_handler"; }
40
40
 
41
41
  void UpdateLocked(UpdateArgs args) override;
42
42
  void ExitIdleLocked() override;
@@ -87,7 +87,6 @@
87
87
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h"
88
88
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
89
89
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
90
- #include "src/core/ext/filters/client_channel/parse_address.h"
91
90
  #include "src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h"
92
91
  #include "src/core/ext/filters/client_channel/server_address.h"
93
92
  #include "src/core/lib/backoff/backoff.h"
@@ -98,10 +97,10 @@
98
97
  #include "src/core/lib/gprpp/memory.h"
99
98
  #include "src/core/lib/gprpp/orphanable.h"
100
99
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
100
+ #include "src/core/lib/iomgr/parse_address.h"
101
101
  #include "src/core/lib/iomgr/sockaddr.h"
102
102
  #include "src/core/lib/iomgr/sockaddr_utils.h"
103
103
  #include "src/core/lib/iomgr/timer.h"
104
- #include "src/core/lib/slice/slice_hash_table.h"
105
104
  #include "src/core/lib/slice/slice_internal.h"
106
105
  #include "src/core/lib/slice/slice_string_helpers.h"
107
106
  #include "src/core/lib/surface/call.h"
@@ -125,6 +124,8 @@ TraceFlag grpc_lb_glb_trace(false, "glb");
125
124
  const char kGrpcLbClientStatsMetadataKey[] = "grpclb_client_stats";
126
125
  const char kGrpcLbLbTokenMetadataKey[] = "lb-token";
127
126
 
127
+ const char kGrpcLbAddressAttributeKey[] = "grpclb";
128
+
128
129
  namespace {
129
130
 
130
131
  constexpr char kGrpclb[] = "grpclb";
@@ -163,7 +164,7 @@ class GrpcLb : public LoadBalancingPolicy {
163
164
  public:
164
165
  explicit BalancerCallState(
165
166
  RefCountedPtr<LoadBalancingPolicy> parent_grpclb_policy);
166
- ~BalancerCallState();
167
+ ~BalancerCallState() override;
167
168
 
168
169
  // It's the caller's responsibility to ensure that Orphan() is called from
169
170
  // inside the combiner.
@@ -234,6 +235,59 @@ class GrpcLb : public LoadBalancingPolicy {
234
235
  grpc_closure client_load_report_closure_;
235
236
  };
236
237
 
238
+ class SubchannelWrapper : public DelegatingSubchannel {
239
+ public:
240
+ SubchannelWrapper(RefCountedPtr<SubchannelInterface> subchannel,
241
+ std::string lb_token,
242
+ RefCountedPtr<GrpcLbClientStats> client_stats)
243
+ : DelegatingSubchannel(std::move(subchannel)),
244
+ lb_token_(std::move(lb_token)),
245
+ client_stats_(std::move(client_stats)) {}
246
+
247
+ const std::string& lb_token() const { return lb_token_; }
248
+ GrpcLbClientStats* client_stats() const { return client_stats_.get(); }
249
+
250
+ private:
251
+ std::string lb_token_;
252
+ RefCountedPtr<GrpcLbClientStats> client_stats_;
253
+ };
254
+
255
+ class TokenAndClientStatsAttribute
256
+ : public ServerAddress::AttributeInterface {
257
+ public:
258
+ TokenAndClientStatsAttribute(std::string lb_token,
259
+ RefCountedPtr<GrpcLbClientStats> client_stats)
260
+ : lb_token_(std::move(lb_token)),
261
+ client_stats_(std::move(client_stats)) {}
262
+
263
+ std::unique_ptr<AttributeInterface> Copy() const override {
264
+ return absl::make_unique<TokenAndClientStatsAttribute>(lb_token_,
265
+ client_stats_);
266
+ }
267
+
268
+ int Cmp(const AttributeInterface* other_base) const override {
269
+ const TokenAndClientStatsAttribute* other =
270
+ static_cast<const TokenAndClientStatsAttribute*>(other_base);
271
+ int r = lb_token_.compare(other->lb_token_);
272
+ if (r != 0) return r;
273
+ return GPR_ICMP(client_stats_.get(), other->client_stats_.get());
274
+ }
275
+
276
+ std::string ToString() const override {
277
+ return absl::StrFormat("lb_token=\"%s\" client_stats=%p", lb_token_,
278
+ client_stats_.get());
279
+ }
280
+
281
+ const std::string& lb_token() const { return lb_token_; }
282
+ RefCountedPtr<GrpcLbClientStats> client_stats() const {
283
+ return client_stats_;
284
+ }
285
+
286
+ private:
287
+ std::string lb_token_;
288
+ RefCountedPtr<GrpcLbClientStats> client_stats_;
289
+ };
290
+
237
291
  class Serverlist : public RefCounted<Serverlist> {
238
292
  public:
239
293
  // Takes ownership of serverlist.
@@ -275,21 +329,16 @@ class GrpcLb : public LoadBalancingPolicy {
275
329
 
276
330
  class Picker : public SubchannelPicker {
277
331
  public:
278
- Picker(GrpcLb* parent, RefCountedPtr<Serverlist> serverlist,
332
+ Picker(RefCountedPtr<Serverlist> serverlist,
279
333
  std::unique_ptr<SubchannelPicker> child_picker,
280
334
  RefCountedPtr<GrpcLbClientStats> client_stats)
281
- : parent_(parent),
282
- serverlist_(std::move(serverlist)),
335
+ : serverlist_(std::move(serverlist)),
283
336
  child_picker_(std::move(child_picker)),
284
337
  client_stats_(std::move(client_stats)) {}
285
338
 
286
339
  PickResult Pick(PickArgs args) override;
287
340
 
288
341
  private:
289
- // Storing the address for logging, but not holding a ref.
290
- // DO NOT DEFERENCE!
291
- GrpcLb* parent_;
292
-
293
342
  // Serverlist to be used for determining drops.
294
343
  RefCountedPtr<Serverlist> serverlist_;
295
344
 
@@ -303,8 +352,8 @@ class GrpcLb : public LoadBalancingPolicy {
303
352
  : parent_(std::move(parent)) {}
304
353
 
305
354
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
306
- const grpc_channel_args& args) override;
307
- void UpdateState(grpc_connectivity_state state,
355
+ ServerAddress address, const grpc_channel_args& args) override;
356
+ void UpdateState(grpc_connectivity_state state, const absl::Status& status,
308
357
  std::unique_ptr<SubchannelPicker> picker) override;
309
358
  void RequestReresolution() override;
310
359
  void AddTraceEvent(TraceSeverity severity,
@@ -320,18 +369,19 @@ class GrpcLb : public LoadBalancingPolicy {
320
369
  : AsyncConnectivityStateWatcherInterface(parent->work_serializer()),
321
370
  parent_(std::move(parent)) {}
322
371
 
323
- ~StateWatcher() { parent_.reset(DEBUG_LOCATION, "StateWatcher"); }
372
+ ~StateWatcher() override { parent_.reset(DEBUG_LOCATION, "StateWatcher"); }
324
373
 
325
374
  private:
326
- void OnConnectivityStateChange(grpc_connectivity_state new_state) override {
375
+ void OnConnectivityStateChange(grpc_connectivity_state new_state,
376
+ const absl::Status& status) override {
327
377
  if (parent_->fallback_at_startup_checks_pending_ &&
328
378
  new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
329
379
  // In TRANSIENT_FAILURE. Cancel the fallback timer and go into
330
380
  // fallback mode immediately.
331
381
  gpr_log(GPR_INFO,
332
- "[grpclb %p] balancer channel in state TRANSIENT_FAILURE; "
382
+ "[grpclb %p] balancer channel in state:TRANSIENT_FAILURE (%s); "
333
383
  "entering fallback mode",
334
- parent_.get());
384
+ parent_.get(), status.ToString().c_str());
335
385
  parent_->fallback_at_startup_checks_pending_ = false;
336
386
  grpc_timer_cancel(&parent_->lb_fallback_timer_);
337
387
  parent_->fallback_mode_ = true;
@@ -345,13 +395,15 @@ class GrpcLb : public LoadBalancingPolicy {
345
395
  RefCountedPtr<GrpcLb> parent_;
346
396
  };
347
397
 
348
- ~GrpcLb();
398
+ ~GrpcLb() override;
349
399
 
350
400
  void ShutdownLocked() override;
351
401
 
352
402
  // Helper functions used in UpdateLocked().
353
403
  void ProcessAddressesAndChannelArgsLocked(const ServerAddressList& addresses,
354
404
  const grpc_channel_args& args);
405
+ static ServerAddressList AddNullLbTokenToAddresses(
406
+ const ServerAddressList& addresses);
355
407
 
356
408
  void CancelBalancerChannelConnectivityWatchLocked();
357
409
 
@@ -389,6 +441,8 @@ class GrpcLb : public LoadBalancingPolicy {
389
441
  StateWatcher* watcher_ = nullptr;
390
442
  // Response generator to inject address updates into lb_channel_.
391
443
  RefCountedPtr<FakeResolverResponseGenerator> response_generator_;
444
+ // Parent channelz node.
445
+ RefCountedPtr<channelz::ChannelNode> parent_channelz_node_;
392
446
 
393
447
  // The data associated with the current LB call. It holds a ref to this LB
394
448
  // policy. It's initialized every time we query for backends. It's reset to
@@ -473,44 +527,6 @@ std::string GrpcLb::Serverlist::AsText() const {
473
527
  return absl::StrJoin(entries, "");
474
528
  }
475
529
 
476
- // vtables for channel args for LB token and client stats.
477
- void* lb_token_copy(void* token) {
478
- return gpr_strdup(static_cast<char*>(token));
479
- }
480
- void lb_token_destroy(void* token) { gpr_free(token); }
481
- void* client_stats_copy(void* p) {
482
- GrpcLbClientStats* client_stats = static_cast<GrpcLbClientStats*>(p);
483
- client_stats->Ref().release();
484
- return p;
485
- }
486
- void client_stats_destroy(void* p) {
487
- GrpcLbClientStats* client_stats = static_cast<GrpcLbClientStats*>(p);
488
- client_stats->Unref();
489
- }
490
- int equal_cmp(void* /*p1*/, void* /*p2*/) {
491
- // Always indicate a match, since we don't want this channel arg to
492
- // affect the subchannel's key in the index.
493
- // TODO(roth): Is this right? This does prevent us from needlessly
494
- // recreating the subchannel whenever the LB token or client stats
495
- // changes (i.e., when the balancer call is terminated and reestablished).
496
- // However, it means that we don't actually recreate the subchannel,
497
- // which means that we won't ever switch over to using the new LB
498
- // token or client stats. A better approach might be to find somewhere
499
- // other than the subchannel args to store the LB token and client
500
- // stats. They could be stored in a map and then looked up for each
501
- // call. Or we could do something more complicated whereby
502
- // we create our own subchannel wrapper to store them, although that would
503
- // involve a lot of refcounting overhead.
504
- // Given that we're trying to move from grpclb to xds at this point,
505
- // and that no one has actually reported any problems with this, we
506
- // probably won't bother fixing this at this point.
507
- return 0;
508
- }
509
- const grpc_arg_pointer_vtable lb_token_arg_vtable = {
510
- lb_token_copy, lb_token_destroy, equal_cmp};
511
- const grpc_arg_pointer_vtable client_stats_arg_vtable = {
512
- client_stats_copy, client_stats_destroy, equal_cmp};
513
-
514
530
  bool IsServerValid(const GrpcLbServer& server, size_t idx, bool log) {
515
531
  if (server.drop) return false;
516
532
  if (GPR_UNLIKELY(server.port >> 16 != 0)) {
@@ -536,6 +552,8 @@ bool IsServerValid(const GrpcLbServer& server, size_t idx, bool log) {
536
552
  // Returns addresses extracted from the serverlist.
537
553
  ServerAddressList GrpcLb::Serverlist::GetServerAddressList(
538
554
  GrpcLbClientStats* client_stats) const {
555
+ RefCountedPtr<GrpcLbClientStats> stats;
556
+ if (client_stats != nullptr) stats = client_stats->Ref();
539
557
  ServerAddressList addresses;
540
558
  for (size_t i = 0; i < serverlist_.size(); ++i) {
541
559
  const GrpcLbServer& server = serverlist_[i];
@@ -544,34 +562,23 @@ ServerAddressList GrpcLb::Serverlist::GetServerAddressList(
544
562
  grpc_resolved_address addr;
545
563
  ParseServer(server, &addr);
546
564
  // LB token processing.
547
- char lb_token[GPR_ARRAY_SIZE(server.load_balance_token) + 1];
548
- if (server.load_balance_token[0] != 0) {
549
- const size_t lb_token_max_length =
550
- GPR_ARRAY_SIZE(server.load_balance_token);
551
- const size_t lb_token_length =
552
- strnlen(server.load_balance_token, lb_token_max_length);
553
- memcpy(lb_token, server.load_balance_token, lb_token_length);
554
- lb_token[lb_token_length] = '\0';
555
- } else {
565
+ const size_t lb_token_length = strnlen(
566
+ server.load_balance_token, GPR_ARRAY_SIZE(server.load_balance_token));
567
+ std::string lb_token(server.load_balance_token, lb_token_length);
568
+ if (lb_token.empty()) {
556
569
  gpr_log(GPR_INFO,
557
570
  "Missing LB token for backend address '%s'. The empty token will "
558
571
  "be used instead",
559
572
  grpc_sockaddr_to_uri(&addr).c_str());
560
- lb_token[0] = '\0';
561
573
  }
574
+ // Attach attribute to address containing LB token and stats object.
575
+ std::map<const char*, std::unique_ptr<ServerAddress::AttributeInterface>>
576
+ attributes;
577
+ attributes[kGrpcLbAddressAttributeKey] =
578
+ absl::make_unique<TokenAndClientStatsAttribute>(std::move(lb_token),
579
+ stats);
562
580
  // Add address.
563
- absl::InlinedVector<grpc_arg, 2> args_to_add;
564
- args_to_add.emplace_back(grpc_channel_arg_pointer_create(
565
- const_cast<char*>(GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN), lb_token,
566
- &lb_token_arg_vtable));
567
- if (client_stats != nullptr) {
568
- args_to_add.emplace_back(grpc_channel_arg_pointer_create(
569
- const_cast<char*>(GRPC_ARG_GRPCLB_ADDRESS_CLIENT_STATS), client_stats,
570
- &client_stats_arg_vtable));
571
- }
572
- grpc_channel_args* args = grpc_channel_args_copy_and_add(
573
- nullptr, args_to_add.data(), args_to_add.size());
574
- addresses.emplace_back(addr, args);
581
+ addresses.emplace_back(addr, /*args=*/nullptr, std::move(attributes));
575
582
  }
576
583
  return addresses;
577
584
  }
@@ -598,7 +605,8 @@ const char* GrpcLb::Serverlist::ShouldDrop() {
598
605
  GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
599
606
  PickResult result;
600
607
  // Check if we should drop the call.
601
- const char* drop_token = serverlist_->ShouldDrop();
608
+ const char* drop_token =
609
+ serverlist_ == nullptr ? nullptr : serverlist_->ShouldDrop();
602
610
  if (drop_token != nullptr) {
603
611
  // Update client load reporting stats to indicate the number of
604
612
  // dropped calls. Note that we have to do this here instead of in
@@ -616,15 +624,12 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
616
624
  // If pick succeeded, add LB token to initial metadata.
617
625
  if (result.type == PickResult::PICK_COMPLETE &&
618
626
  result.subchannel != nullptr) {
627
+ const SubchannelWrapper* subchannel_wrapper =
628
+ static_cast<SubchannelWrapper*>(result.subchannel.get());
619
629
  // Encode client stats object into metadata for use by
620
630
  // client_load_reporting filter.
621
- const grpc_arg* arg =
622
- grpc_channel_args_find(result.subchannel->channel_args(),
623
- GRPC_ARG_GRPCLB_ADDRESS_CLIENT_STATS);
624
- if (arg != nullptr && arg->type == GRPC_ARG_POINTER &&
625
- arg->value.pointer.p != nullptr) {
626
- GrpcLbClientStats* client_stats =
627
- static_cast<GrpcLbClientStats*>(arg->value.pointer.p);
631
+ GrpcLbClientStats* client_stats = subchannel_wrapper->client_stats();
632
+ if (client_stats != nullptr) {
628
633
  client_stats->Ref().release(); // Ref passed via metadata.
629
634
  // The metadata value is a hack: we pretend the pointer points to
630
635
  // a string and rely on the client_load_reporting filter to know
@@ -636,15 +641,17 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
636
641
  client_stats->AddCallStarted();
637
642
  }
638
643
  // Encode the LB token in metadata.
639
- arg = grpc_channel_args_find(result.subchannel->channel_args(),
640
- GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN);
641
- if (arg == nullptr) {
642
- gpr_log(GPR_ERROR, "[grpclb %p picker %p] No LB token for subchannel %p",
643
- parent_, this, result.subchannel.get());
644
- abort();
644
+ // Create a new copy on the call arena, since the subchannel list
645
+ // may get refreshed between when we return this pick and when the
646
+ // initial metadata goes out on the wire.
647
+ if (!subchannel_wrapper->lb_token().empty()) {
648
+ char* lb_token = static_cast<char*>(
649
+ args.call_state->Alloc(subchannel_wrapper->lb_token().size() + 1));
650
+ strcpy(lb_token, subchannel_wrapper->lb_token().c_str());
651
+ args.initial_metadata->Add(kGrpcLbLbTokenMetadataKey, lb_token);
645
652
  }
646
- args.initial_metadata->Add(kGrpcLbLbTokenMetadataKey,
647
- static_cast<char*>(arg->value.pointer.p));
653
+ // Unwrap subchannel to pass up to the channel.
654
+ result.subchannel = subchannel_wrapper->wrapped_subchannel();
648
655
  }
649
656
  return result;
650
657
  }
@@ -654,62 +661,64 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
654
661
  //
655
662
 
656
663
  RefCountedPtr<SubchannelInterface> GrpcLb::Helper::CreateSubchannel(
657
- const grpc_channel_args& args) {
664
+ ServerAddress address, const grpc_channel_args& args) {
658
665
  if (parent_->shutting_down_) return nullptr;
659
- return parent_->channel_control_helper()->CreateSubchannel(args);
666
+ const TokenAndClientStatsAttribute* attribute =
667
+ static_cast<const TokenAndClientStatsAttribute*>(
668
+ address.GetAttribute(kGrpcLbAddressAttributeKey));
669
+ if (attribute == nullptr) {
670
+ gpr_log(GPR_ERROR,
671
+ "[grpclb %p] no TokenAndClientStatsAttribute for address %p",
672
+ parent_.get(), address.ToString().c_str());
673
+ abort();
674
+ }
675
+ std::string lb_token = attribute->lb_token();
676
+ RefCountedPtr<GrpcLbClientStats> client_stats = attribute->client_stats();
677
+ return MakeRefCounted<SubchannelWrapper>(
678
+ parent_->channel_control_helper()->CreateSubchannel(std::move(address),
679
+ args),
680
+ std::move(lb_token), std::move(client_stats));
660
681
  }
661
682
 
662
683
  void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
684
+ const absl::Status& status,
663
685
  std::unique_ptr<SubchannelPicker> picker) {
664
686
  if (parent_->shutting_down_) return;
665
687
  // Record whether child policy reports READY.
666
688
  parent_->child_policy_ready_ = state == GRPC_CHANNEL_READY;
667
689
  // Enter fallback mode if needed.
668
690
  parent_->MaybeEnterFallbackModeAfterStartup();
669
- // There are three cases to consider here:
670
- // 1. We're in fallback mode. In this case, we're always going to use
671
- // the child policy's result, so we pass its picker through as-is.
672
- // 2. The serverlist contains only drop entries. In this case, we
673
- // want to use our own picker so that we can return the drops.
674
- // 3. Not in fallback mode and serverlist is not all drops (i.e., it
675
- // may be empty or contain at least one backend address). There are
676
- // two sub-cases:
677
- // a. The child policy is reporting state READY. In this case, we wrap
678
- // the child's picker in our own, so that we can handle drops and LB
679
- // token metadata for each pick.
680
- // b. The child policy is reporting a state other than READY. In this
681
- // case, we don't want to use our own picker, because we don't want
682
- // to process drops for picks that yield a QUEUE result; this would
683
- // result in dropping too many calls, since we will see the
684
- // queued picks multiple times, and we'd consider each one a
685
- // separate call for the drop calculation.
686
- //
687
- // Cases 1 and 3b: return picker from the child policy as-is.
688
- if (parent_->serverlist_ == nullptr ||
689
- (!parent_->serverlist_->ContainsAllDropEntries() &&
690
- state != GRPC_CHANNEL_READY)) {
691
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
692
- gpr_log(GPR_INFO,
693
- "[grpclb %p helper %p] state=%s passing child picker %p as-is",
694
- parent_.get(), this, ConnectivityStateName(state), picker.get());
695
- }
696
- parent_->channel_control_helper()->UpdateState(state, std::move(picker));
697
- return;
698
- }
699
- // Cases 2 and 3a: wrap picker from the child in our own picker.
700
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
701
- gpr_log(GPR_INFO, "[grpclb %p helper %p] state=%s wrapping child picker %p",
702
- parent_.get(), this, ConnectivityStateName(state), picker.get());
691
+ // We pass the serverlist to the picker so that it can handle drops.
692
+ // However, we don't want to handle drops in the case where the child
693
+ // policy is reporting a state other than READY (unless we are
694
+ // dropping *all* calls), because we don't want to process drops for picks
695
+ // that yield a QUEUE result; this would result in dropping too many calls,
696
+ // since we will see the queued picks multiple times, and we'd consider each
697
+ // one a separate call for the drop calculation. So in this case, we pass
698
+ // a null serverlist to the picker, which tells it not to do drops.
699
+ RefCountedPtr<Serverlist> serverlist;
700
+ if (state == GRPC_CHANNEL_READY ||
701
+ (parent_->serverlist_ != nullptr &&
702
+ parent_->serverlist_->ContainsAllDropEntries())) {
703
+ serverlist = parent_->serverlist_;
703
704
  }
704
705
  RefCountedPtr<GrpcLbClientStats> client_stats;
705
706
  if (parent_->lb_calld_ != nullptr &&
706
707
  parent_->lb_calld_->client_stats() != nullptr) {
707
708
  client_stats = parent_->lb_calld_->client_stats()->Ref();
708
709
  }
710
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
711
+ gpr_log(GPR_INFO,
712
+ "[grpclb %p helper %p] state=%s (%s) wrapping child "
713
+ "picker %p (serverlist=%p, client_stats=%p)",
714
+ parent_.get(), this, ConnectivityStateName(state),
715
+ status.ToString().c_str(), picker.get(), serverlist.get(),
716
+ client_stats.get());
717
+ }
709
718
  parent_->channel_control_helper()->UpdateState(
710
- state,
711
- absl::make_unique<Picker>(parent_.get(), parent_->serverlist_,
712
- std::move(picker), std::move(client_stats)));
719
+ state, status,
720
+ absl::make_unique<Picker>(std::move(serverlist), std::move(picker),
721
+ std::move(client_stats)));
713
722
  }
714
723
 
715
724
  void GrpcLb::Helper::RequestReresolution() {
@@ -736,7 +745,9 @@ void GrpcLb::Helper::AddTraceEvent(TraceSeverity severity,
736
745
 
737
746
  GrpcLb::BalancerCallState::BalancerCallState(
738
747
  RefCountedPtr<LoadBalancingPolicy> parent_grpclb_policy)
739
- : InternallyRefCounted<BalancerCallState>(&grpc_lb_glb_trace),
748
+ : InternallyRefCounted<BalancerCallState>(
749
+ GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace) ? "BalancerCallState"
750
+ : nullptr),
740
751
  grpclb_policy_(std::move(parent_grpclb_policy)) {
741
752
  GPR_ASSERT(grpclb_policy_ != nullptr);
742
753
  GPR_ASSERT(!grpclb_policy()->shutting_down_);
@@ -794,7 +805,7 @@ void GrpcLb::BalancerCallState::Orphan() {
794
805
  // lb_on_balancer_status_received_ will complete the cancellation and clean
795
806
  // up. Otherwise, we are here because grpclb_policy has to orphan a failed
796
807
  // call, then the following cancellation will be a no-op.
797
- grpc_call_cancel(lb_call_, nullptr);
808
+ grpc_call_cancel_internal(lb_call_);
798
809
  if (client_load_report_timer_callback_pending_) {
799
810
  grpc_timer_cancel(&client_load_report_timer_);
800
811
  }
@@ -930,7 +941,7 @@ void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
930
941
  if (num_calls_started == 0 && num_calls_finished == 0 &&
931
942
  num_calls_finished_with_client_failed_to_send == 0 &&
932
943
  num_calls_finished_known_received == 0 &&
933
- (drop_token_counts == nullptr || drop_token_counts->size() == 0)) {
944
+ (drop_token_counts == nullptr || drop_token_counts->empty())) {
934
945
  if (last_client_load_report_counters_were_zero_) {
935
946
  ScheduleNextClientLoadReportLocked();
936
947
  return;
@@ -1280,25 +1291,18 @@ grpc_channel_args* BuildBalancerChannelArgs(
1280
1291
  GRPC_ARG_CHANNELZ_CHANNEL_NODE,
1281
1292
  };
1282
1293
  // Channel args to add.
1283
- absl::InlinedVector<grpc_arg, 3> args_to_add;
1284
- // The fake resolver response generator, which we use to inject
1285
- // address updates into the LB channel.
1286
- args_to_add.emplace_back(
1294
+ absl::InlinedVector<grpc_arg, 3> args_to_add = {
1295
+ // The fake resolver response generator, which we use to inject
1296
+ // address updates into the LB channel.
1287
1297
  grpc_core::FakeResolverResponseGenerator::MakeChannelArg(
1288
- response_generator));
1289
- // A channel arg indicating the target is a grpclb load balancer.
1290
- args_to_add.emplace_back(grpc_channel_arg_integer_create(
1291
- const_cast<char*>(GRPC_ARG_ADDRESS_IS_GRPCLB_LOAD_BALANCER), 1));
1292
- // The parent channel's channelz uuid.
1293
- channelz::ChannelNode* channelz_node = nullptr;
1294
- const grpc_arg* arg =
1295
- grpc_channel_args_find(args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1296
- if (arg != nullptr && arg->type == GRPC_ARG_POINTER &&
1297
- arg->value.pointer.p != nullptr) {
1298
- channelz_node = static_cast<channelz::ChannelNode*>(arg->value.pointer.p);
1299
- args_to_add.emplace_back(
1300
- channelz::MakeParentUuidArg(channelz_node->uuid()));
1301
- }
1298
+ response_generator),
1299
+ // A channel arg indicating the target is a grpclb load balancer.
1300
+ grpc_channel_arg_integer_create(
1301
+ const_cast<char*>(GRPC_ARG_ADDRESS_IS_GRPCLB_LOAD_BALANCER), 1),
1302
+ // Tells channelz that this is an internal channel.
1303
+ grpc_channel_arg_integer_create(
1304
+ const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
1305
+ };
1302
1306
  // Construct channel args.
1303
1307
  grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
1304
1308
  args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), args_to_add.data(),
@@ -1375,6 +1379,12 @@ void GrpcLb::ShutdownLocked() {
1375
1379
  // OnBalancerChannelConnectivityChangedLocked(), and we need to be
1376
1380
  // alive when that callback is invoked.
1377
1381
  if (lb_channel_ != nullptr) {
1382
+ if (parent_channelz_node_ != nullptr) {
1383
+ channelz::ChannelNode* child_channelz_node =
1384
+ grpc_channel_get_channelz_node(lb_channel_);
1385
+ GPR_ASSERT(child_channelz_node != nullptr);
1386
+ parent_channelz_node_->RemoveChildChannel(child_channelz_node->uuid());
1387
+ }
1378
1388
  grpc_channel_destroy(lb_channel_);
1379
1389
  lb_channel_ = nullptr;
1380
1390
  }
@@ -1428,17 +1438,13 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
1428
1438
  // helpers for UpdateLocked()
1429
1439
  //
1430
1440
 
1431
- ServerAddressList AddNullLbTokenToAddresses(
1441
+ ServerAddressList GrpcLb::AddNullLbTokenToAddresses(
1432
1442
  const ServerAddressList& addresses) {
1433
- static const char* lb_token = "";
1434
- grpc_arg arg = grpc_channel_arg_pointer_create(
1435
- const_cast<char*>(GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN),
1436
- const_cast<char*>(lb_token), &lb_token_arg_vtable);
1437
1443
  ServerAddressList addresses_out;
1438
- for (size_t i = 0; i < addresses.size(); ++i) {
1439
- addresses_out.emplace_back(
1440
- addresses[i].address(),
1441
- grpc_channel_args_copy_and_add(addresses[i].args(), &arg, 1));
1444
+ for (const ServerAddress& address : addresses) {
1445
+ addresses_out.emplace_back(address.WithAttribute(
1446
+ kGrpcLbAddressAttributeKey,
1447
+ absl::make_unique<TokenAndClientStatsAttribute>("", nullptr)));
1442
1448
  }
1443
1449
  return addresses_out;
1444
1450
  }
@@ -1465,6 +1471,16 @@ void GrpcLb::ProcessAddressesAndChannelArgsLocked(
1465
1471
  lb_channel_ =
1466
1472
  CreateGrpclbBalancerChannel(uri_str.c_str(), *lb_channel_args);
1467
1473
  GPR_ASSERT(lb_channel_ != nullptr);
1474
+ // Set up channelz linkage.
1475
+ channelz::ChannelNode* child_channelz_node =
1476
+ grpc_channel_get_channelz_node(lb_channel_);
1477
+ channelz::ChannelNode* parent_channelz_node =
1478
+ grpc_channel_args_find_pointer<channelz::ChannelNode>(
1479
+ &args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1480
+ if (child_channelz_node != nullptr && parent_channelz_node != nullptr) {
1481
+ parent_channelz_node->AddChildChannel(child_channelz_node->uuid());
1482
+ parent_channelz_node_ = parent_channelz_node->Ref();
1483
+ }
1468
1484
  }
1469
1485
  // Propagate updates to the LB channel (pick_first) through the fake
1470
1486
  // resolver.