grpc 1.31.0.pre1 → 1.33.0.pre1

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

Potentially problematic release.


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

Files changed (614) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +693 -16022
  3. data/include/grpc/grpc.h +0 -5
  4. data/include/grpc/grpc_security.h +47 -14
  5. data/include/grpc/impl/codegen/README.md +22 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +0 -5
  7. data/include/grpc/impl/codegen/port_platform.h +6 -1
  8. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
  9. data/src/core/ext/filters/client_channel/client_channel.cc +264 -186
  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 +34 -5
  14. data/src/core/ext/filters/client_channel/health/health_check_client.cc +6 -1
  15. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -3
  16. data/src/core/ext/filters/client_channel/lb_policy.h +3 -1
  17. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +48 -35
  18. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  19. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +9 -6
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +126 -119
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
  24. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +21 -15
  25. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +32 -13
  26. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +8 -7
  27. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +9 -32
  28. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +26 -16
  29. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +207 -129
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +453 -255
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/eds_drop.cc +571 -0
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +727 -0
  33. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  34. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +1 -1
  35. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +3 -3
  36. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  37. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  38. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
  39. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  40. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +602 -58
  41. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +28 -0
  42. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +8 -39
  43. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +4 -3
  44. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +49 -47
  45. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +5 -9
  46. data/src/core/ext/filters/client_channel/server_address.cc +120 -7
  47. data/src/core/ext/filters/client_channel/server_address.h +48 -21
  48. data/src/core/ext/filters/client_channel/service_config.cc +16 -13
  49. data/src/core/ext/filters/client_channel/service_config.h +7 -4
  50. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  51. data/src/core/ext/filters/client_channel/service_config_parser.cc +8 -6
  52. data/src/core/ext/filters/client_channel/service_config_parser.h +8 -5
  53. data/src/core/ext/filters/client_channel/subchannel.cc +64 -23
  54. data/src/core/ext/filters/client_channel/subchannel.h +16 -4
  55. data/src/core/ext/filters/client_channel/subchannel_interface.h +44 -0
  56. data/src/core/ext/filters/max_age/max_age_filter.cc +2 -1
  57. data/src/core/ext/filters/message_size/message_size_filter.cc +2 -1
  58. data/src/core/ext/filters/message_size/message_size_filter.h +2 -1
  59. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
  60. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +18 -1
  61. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
  62. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +19 -25
  63. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -1
  64. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -2
  65. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +6 -6
  66. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -2
  67. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +256 -287
  68. data/src/core/ext/transport/chttp2/transport/flow_control.cc +11 -3
  69. data/src/core/ext/transport/chttp2/transport/flow_control.h +10 -0
  70. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  71. data/src/core/ext/transport/chttp2/transport/internal.h +10 -1
  72. data/src/core/ext/transport/chttp2/transport/parsing.cc +17 -30
  73. data/src/core/ext/transport/chttp2/transport/writing.cc +6 -5
  74. data/src/core/ext/transport/inproc/inproc_transport.cc +12 -12
  75. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +244 -0
  76. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +766 -0
  77. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  78. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
  79. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +458 -0
  80. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1635 -0
  81. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
  82. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
  83. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
  84. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
  85. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +124 -0
  86. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +379 -0
  87. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
  88. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
  89. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +310 -0
  90. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
  91. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +103 -0
  92. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +351 -0
  93. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  94. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
  95. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +53 -0
  96. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +133 -0
  97. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +241 -0
  98. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +752 -0
  99. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
  101. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +176 -0
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +645 -0
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
  107. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +36 -0
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +85 -0
  111. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
  112. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
  113. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  114. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
  115. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  116. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
  117. data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
  118. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
  119. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +128 -0
  120. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +467 -0
  121. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +155 -0
  122. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +539 -0
  123. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
  124. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
  125. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +178 -0
  126. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +616 -0
  127. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
  128. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
  129. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +900 -0
  130. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +3290 -0
  131. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +60 -0
  132. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +139 -0
  133. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
  134. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
  135. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +364 -0
  136. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1336 -0
  137. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
  138. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
  139. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +110 -0
  140. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +387 -0
  141. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +76 -0
  142. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +214 -0
  143. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +147 -0
  144. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +570 -0
  145. data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
  146. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
  147. data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
  148. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
  149. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +139 -0
  150. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +449 -0
  151. data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
  152. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
  153. data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
  154. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
  155. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
  156. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
  157. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
  158. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
  159. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
  160. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
  161. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  162. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
  163. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  164. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
  165. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  166. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
  167. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  168. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
  169. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +54 -0
  170. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +133 -0
  171. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  172. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
  173. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  174. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
  175. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  176. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
  177. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
  178. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -8
  179. data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
  180. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
  181. data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
  182. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
  183. data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
  184. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
  185. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +242 -0
  186. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +753 -0
  187. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
  188. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
  189. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +36 -36
  190. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +1 -1
  191. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -0
  192. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +57 -0
  193. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  194. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
  195. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +28 -0
  196. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +53 -0
  197. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +52 -0
  198. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +129 -0
  199. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +42 -0
  200. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +77 -0
  201. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +36 -0
  202. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +85 -0
  203. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +54 -0
  204. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +160 -0
  205. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +36 -0
  206. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +84 -0
  207. data/src/core/ext/upb-generated/validate/validate.upb.c +11 -11
  208. data/src/core/ext/upb-generated/validate/validate.upb.h +1 -1
  209. data/src/core/ext/xds/certificate_provider_factory.h +59 -0
  210. data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
  211. data/src/core/ext/xds/certificate_provider_registry.h +57 -0
  212. data/src/core/ext/xds/certificate_provider_store.h +50 -0
  213. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +377 -0
  214. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +102 -0
  215. data/src/core/ext/xds/xds_api.cc +2596 -0
  216. data/src/core/ext/xds/xds_api.h +397 -0
  217. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +44 -2
  218. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +8 -3
  219. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +9 -6
  220. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +541 -785
  221. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +114 -93
  222. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +20 -14
  223. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +36 -8
  224. data/src/core/lib/channel/channel_args.h +0 -1
  225. data/src/core/lib/channel/channelz.cc +24 -60
  226. data/src/core/lib/channel/channelz.h +12 -20
  227. data/src/core/lib/channel/channelz_registry.cc +15 -12
  228. data/src/core/lib/channel/channelz_registry.h +3 -0
  229. data/src/core/lib/gpr/sync_posix.cc +2 -8
  230. data/src/core/lib/gpr/time_precise.cc +2 -0
  231. data/src/core/lib/gpr/time_precise.h +6 -2
  232. data/src/core/lib/gprpp/dual_ref_counted.h +336 -0
  233. data/src/core/lib/gprpp/ref_counted.h +51 -22
  234. data/src/core/lib/gprpp/ref_counted_ptr.h +153 -0
  235. data/src/core/lib/iomgr/endpoint.cc +5 -1
  236. data/src/core/lib/iomgr/endpoint.h +7 -3
  237. data/src/core/lib/iomgr/endpoint_cfstream.cc +36 -11
  238. data/src/core/lib/iomgr/ev_posix.cc +0 -2
  239. data/src/core/lib/iomgr/exec_ctx.h +10 -8
  240. data/src/core/lib/iomgr/iomgr.cc +0 -10
  241. data/src/core/lib/iomgr/iomgr.h +0 -10
  242. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +1 -1
  243. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +3 -3
  244. data/src/core/lib/iomgr/sockaddr_utils.cc +2 -1
  245. data/src/core/lib/iomgr/sockaddr_utils.h +2 -1
  246. data/src/core/lib/iomgr/tcp_custom.cc +32 -16
  247. data/src/core/lib/iomgr/tcp_posix.cc +31 -13
  248. data/src/core/lib/iomgr/tcp_windows.cc +26 -10
  249. data/src/core/lib/json/json_util.cc +58 -0
  250. data/src/core/lib/json/json_util.h +37 -0
  251. data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
  252. data/src/core/lib/security/authorization/authorization_engine.h +84 -0
  253. data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
  254. data/src/core/lib/security/authorization/evaluate_args.h +59 -0
  255. data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
  256. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
  257. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
  258. data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
  259. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
  260. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
  261. data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
  262. data/src/core/lib/security/certificate_provider.h +60 -0
  263. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +56 -38
  264. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +321 -0
  265. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +214 -0
  266. data/src/core/lib/security/credentials/xds/xds_credentials.cc +45 -0
  267. data/src/core/lib/security/credentials/xds/xds_credentials.h +51 -0
  268. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -12
  269. data/src/core/lib/security/security_connector/ssl_utils.h +5 -0
  270. data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
  271. data/src/core/lib/surface/call.cc +12 -12
  272. data/src/core/lib/surface/call.h +2 -1
  273. data/src/core/lib/surface/channel.cc +37 -51
  274. data/src/core/lib/surface/channel.h +18 -3
  275. data/src/core/lib/surface/completion_queue.cc +10 -272
  276. data/src/core/lib/surface/completion_queue.h +0 -8
  277. data/src/core/lib/surface/init.cc +27 -12
  278. data/src/core/lib/surface/server.cc +1066 -1244
  279. data/src/core/lib/surface/server.h +363 -87
  280. data/src/core/lib/surface/version.cc +2 -2
  281. data/src/core/lib/transport/authority_override.cc +38 -0
  282. data/src/core/lib/transport/authority_override.h +32 -0
  283. data/src/core/lib/transport/bdp_estimator.h +2 -1
  284. data/src/core/lib/transport/connectivity_state.cc +18 -13
  285. data/src/core/lib/transport/connectivity_state.h +20 -8
  286. data/src/core/lib/transport/error_utils.cc +13 -0
  287. data/src/core/lib/transport/error_utils.h +6 -0
  288. data/src/core/lib/transport/metadata.cc +11 -1
  289. data/src/core/lib/transport/static_metadata.cc +295 -276
  290. data/src/core/lib/transport/static_metadata.h +80 -73
  291. data/src/core/lib/transport/transport.h +7 -0
  292. data/src/core/lib/uri/uri_parser.cc +23 -21
  293. data/src/core/lib/uri/uri_parser.h +3 -1
  294. data/src/core/plugin_registry/grpc_plugin_registry.cc +35 -20
  295. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +22 -0
  296. data/src/core/tsi/ssl_transport_security.cc +2 -2
  297. data/src/ruby/bin/math_services_pb.rb +4 -4
  298. data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
  299. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -4
  300. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +7 -7
  301. data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
  302. data/src/ruby/lib/grpc/version.rb +1 -1
  303. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  304. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
  305. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
  306. data/src/ruby/spec/channel_credentials_spec.rb +10 -0
  307. data/src/ruby/spec/generic/active_call_spec.rb +19 -8
  308. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  309. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  310. data/src/ruby/spec/pb/codegen/package_option_spec.rb +20 -0
  311. data/src/ruby/spec/user_agent_spec.rb +74 -0
  312. data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
  313. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
  314. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  315. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  316. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  317. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  318. data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
  319. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  320. data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
  321. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
  322. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
  323. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
  324. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  325. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
  326. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
  327. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  328. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
  329. data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
  330. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  331. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
  332. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
  333. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  334. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
  335. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  336. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  337. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  338. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
  339. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
  340. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
  341. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
  342. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  343. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  344. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
  345. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  346. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
  347. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
  348. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  349. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  350. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  351. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
  352. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  353. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
  354. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  355. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  356. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  357. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  358. data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
  359. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  360. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  361. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  362. data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
  363. data/third_party/abseil-cpp/absl/status/status.cc +447 -0
  364. data/third_party/abseil-cpp/absl/status/status.h +428 -0
  365. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
  366. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  367. data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
  368. data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
  369. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
  370. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  371. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  372. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  373. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  374. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  375. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  376. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
  377. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  378. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  379. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
  380. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  381. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  382. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
  383. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  384. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
  385. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
  386. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  387. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  388. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  389. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  390. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  391. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  392. data/third_party/boringssl-with-bazel/err_data.c +475 -467
  393. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +0 -6
  394. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +9 -43
  395. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
  396. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +34 -0
  397. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +4 -0
  398. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +16 -0
  399. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
  400. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +2 -0
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +4 -0
  402. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +30 -10
  403. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -15
  404. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +543 -0
  405. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +237 -0
  406. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +44 -2
  407. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +221 -49
  408. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +64 -20
  409. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +3 -3
  410. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +0 -8
  411. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +3 -3
  412. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -1
  413. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +7 -2
  414. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +21 -18
  415. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -1
  416. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +24 -3
  417. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +3 -3
  418. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
  419. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +3 -3
  420. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +29 -35
  421. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +13 -2
  422. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +9 -8
  423. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +10 -10
  424. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +2 -2
  425. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +28 -40
  426. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
  427. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +3 -1
  428. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
  429. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +7 -3
  430. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +2 -2
  431. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
  432. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +55 -8
  433. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -1
  434. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +52 -0
  435. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +0 -1
  436. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +2 -2
  437. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +6 -0
  438. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +1 -1
  439. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +12 -0
  440. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +9 -0
  441. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +4 -1
  442. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +48 -9
  443. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -3
  444. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +26 -6
  445. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +199 -78
  446. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +52 -43
  447. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +18 -18
  448. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -3
  449. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1 -1
  450. data/third_party/boringssl-with-bazel/src/ssl/internal.h +13 -9
  451. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
  452. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +8 -9
  453. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +10 -0
  454. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +34 -9
  455. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -2
  456. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +4 -8
  457. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +7 -2
  458. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  459. data/third_party/re2/re2/bitmap256.h +117 -0
  460. data/third_party/re2/re2/bitstate.cc +385 -0
  461. data/third_party/re2/re2/compile.cc +1279 -0
  462. data/third_party/re2/re2/dfa.cc +2130 -0
  463. data/third_party/re2/re2/filtered_re2.cc +121 -0
  464. data/third_party/re2/re2/filtered_re2.h +109 -0
  465. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  466. data/third_party/re2/re2/nfa.cc +713 -0
  467. data/third_party/re2/re2/onepass.cc +623 -0
  468. data/third_party/re2/re2/parse.cc +2464 -0
  469. data/third_party/re2/re2/perl_groups.cc +119 -0
  470. data/third_party/re2/re2/pod_array.h +55 -0
  471. data/third_party/re2/re2/prefilter.cc +710 -0
  472. data/third_party/re2/re2/prefilter.h +108 -0
  473. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  474. data/third_party/re2/re2/prefilter_tree.h +139 -0
  475. data/third_party/re2/re2/prog.cc +988 -0
  476. data/third_party/re2/re2/prog.h +436 -0
  477. data/third_party/re2/re2/re2.cc +1362 -0
  478. data/third_party/re2/re2/re2.h +1002 -0
  479. data/third_party/re2/re2/regexp.cc +980 -0
  480. data/third_party/re2/re2/regexp.h +659 -0
  481. data/third_party/re2/re2/set.cc +154 -0
  482. data/third_party/re2/re2/set.h +80 -0
  483. data/third_party/re2/re2/simplify.cc +657 -0
  484. data/third_party/re2/re2/sparse_array.h +392 -0
  485. data/third_party/re2/re2/sparse_set.h +264 -0
  486. data/third_party/re2/re2/stringpiece.cc +65 -0
  487. data/third_party/re2/re2/stringpiece.h +210 -0
  488. data/third_party/re2/re2/tostring.cc +351 -0
  489. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  490. data/third_party/re2/re2/unicode_casefold.h +78 -0
  491. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  492. data/third_party/re2/re2/unicode_groups.h +67 -0
  493. data/third_party/re2/re2/walker-inl.h +246 -0
  494. data/third_party/re2/util/benchmark.h +156 -0
  495. data/third_party/re2/util/flags.h +26 -0
  496. data/third_party/re2/util/logging.h +109 -0
  497. data/third_party/re2/util/malloc_counter.h +19 -0
  498. data/third_party/re2/util/mix.h +41 -0
  499. data/third_party/re2/util/mutex.h +148 -0
  500. data/third_party/re2/util/pcre.cc +1025 -0
  501. data/third_party/re2/util/pcre.h +681 -0
  502. data/third_party/re2/util/rune.cc +260 -0
  503. data/third_party/re2/util/strutil.cc +149 -0
  504. data/third_party/re2/util/strutil.h +21 -0
  505. data/third_party/re2/util/test.h +50 -0
  506. data/third_party/re2/util/utf.h +44 -0
  507. data/third_party/re2/util/util.h +42 -0
  508. data/third_party/upb/upb/decode.c +64 -15
  509. data/third_party/upb/upb/encode.c +2 -2
  510. data/third_party/upb/upb/msg.h +2 -2
  511. data/third_party/upb/upb/port_def.inc +1 -1
  512. data/third_party/upb/upb/table.c +0 -11
  513. data/third_party/upb/upb/table.int.h +0 -9
  514. data/third_party/upb/upb/upb.c +16 -14
  515. data/third_party/upb/upb/upb.h +26 -0
  516. data/third_party/upb/upb/upb.hpp +2 -0
  517. metadata +340 -153
  518. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +0 -528
  519. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +0 -1142
  520. data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -2110
  521. data/src/core/ext/filters/client_channel/xds/xds_api.h +0 -345
  522. data/src/core/ext/filters/client_channel/xds/xds_channel.h +0 -46
  523. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +0 -106
  524. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
  525. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -34
  526. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
  527. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -429
  528. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
  529. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -198
  530. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
  531. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -388
  532. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -52
  533. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
  534. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1453
  535. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
  536. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -226
  537. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  538. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -323
  539. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
  540. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -334
  541. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -79
  542. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
  543. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -891
  544. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
  545. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -328
  546. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
  547. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -71
  548. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
  549. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -649
  550. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
  551. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -693
  552. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  553. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
  554. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -536
  555. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -88
  556. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
  557. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -386
  558. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -52
  559. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
  560. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -224
  561. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
  562. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -32
  563. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
  564. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -273
  565. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
  566. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -332
  567. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -52
  568. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
  569. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -415
  570. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
  571. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -32
  572. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
  573. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -538
  574. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
  575. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -111
  576. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -52
  577. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
  578. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -204
  579. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
  580. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -32
  581. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
  582. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -2984
  583. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
  584. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -135
  585. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -52
  586. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
  587. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -732
  588. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
  589. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1167
  590. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  591. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
  592. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
  593. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -49
  594. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
  595. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -136
  596. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
  597. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -145
  598. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
  599. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  600. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
  601. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  602. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -86
  603. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -111
  604. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -61
  605. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
  606. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -250
  607. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
  608. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -29
  609. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  610. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  611. data/src/core/lib/slice/slice_hash_table.h +0 -199
  612. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
  613. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
  614. 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 {
@@ -34,6 +34,9 @@
34
34
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
35
35
  #include "src/core/lib/transport/metadata_batch.h"
36
36
 
37
+ // Channel arg key for ConfigSelector.
38
+ #define GRPC_ARG_CONFIG_SELECTOR "grpc.internal.config_selector"
39
+
37
40
  namespace grpc_core {
38
41
 
39
42
  // Internal API used to allow resolver implementations to override
@@ -52,6 +55,9 @@ class ConfigSelector : public RefCounted<ConfigSelector> {
52
55
  // The per-method parsed configs that will be passed to
53
56
  // ServiceConfigCallData.
54
57
  const ServiceConfigParser::ParsedConfigVector* method_configs = nullptr;
58
+ // A ref to the service config that contains method_configs, held by
59
+ // the call to ensure that method_configs lives long enough.
60
+ RefCountedPtr<ServiceConfig> service_config;
55
61
  // Call attributes that will be accessible to LB policy implementations.
56
62
  std::map<const char*, absl::string_view> call_attributes;
57
63
  // A callback that, if set, will be invoked when the call is
@@ -62,6 +68,19 @@ class ConfigSelector : public RefCounted<ConfigSelector> {
62
68
 
63
69
  virtual ~ConfigSelector() = default;
64
70
 
71
+ virtual const char* name() const = 0;
72
+
73
+ // Will be called only if the two objects have the same name, so
74
+ // subclasses can be free to safely down-cast the argument.
75
+ virtual bool Equals(const ConfigSelector* other) const = 0;
76
+
77
+ static bool Equals(const ConfigSelector* cs1, const ConfigSelector* cs2) {
78
+ if (cs1 == nullptr) return cs2 == nullptr;
79
+ if (cs2 == nullptr) return false;
80
+ if (strcmp(cs1->name(), cs2->name()) != 0) return false;
81
+ return cs1->Equals(cs2);
82
+ }
83
+
65
84
  virtual CallConfig GetCallConfig(GetCallConfigArgs args) = 0;
66
85
 
67
86
  grpc_arg MakeChannelArg() const;
@@ -73,14 +92,24 @@ class ConfigSelector : public RefCounted<ConfigSelector> {
73
92
  class DefaultConfigSelector : public ConfigSelector {
74
93
  public:
75
94
  explicit DefaultConfigSelector(RefCountedPtr<ServiceConfig> service_config)
76
- : service_config_(std::move(service_config)) {}
95
+ : service_config_(std::move(service_config)) {
96
+ // The client channel code ensures that this will never be null.
97
+ // If neither the resolver nor the client application provide a
98
+ // config, a default empty config will be used.
99
+ GPR_DEBUG_ASSERT(service_config_ != nullptr);
100
+ }
101
+
102
+ const char* name() const override { return "default"; }
103
+
104
+ // Only comparing the ConfigSelector itself, not the underlying
105
+ // service config, so we always return true.
106
+ bool Equals(const ConfigSelector* other) const override { return true; }
77
107
 
78
108
  CallConfig GetCallConfig(GetCallConfigArgs args) override {
79
109
  CallConfig call_config;
80
- if (service_config_ != nullptr) {
81
- call_config.method_configs =
82
- service_config_->GetMethodParsedConfigVector(*args.path);
83
- }
110
+ call_config.method_configs =
111
+ service_config_->GetMethodParsedConfigVector(*args.path);
112
+ call_config.service_config = service_config_;
84
113
  return call_config;
85
114
  }
86
115
 
@@ -91,7 +91,12 @@ void HealthCheckClient::SetHealthStatusLocked(grpc_connectivity_state state,
91
91
  gpr_log(GPR_INFO, "HealthCheckClient %p: setting state=%s reason=%s", this,
92
92
  ConnectivityStateName(state), reason);
93
93
  }
94
- if (watcher_ != nullptr) watcher_->Notify(state);
94
+ if (watcher_ != nullptr) {
95
+ watcher_->Notify(state,
96
+ state == GRPC_CHANNEL_TRANSIENT_FAILURE
97
+ ? absl::Status(absl::StatusCode::kUnavailable, reason)
98
+ : absl::Status());
99
+ }
95
100
  }
96
101
 
97
102
  void HealthCheckClient::Orphan() {
@@ -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;
@@ -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.
@@ -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.
@@ -39,13 +39,14 @@ class ChildPolicyHandler::Helper
39
39
  ~Helper() { 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 {
@@ -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";
@@ -234,6 +235,40 @@ class GrpcLb : public LoadBalancingPolicy {
234
235
  grpc_closure client_load_report_closure_;
235
236
  };
236
237
 
238
+ class TokenAndClientStatsAttribute
239
+ : public ServerAddress::AttributeInterface {
240
+ public:
241
+ TokenAndClientStatsAttribute(std::string lb_token,
242
+ RefCountedPtr<GrpcLbClientStats> client_stats)
243
+ : lb_token_(std::move(lb_token)),
244
+ client_stats_(std::move(client_stats)) {}
245
+
246
+ std::unique_ptr<AttributeInterface> Copy() const override {
247
+ return absl::make_unique<TokenAndClientStatsAttribute>(lb_token_,
248
+ client_stats_);
249
+ }
250
+
251
+ int Cmp(const AttributeInterface* other_base) const override {
252
+ const TokenAndClientStatsAttribute* other =
253
+ static_cast<const TokenAndClientStatsAttribute*>(other_base);
254
+ int r = lb_token_.compare(other->lb_token_);
255
+ if (r != 0) return r;
256
+ return GPR_ICMP(client_stats_.get(), other->client_stats_.get());
257
+ }
258
+
259
+ std::string ToString() const override {
260
+ return absl::StrFormat("lb_token=\"%s\" client_stats=%p", lb_token_,
261
+ client_stats_.get());
262
+ }
263
+
264
+ const std::string& lb_token() const { return lb_token_; }
265
+ GrpcLbClientStats* client_stats() const { return client_stats_.get(); }
266
+
267
+ private:
268
+ std::string lb_token_;
269
+ RefCountedPtr<GrpcLbClientStats> client_stats_;
270
+ };
271
+
237
272
  class Serverlist : public RefCounted<Serverlist> {
238
273
  public:
239
274
  // Takes ownership of serverlist.
@@ -303,8 +338,8 @@ class GrpcLb : public LoadBalancingPolicy {
303
338
  : parent_(std::move(parent)) {}
304
339
 
305
340
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
306
- const grpc_channel_args& args) override;
307
- void UpdateState(grpc_connectivity_state state,
341
+ ServerAddress address, const grpc_channel_args& args) override;
342
+ void UpdateState(grpc_connectivity_state state, const absl::Status& status,
308
343
  std::unique_ptr<SubchannelPicker> picker) override;
309
344
  void RequestReresolution() override;
310
345
  void AddTraceEvent(TraceSeverity severity,
@@ -323,15 +358,16 @@ class GrpcLb : public LoadBalancingPolicy {
323
358
  ~StateWatcher() { parent_.reset(DEBUG_LOCATION, "StateWatcher"); }
324
359
 
325
360
  private:
326
- void OnConnectivityStateChange(grpc_connectivity_state new_state) override {
361
+ void OnConnectivityStateChange(grpc_connectivity_state new_state,
362
+ const absl::Status& status) override {
327
363
  if (parent_->fallback_at_startup_checks_pending_ &&
328
364
  new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
329
365
  // In TRANSIENT_FAILURE. Cancel the fallback timer and go into
330
366
  // fallback mode immediately.
331
367
  gpr_log(GPR_INFO,
332
- "[grpclb %p] balancer channel in state TRANSIENT_FAILURE; "
368
+ "[grpclb %p] balancer channel in state:TRANSIENT_FAILURE (%s); "
333
369
  "entering fallback mode",
334
- parent_.get());
370
+ parent_.get(), status.ToString().c_str());
335
371
  parent_->fallback_at_startup_checks_pending_ = false;
336
372
  grpc_timer_cancel(&parent_->lb_fallback_timer_);
337
373
  parent_->fallback_mode_ = true;
@@ -352,6 +388,8 @@ class GrpcLb : public LoadBalancingPolicy {
352
388
  // Helper functions used in UpdateLocked().
353
389
  void ProcessAddressesAndChannelArgsLocked(const ServerAddressList& addresses,
354
390
  const grpc_channel_args& args);
391
+ static ServerAddressList AddNullLbTokenToAddresses(
392
+ const ServerAddressList& addresses);
355
393
 
356
394
  void CancelBalancerChannelConnectivityWatchLocked();
357
395
 
@@ -389,6 +427,8 @@ class GrpcLb : public LoadBalancingPolicy {
389
427
  StateWatcher* watcher_ = nullptr;
390
428
  // Response generator to inject address updates into lb_channel_.
391
429
  RefCountedPtr<FakeResolverResponseGenerator> response_generator_;
430
+ // Parent channelz node.
431
+ RefCountedPtr<channelz::ChannelNode> parent_channelz_node_;
392
432
 
393
433
  // The data associated with the current LB call. It holds a ref to this LB
394
434
  // policy. It's initialized every time we query for backends. It's reset to
@@ -473,44 +513,6 @@ std::string GrpcLb::Serverlist::AsText() const {
473
513
  return absl::StrJoin(entries, "");
474
514
  }
475
515
 
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
516
  bool IsServerValid(const GrpcLbServer& server, size_t idx, bool log) {
515
517
  if (server.drop) return false;
516
518
  if (GPR_UNLIKELY(server.port >> 16 != 0)) {
@@ -536,6 +538,8 @@ bool IsServerValid(const GrpcLbServer& server, size_t idx, bool log) {
536
538
  // Returns addresses extracted from the serverlist.
537
539
  ServerAddressList GrpcLb::Serverlist::GetServerAddressList(
538
540
  GrpcLbClientStats* client_stats) const {
541
+ RefCountedPtr<GrpcLbClientStats> stats;
542
+ if (client_stats != nullptr) stats = client_stats->Ref();
539
543
  ServerAddressList addresses;
540
544
  for (size_t i = 0; i < serverlist_.size(); ++i) {
541
545
  const GrpcLbServer& server = serverlist_[i];
@@ -544,34 +548,23 @@ ServerAddressList GrpcLb::Serverlist::GetServerAddressList(
544
548
  grpc_resolved_address addr;
545
549
  ParseServer(server, &addr);
546
550
  // 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 {
551
+ const size_t lb_token_length = strnlen(
552
+ server.load_balance_token, GPR_ARRAY_SIZE(server.load_balance_token));
553
+ std::string lb_token(server.load_balance_token, lb_token_length);
554
+ if (lb_token.empty()) {
556
555
  gpr_log(GPR_INFO,
557
556
  "Missing LB token for backend address '%s'. The empty token will "
558
557
  "be used instead",
559
558
  grpc_sockaddr_to_uri(&addr).c_str());
560
- lb_token[0] = '\0';
561
559
  }
560
+ // Attach attribute to address containing LB token and stats object.
561
+ std::map<const char*, std::unique_ptr<ServerAddress::AttributeInterface>>
562
+ attributes;
563
+ attributes[kGrpcLbAddressAttributeKey] =
564
+ absl::make_unique<TokenAndClientStatsAttribute>(std::move(lb_token),
565
+ stats);
562
566
  // 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);
567
+ addresses.emplace_back(addr, /*args=*/nullptr, std::move(attributes));
575
568
  }
576
569
  return addresses;
577
570
  }
@@ -616,15 +609,18 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
616
609
  // If pick succeeded, add LB token to initial metadata.
617
610
  if (result.type == PickResult::PICK_COMPLETE &&
618
611
  result.subchannel != nullptr) {
612
+ const TokenAndClientStatsAttribute* attribute =
613
+ static_cast<const TokenAndClientStatsAttribute*>(
614
+ result.subchannel->GetAttribute(kGrpcLbAddressAttributeKey));
615
+ if (attribute == nullptr) {
616
+ gpr_log(GPR_ERROR, "[grpclb %p picker %p] No LB token for subchannel %p",
617
+ parent_, this, result.subchannel.get());
618
+ abort();
619
+ }
619
620
  // Encode client stats object into metadata for use by
620
621
  // 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);
622
+ GrpcLbClientStats* client_stats = attribute->client_stats();
623
+ if (client_stats != nullptr) {
628
624
  client_stats->Ref().release(); // Ref passed via metadata.
629
625
  // The metadata value is a hack: we pretend the pointer points to
630
626
  // a string and rely on the client_load_reporting filter to know
@@ -636,15 +632,13 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
636
632
  client_stats->AddCallStarted();
637
633
  }
638
634
  // 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();
645
- }
646
- args.initial_metadata->Add(kGrpcLbLbTokenMetadataKey,
647
- static_cast<char*>(arg->value.pointer.p));
635
+ // Create a new copy on the call arena, since the subchannel list
636
+ // may get refreshed between when we return this pick and when the
637
+ // initial metadata goes out on the wire.
638
+ char* lb_token = static_cast<char*>(
639
+ args.call_state->Alloc(attribute->lb_token().size() + 1));
640
+ strcpy(lb_token, attribute->lb_token().c_str());
641
+ args.initial_metadata->Add(kGrpcLbLbTokenMetadataKey, lb_token);
648
642
  }
649
643
  return result;
650
644
  }
@@ -654,12 +648,14 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
654
648
  //
655
649
 
656
650
  RefCountedPtr<SubchannelInterface> GrpcLb::Helper::CreateSubchannel(
657
- const grpc_channel_args& args) {
651
+ ServerAddress address, const grpc_channel_args& args) {
658
652
  if (parent_->shutting_down_) return nullptr;
659
- return parent_->channel_control_helper()->CreateSubchannel(args);
653
+ return parent_->channel_control_helper()->CreateSubchannel(std::move(address),
654
+ args);
660
655
  }
661
656
 
662
657
  void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
658
+ const absl::Status& status,
663
659
  std::unique_ptr<SubchannelPicker> picker) {
664
660
  if (parent_->shutting_down_) return;
665
661
  // Record whether child policy reports READY.
@@ -690,16 +686,22 @@ void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
690
686
  state != GRPC_CHANNEL_READY)) {
691
687
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
692
688
  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());
689
+ "[grpclb %p helper %p] state=%s (%s) passing "
690
+ "child picker %p as-is",
691
+ parent_.get(), this, ConnectivityStateName(state),
692
+ status.ToString().c_str(), picker.get());
695
693
  }
696
- parent_->channel_control_helper()->UpdateState(state, std::move(picker));
694
+ parent_->channel_control_helper()->UpdateState(state, status,
695
+ std::move(picker));
697
696
  return;
698
697
  }
699
698
  // Cases 2 and 3a: wrap picker from the child in our own picker.
700
699
  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());
700
+ gpr_log(GPR_INFO,
701
+ "[grpclb %p helper %p] state=%s (%s) wrapping child "
702
+ "picker %p",
703
+ parent_.get(), this, ConnectivityStateName(state),
704
+ status.ToString().c_str(), picker.get());
703
705
  }
704
706
  RefCountedPtr<GrpcLbClientStats> client_stats;
705
707
  if (parent_->lb_calld_ != nullptr &&
@@ -707,7 +709,7 @@ void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
707
709
  client_stats = parent_->lb_calld_->client_stats()->Ref();
708
710
  }
709
711
  parent_->channel_control_helper()->UpdateState(
710
- state,
712
+ state, status,
711
713
  absl::make_unique<Picker>(parent_.get(), parent_->serverlist_,
712
714
  std::move(picker), std::move(client_stats)));
713
715
  }
@@ -794,7 +796,7 @@ void GrpcLb::BalancerCallState::Orphan() {
794
796
  // lb_on_balancer_status_received_ will complete the cancellation and clean
795
797
  // up. Otherwise, we are here because grpclb_policy has to orphan a failed
796
798
  // call, then the following cancellation will be a no-op.
797
- grpc_call_cancel(lb_call_, nullptr);
799
+ grpc_call_cancel_internal(lb_call_);
798
800
  if (client_load_report_timer_callback_pending_) {
799
801
  grpc_timer_cancel(&client_load_report_timer_);
800
802
  }
@@ -1280,25 +1282,18 @@ grpc_channel_args* BuildBalancerChannelArgs(
1280
1282
  GRPC_ARG_CHANNELZ_CHANNEL_NODE,
1281
1283
  };
1282
1284
  // 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(
1285
+ absl::InlinedVector<grpc_arg, 3> args_to_add = {
1286
+ // The fake resolver response generator, which we use to inject
1287
+ // address updates into the LB channel.
1287
1288
  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
- }
1289
+ response_generator),
1290
+ // A channel arg indicating the target is a grpclb load balancer.
1291
+ grpc_channel_arg_integer_create(
1292
+ const_cast<char*>(GRPC_ARG_ADDRESS_IS_GRPCLB_LOAD_BALANCER), 1),
1293
+ // Tells channelz that this is an internal channel.
1294
+ grpc_channel_arg_integer_create(
1295
+ const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
1296
+ };
1302
1297
  // Construct channel args.
1303
1298
  grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
1304
1299
  args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), args_to_add.data(),
@@ -1375,6 +1370,12 @@ void GrpcLb::ShutdownLocked() {
1375
1370
  // OnBalancerChannelConnectivityChangedLocked(), and we need to be
1376
1371
  // alive when that callback is invoked.
1377
1372
  if (lb_channel_ != nullptr) {
1373
+ if (parent_channelz_node_ != nullptr) {
1374
+ channelz::ChannelNode* child_channelz_node =
1375
+ grpc_channel_get_channelz_node(lb_channel_);
1376
+ GPR_ASSERT(child_channelz_node != nullptr);
1377
+ parent_channelz_node_->RemoveChildChannel(child_channelz_node->uuid());
1378
+ }
1378
1379
  grpc_channel_destroy(lb_channel_);
1379
1380
  lb_channel_ = nullptr;
1380
1381
  }
@@ -1428,17 +1429,13 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
1428
1429
  // helpers for UpdateLocked()
1429
1430
  //
1430
1431
 
1431
- ServerAddressList AddNullLbTokenToAddresses(
1432
+ ServerAddressList GrpcLb::AddNullLbTokenToAddresses(
1432
1433
  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
1434
  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));
1435
+ for (const ServerAddress& address : addresses) {
1436
+ addresses_out.emplace_back(address.WithAttribute(
1437
+ kGrpcLbAddressAttributeKey,
1438
+ absl::make_unique<TokenAndClientStatsAttribute>("", nullptr)));
1442
1439
  }
1443
1440
  return addresses_out;
1444
1441
  }
@@ -1465,6 +1462,16 @@ void GrpcLb::ProcessAddressesAndChannelArgsLocked(
1465
1462
  lb_channel_ =
1466
1463
  CreateGrpclbBalancerChannel(uri_str.c_str(), *lb_channel_args);
1467
1464
  GPR_ASSERT(lb_channel_ != nullptr);
1465
+ // Set up channelz linkage.
1466
+ channelz::ChannelNode* child_channelz_node =
1467
+ grpc_channel_get_channelz_node(lb_channel_);
1468
+ channelz::ChannelNode* parent_channelz_node =
1469
+ grpc_channel_args_find_pointer<channelz::ChannelNode>(
1470
+ &args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1471
+ if (child_channelz_node != nullptr && parent_channelz_node != nullptr) {
1472
+ parent_channelz_node->AddChildChannel(child_channelz_node->uuid());
1473
+ parent_channelz_node_ = parent_channelz_node->Ref();
1474
+ }
1468
1475
  }
1469
1476
  // Propagate updates to the LB channel (pick_first) through the fake
1470
1477
  // resolver.