grpc 1.34.0 → 1.35.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 (458) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +808 -2787
  3. data/etc/roots.pem +257 -573
  4. data/include/grpc/compression.h +1 -1
  5. data/include/grpc/grpc.h +14 -0
  6. data/include/grpc/grpc_security.h +61 -3
  7. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  8. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  9. data/include/grpc/impl/codegen/grpc_types.h +1 -1
  10. data/include/grpc/impl/codegen/log.h +0 -2
  11. data/include/grpc/impl/codegen/sync_windows.h +4 -0
  12. data/include/grpc/slice_buffer.h +3 -3
  13. data/include/grpc/support/sync.h +3 -3
  14. data/include/grpc/support/time.h +7 -7
  15. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -4
  16. data/src/core/ext/filters/client_channel/client_channel.cc +2734 -1498
  17. data/src/core/ext/filters/client_channel/client_channel.h +0 -4
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +4 -0
  20. data/src/core/ext/filters/client_channel/dynamic_filters.cc +186 -0
  21. data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
  22. data/src/core/ext/filters/client_channel/health/health_check_client.cc +6 -6
  23. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
  24. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +4 -5
  25. data/src/core/ext/filters/client_channel/http_proxy.cc +21 -20
  26. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy.h +2 -3
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +32 -30
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +3 -3
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +162 -20
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +0 -8
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +24 -0
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -2
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +1 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1262 -0
  37. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +7 -14
  38. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -32
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +454 -16
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -0
  42. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -9
  43. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
  44. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +18 -31
  45. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +3 -5
  46. data/src/core/ext/filters/client_channel/resolver_factory.h +6 -6
  47. data/src/core/ext/filters/client_channel/resolver_registry.cc +40 -39
  48. data/src/core/ext/filters/client_channel/resolver_registry.h +2 -2
  49. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +11 -13
  50. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +8 -8
  51. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -3
  52. data/src/core/ext/filters/client_channel/retry_throttle.h +3 -1
  53. data/src/core/ext/filters/client_channel/service_config_call_data.h +19 -1
  54. data/src/core/ext/filters/client_channel/subchannel.cc +34 -50
  55. data/src/core/ext/filters/client_channel/subchannel.h +12 -18
  56. data/src/core/ext/filters/deadline/deadline_filter.cc +4 -2
  57. data/src/core/ext/filters/http/client_authority_filter.cc +6 -6
  58. data/src/core/ext/filters/http/http_filters_plugin.cc +6 -3
  59. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
  60. data/src/core/ext/filters/workarounds/workaround_utils.cc +1 -1
  61. data/src/core/ext/transport/chttp2/client/authority.cc +3 -3
  62. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +20 -8
  63. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +21 -10
  64. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +26 -14
  65. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +178 -86
  66. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +12 -5
  67. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +7 -8
  68. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
  69. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
  70. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +6 -6
  71. data/src/core/ext/transport/chttp2/transport/writing.cc +1 -1
  72. data/src/core/ext/transport/inproc/inproc_transport.cc +42 -8
  73. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -0
  74. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  75. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
  76. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +27 -27
  77. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +139 -40
  78. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +13 -13
  79. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +44 -17
  80. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +111 -111
  81. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +424 -241
  82. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  83. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +13 -5
  84. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +22 -22
  85. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +47 -21
  86. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +21 -21
  87. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +88 -39
  88. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +4 -4
  89. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +15 -6
  90. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +44 -44
  91. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +200 -78
  92. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +17 -17
  93. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +72 -35
  94. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  95. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +7 -0
  96. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +7 -7
  97. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +27 -11
  98. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +30 -30
  99. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +136 -49
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +39 -39
  101. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +157 -89
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +17 -9
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +47 -47
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +163 -78
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  107. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +7 -0
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +2 -2
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +9 -2
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +7 -0
  112. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +13 -13
  113. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +59 -36
  114. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +16 -16
  115. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +61 -29
  116. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +26 -26
  117. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +101 -66
  118. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  119. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +11 -3
  120. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +28 -28
  121. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +122 -77
  122. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +23 -23
  123. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +106 -54
  124. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +2 -2
  125. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +13 -0
  126. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +16 -16
  127. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +81 -35
  128. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -7
  129. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +38 -22
  130. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +203 -203
  131. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +845 -495
  132. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +5 -5
  133. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +26 -6
  134. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +3 -3
  135. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +17 -3
  136. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +87 -87
  137. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +343 -204
  138. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +1 -0
  139. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +20 -20
  140. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +85 -46
  141. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +7 -7
  142. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +33 -11
  143. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +32 -32
  144. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +118 -67
  145. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +1 -1
  146. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +7 -0
  147. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  148. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +7 -0
  149. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +29 -29
  150. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +120 -82
  151. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +1 -1
  152. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +7 -0
  153. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +1 -1
  154. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +7 -0
  155. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +7 -7
  156. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +31 -16
  157. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +1 -1
  158. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +7 -0
  159. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +1 -1
  160. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +7 -0
  161. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +5 -5
  162. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +25 -11
  163. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  164. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +7 -0
  165. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  166. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +7 -0
  167. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +6 -6
  168. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +29 -8
  169. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +2 -2
  170. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +16 -3
  171. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  172. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +19 -0
  173. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  174. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +46 -3
  175. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +8 -8
  176. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +41 -8
  177. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +1 -0
  178. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +3 -3
  179. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +15 -2
  180. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +3 -3
  181. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +19 -0
  182. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  183. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +7 -0
  184. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -0
  185. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +34 -34
  186. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +149 -72
  187. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +34 -34
  188. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +142 -59
  189. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  190. data/src/core/ext/upb-generated/google/api/http.upb.h +25 -6
  191. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  192. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +7 -0
  193. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +90 -90
  194. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +455 -292
  195. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  196. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +7 -0
  197. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  198. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +7 -0
  199. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +4 -4
  200. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +22 -3
  201. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  202. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +7 -0
  203. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +9 -9
  204. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +55 -0
  205. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  206. data/src/core/ext/upb-generated/google/rpc/status.upb.h +10 -3
  207. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +4 -4
  208. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +11 -3
  209. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +41 -41
  210. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +149 -76
  211. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +5 -5
  212. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +21 -6
  213. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  214. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +13 -0
  215. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +17 -17
  216. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +82 -25
  217. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  218. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +19 -0
  219. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  220. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
  221. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -0
  222. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +2 -2
  223. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +9 -2
  224. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  225. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
  226. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +1 -1
  227. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +7 -0
  228. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +5 -5
  229. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +21 -7
  230. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +2 -2
  231. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +7 -0
  232. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +4 -4
  233. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +17 -8
  234. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +7 -7
  235. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +31 -18
  236. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +5 -5
  237. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +19 -11
  238. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +3 -3
  239. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +7 -0
  240. data/src/core/ext/upb-generated/validate/validate.upb.c +64 -64
  241. data/src/core/ext/upb-generated/validate/validate.upb.h +296 -157
  242. data/src/core/ext/xds/certificate_provider_store.cc +10 -7
  243. data/src/core/ext/xds/certificate_provider_store.h +12 -7
  244. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +25 -0
  245. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +1 -4
  246. data/src/core/ext/xds/xds_api.cc +220 -31
  247. data/src/core/ext/xds/xds_api.h +41 -10
  248. data/src/core/ext/xds/xds_bootstrap.h +0 -1
  249. data/src/core/ext/xds/xds_certificate_provider.cc +61 -2
  250. data/src/core/ext/xds/xds_certificate_provider.h +40 -2
  251. data/src/core/ext/xds/xds_client.cc +31 -29
  252. data/src/core/ext/xds/xds_client.h +6 -1
  253. data/src/core/ext/xds/xds_client_stats.cc +2 -2
  254. data/src/core/ext/xds/xds_server_config_fetcher.cc +131 -0
  255. data/src/core/lib/channel/channel_args.cc +8 -8
  256. data/src/core/lib/channel/channel_trace.h +1 -1
  257. data/src/core/lib/channel/channelz.cc +13 -14
  258. data/src/core/lib/channel/channelz.h +0 -1
  259. data/src/core/lib/channel/channelz_registry.h +0 -1
  260. data/src/core/lib/channel/handshaker.cc +2 -2
  261. data/src/core/lib/compression/compression_args.cc +3 -2
  262. data/src/core/lib/debug/stats.h +2 -2
  263. data/src/core/lib/debug/stats_data.h +13 -13
  264. data/src/core/lib/gpr/alloc.cc +3 -2
  265. data/src/core/lib/gpr/log.cc +53 -16
  266. data/src/core/lib/gpr/log_linux.cc +3 -1
  267. data/src/core/lib/gpr/log_posix.cc +3 -1
  268. data/src/core/lib/gpr/log_windows.cc +3 -1
  269. data/src/core/lib/gpr/spinlock.h +10 -2
  270. data/src/core/lib/gpr/string.cc +22 -21
  271. data/src/core/lib/gpr/string.h +5 -6
  272. data/src/core/lib/gpr/sync.cc +4 -4
  273. data/src/core/lib/gpr/time.cc +12 -12
  274. data/src/core/lib/gprpp/arena.h +3 -2
  275. data/src/core/lib/gprpp/ref_counted.h +2 -2
  276. data/src/core/lib/gprpp/ref_counted_ptr.h +9 -1
  277. data/src/core/lib/gprpp/thd_posix.cc +6 -1
  278. data/src/core/lib/gprpp/thd_windows.cc +3 -1
  279. data/src/core/lib/http/httpcli.cc +1 -1
  280. data/src/core/lib/http/httpcli.h +2 -3
  281. data/src/core/lib/http/httpcli_security_connector.cc +1 -1
  282. data/src/core/lib/http/parser.cc +1 -2
  283. data/src/core/lib/iomgr/call_combiner.cc +8 -5
  284. data/src/core/lib/iomgr/combiner.cc +2 -1
  285. data/src/core/lib/iomgr/endpoint.h +1 -1
  286. data/src/core/lib/iomgr/error.cc +15 -11
  287. data/src/core/lib/iomgr/error_internal.h +1 -1
  288. data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -13
  289. data/src/core/lib/iomgr/ev_epollex_linux.cc +17 -13
  290. data/src/core/lib/iomgr/ev_poll_posix.cc +9 -7
  291. data/src/core/lib/iomgr/exec_ctx.h +6 -4
  292. data/src/core/lib/iomgr/executor.cc +2 -1
  293. data/src/core/lib/iomgr/executor.h +1 -1
  294. data/src/core/lib/iomgr/executor/threadpool.h +1 -1
  295. data/src/core/lib/iomgr/iomgr.cc +1 -1
  296. data/src/core/lib/iomgr/load_file.h +1 -1
  297. data/src/core/lib/iomgr/lockfree_event.cc +19 -14
  298. data/src/core/lib/iomgr/lockfree_event.h +2 -2
  299. data/src/core/lib/iomgr/parse_address.cc +52 -46
  300. data/src/core/lib/iomgr/parse_address.h +13 -9
  301. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +1 -1
  302. data/src/core/lib/iomgr/pollset_set_custom.cc +1 -1
  303. data/src/core/lib/iomgr/python_util.h +1 -1
  304. data/src/core/lib/iomgr/resolve_address.cc +4 -4
  305. data/src/core/lib/iomgr/resource_quota.cc +4 -4
  306. data/src/core/lib/iomgr/sockaddr_utils.cc +10 -10
  307. data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
  308. data/src/core/lib/iomgr/socket_factory_posix.cc +3 -2
  309. data/src/core/lib/iomgr/socket_mutator.cc +3 -2
  310. data/src/core/lib/iomgr/tcp_client.cc +3 -3
  311. data/src/core/lib/iomgr/tcp_client_custom.cc +7 -6
  312. data/src/core/lib/iomgr/tcp_custom.cc +22 -17
  313. data/src/core/lib/iomgr/tcp_posix.cc +9 -6
  314. data/src/core/lib/iomgr/tcp_server_custom.cc +28 -22
  315. data/src/core/lib/iomgr/timer_custom.cc +3 -3
  316. data/src/core/lib/iomgr/timer_generic.cc +3 -3
  317. data/src/core/lib/iomgr/timer_manager.cc +2 -2
  318. data/src/core/lib/iomgr/udp_server.cc +1 -2
  319. data/src/core/lib/iomgr/udp_server.h +1 -2
  320. data/src/core/lib/iomgr/unix_sockets_posix.cc +17 -18
  321. data/src/core/lib/json/json.h +10 -0
  322. data/src/core/lib/security/authorization/evaluate_args.cc +5 -10
  323. data/src/core/lib/security/authorization/evaluate_args.h +1 -1
  324. data/src/core/lib/security/context/security_context.cc +4 -3
  325. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  326. data/src/core/lib/security/credentials/credentials.cc +6 -6
  327. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +413 -0
  328. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +80 -0
  329. data/src/core/lib/security/credentials/external/aws_request_signer.cc +15 -10
  330. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -2
  331. data/src/core/lib/security/credentials/external/external_account_credentials.cc +217 -31
  332. data/src/core/lib/security/credentials/external/external_account_credentials.h +7 -5
  333. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
  334. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +3 -4
  335. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -18
  336. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +5 -6
  337. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -1
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +18 -12
  339. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +18 -5
  340. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  341. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +3 -3
  342. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +37 -44
  343. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -4
  344. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +1 -1
  345. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -5
  346. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
  347. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +1 -6
  348. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +1 -6
  349. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +326 -5
  350. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +64 -0
  351. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +1 -1
  352. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +0 -1
  353. data/src/core/lib/security/credentials/tls/tls_credentials.cc +1 -1
  354. data/src/core/lib/security/credentials/tls/tls_utils.cc +91 -0
  355. data/src/core/lib/security/credentials/tls/tls_utils.h +38 -0
  356. data/src/core/lib/security/credentials/xds/xds_credentials.cc +140 -10
  357. data/src/core/lib/security/credentials/xds/xds_credentials.h +27 -9
  358. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -1
  359. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
  360. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +46 -13
  361. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +23 -6
  362. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  363. data/src/core/lib/security/security_connector/security_connector.cc +3 -2
  364. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -4
  365. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  366. data/src/core/lib/security/security_connector/ssl_utils.h +12 -19
  367. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +57 -12
  368. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +2 -3
  369. data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
  370. data/src/core/lib/security/transport/security_handshaker.cc +2 -2
  371. data/src/core/lib/slice/slice_intern.cc +4 -5
  372. data/src/core/lib/slice/slice_internal.h +2 -2
  373. data/src/core/lib/surface/call.cc +32 -24
  374. data/src/core/lib/surface/call_details.cc +8 -8
  375. data/src/core/lib/surface/channel.cc +16 -10
  376. data/src/core/lib/surface/channel.h +3 -2
  377. data/src/core/lib/surface/channel_init.cc +1 -1
  378. data/src/core/lib/surface/completion_queue.cc +23 -18
  379. data/src/core/lib/surface/completion_queue.h +16 -16
  380. data/src/core/lib/surface/init.cc +6 -5
  381. data/src/core/lib/surface/lame_client.cc +20 -46
  382. data/src/core/lib/surface/lame_client.h +4 -0
  383. data/src/core/lib/surface/server.cc +59 -15
  384. data/src/core/lib/surface/server.h +37 -5
  385. data/src/core/lib/surface/version.cc +1 -1
  386. data/src/core/lib/transport/authority_override.cc +6 -4
  387. data/src/core/lib/transport/authority_override.h +5 -2
  388. data/src/core/lib/transport/connectivity_state.h +6 -4
  389. data/src/core/lib/transport/error_utils.h +1 -1
  390. data/src/core/lib/transport/metadata_batch.h +4 -4
  391. data/src/core/lib/transport/static_metadata.cc +1 -1
  392. data/src/core/lib/transport/status_metadata.cc +4 -3
  393. data/src/core/lib/transport/transport.h +7 -7
  394. data/src/core/lib/uri/uri_parser.cc +131 -249
  395. data/src/core/lib/uri/uri_parser.h +57 -21
  396. data/src/core/plugin_registry/grpc_plugin_registry.cc +10 -4
  397. data/src/core/tsi/alts/crypt/gsec.cc +5 -4
  398. data/src/core/tsi/alts/frame_protector/frame_handler.cc +8 -6
  399. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  400. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +23 -23
  401. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
  402. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -4
  403. data/src/core/tsi/fake_transport_security.cc +5 -3
  404. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  405. data/src/core/tsi/ssl_transport_security.cc +62 -49
  406. data/src/core/tsi/ssl_transport_security.h +6 -6
  407. data/src/core/tsi/transport_security.cc +6 -6
  408. data/src/core/tsi/transport_security_interface.h +1 -1
  409. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  410. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -0
  411. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +31 -13
  412. data/src/ruby/lib/grpc/version.rb +1 -1
  413. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +28 -0
  414. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +18 -0
  415. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -6
  416. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  417. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
  418. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +399 -0
  419. data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
  420. data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
  421. data/third_party/upb/third_party/wyhash/wyhash.h +145 -0
  422. data/third_party/upb/upb/decode.c +248 -167
  423. data/third_party/upb/upb/decode.h +20 -1
  424. data/third_party/upb/upb/decode.int.h +163 -0
  425. data/third_party/upb/upb/decode_fast.c +1040 -0
  426. data/third_party/upb/upb/decode_fast.h +126 -0
  427. data/third_party/upb/upb/def.c +525 -516
  428. data/third_party/upb/upb/def.h +16 -31
  429. data/third_party/upb/upb/def.hpp +37 -123
  430. data/third_party/upb/upb/encode.c +227 -169
  431. data/third_party/upb/upb/encode.h +27 -2
  432. data/third_party/upb/upb/json_decode.c +1443 -0
  433. data/third_party/upb/upb/json_decode.h +23 -0
  434. data/third_party/upb/upb/json_encode.c +713 -0
  435. data/third_party/upb/upb/json_encode.h +36 -0
  436. data/third_party/upb/upb/msg.c +167 -88
  437. data/third_party/upb/upb/msg.h +174 -34
  438. data/third_party/upb/upb/port_def.inc +74 -61
  439. data/third_party/upb/upb/port_undef.inc +3 -7
  440. data/third_party/upb/upb/reflection.c +36 -19
  441. data/third_party/upb/upb/table.c +34 -197
  442. data/third_party/upb/upb/table.int.h +14 -5
  443. data/third_party/upb/upb/text_encode.c +45 -22
  444. data/third_party/upb/upb/text_encode.h +4 -1
  445. data/third_party/upb/upb/upb.c +18 -41
  446. data/third_party/upb/upb/upb.h +36 -7
  447. data/third_party/upb/upb/upb.hpp +4 -4
  448. data/third_party/upb/upb/upb.int.h +29 -0
  449. metadata +60 -46
  450. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -909
  451. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -485
  452. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
  453. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -355
  454. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -138
  455. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +0 -265
  456. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +0 -104
  457. data/src/core/lib/gprpp/map.h +0 -53
  458. data/third_party/upb/upb/port.c +0 -26
@@ -105,7 +105,7 @@ LoadBalancingPolicy::PickResult LoadBalancingPolicy::QueuePicker::Pick(
105
105
  // 2. We are currently running in the data plane mutex, but we
106
106
  // need to bounce into the control plane work_serializer to call
107
107
  // ExitIdleLocked().
108
- if (!exit_idle_called_) {
108
+ if (!exit_idle_called_ && parent_ != nullptr) {
109
109
  exit_idle_called_ = true;
110
110
  auto* parent = parent_->Ref().release(); // ref held by lambda.
111
111
  ExecCtx::Run(DEBUG_LOCATION,
@@ -30,7 +30,6 @@
30
30
  #include "src/core/ext/filters/client_channel/server_address.h"
31
31
  #include "src/core/ext/filters/client_channel/service_config.h"
32
32
  #include "src/core/ext/filters/client_channel/subchannel_interface.h"
33
- #include "src/core/lib/gprpp/map.h"
34
33
  #include "src/core/lib/gprpp/orphanable.h"
35
34
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
36
35
  #include "src/core/lib/iomgr/polling_entity.h"
@@ -95,11 +94,11 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
95
94
  /// Application-specific requests cost metrics. Metric names are
96
95
  /// determined by the application. Each value is an absolute cost
97
96
  /// (e.g. 3487 bytes of storage) associated with the request.
98
- std::map<absl::string_view, double, StringLess> request_cost;
97
+ std::map<absl::string_view, double> request_cost;
99
98
  /// Application-specific resource utilization metrics. Metric names
100
99
  /// are determined by the application. Each value is expressed as a
101
100
  /// fraction of total resources available.
102
- std::map<absl::string_view, double, StringLess> utilization;
101
+ std::map<absl::string_view, double> utilization;
103
102
  };
104
103
 
105
104
  /// Interface for accessing per-call state.
@@ -68,6 +68,7 @@
68
68
  #include "absl/strings/str_cat.h"
69
69
  #include "absl/strings/str_format.h"
70
70
  #include "absl/strings/str_join.h"
71
+ #include "absl/strings/strip.h"
71
72
 
72
73
  #include "upb/upb.hpp"
73
74
 
@@ -426,7 +427,7 @@ class GrpcLb : public LoadBalancingPolicy {
426
427
  void CreateOrUpdateChildPolicyLocked();
427
428
 
428
429
  // Who the client is trying to communicate with.
429
- const char* server_name_ = nullptr;
430
+ std::string server_name_;
430
431
  // Configurations for the policy.
431
432
  RefCountedPtr<GrpcLbConfig> config_;
432
433
 
@@ -491,7 +492,7 @@ bool GrpcLb::Serverlist::operator==(const Serverlist& other) const {
491
492
  void ParseServer(const GrpcLbServer& server, grpc_resolved_address* addr) {
492
493
  memset(addr, 0, sizeof(*addr));
493
494
  if (server.drop) return;
494
- const uint16_t netorder_port = grpc_htons((uint16_t)server.port);
495
+ const uint16_t netorder_port = grpc_htons(static_cast<uint16_t>(server.port));
495
496
  /* the addresses are given in binary format (a in(6)_addr struct) in
496
497
  * server->ip_address.bytes. */
497
498
  if (server.ip_size == 4) {
@@ -502,7 +503,8 @@ void ParseServer(const GrpcLbServer& server, grpc_resolved_address* addr) {
502
503
  addr4->sin_port = netorder_port;
503
504
  } else if (server.ip_size == 16) {
504
505
  addr->len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in6));
505
- grpc_sockaddr_in6* addr6 = (grpc_sockaddr_in6*)&addr->addr;
506
+ grpc_sockaddr_in6* addr6 =
507
+ reinterpret_cast<grpc_sockaddr_in6*>(&addr->addr);
506
508
  addr6->sin6_family = GRPC_AF_INET6;
507
509
  memcpy(&addr6->sin6_addr, server.ip_addr, server.ip_size);
508
510
  addr6->sin6_port = netorder_port;
@@ -532,17 +534,18 @@ bool IsServerValid(const GrpcLbServer& server, size_t idx, bool log) {
532
534
  if (GPR_UNLIKELY(server.port >> 16 != 0)) {
533
535
  if (log) {
534
536
  gpr_log(GPR_ERROR,
535
- "Invalid port '%d' at index %lu of serverlist. Ignoring.",
536
- server.port, (unsigned long)idx);
537
+ "Invalid port '%d' at index %" PRIuPTR
538
+ " of serverlist. Ignoring.",
539
+ server.port, idx);
537
540
  }
538
541
  return false;
539
542
  }
540
543
  if (GPR_UNLIKELY(server.ip_size != 4 && server.ip_size != 16)) {
541
544
  if (log) {
542
545
  gpr_log(GPR_ERROR,
543
- "Expected IP to be 4 or 16 bytes, got %d at index %lu of "
544
- "serverlist. Ignoring",
545
- server.ip_size, (unsigned long)idx);
546
+ "Expected IP to be 4 or 16 bytes, got %d at index %" PRIuPTR
547
+ " of serverlist. Ignoring",
548
+ server.ip_size, idx);
546
549
  }
547
550
  return false;
548
551
  }
@@ -754,8 +757,7 @@ GrpcLb::BalancerCallState::BalancerCallState(
754
757
  // Init the LB call. Note that the LB call will progress every time there's
755
758
  // activity in grpclb_policy_->interested_parties(), which is comprised of
756
759
  // the polling entities from client_channel.
757
- GPR_ASSERT(grpclb_policy()->server_name_ != nullptr);
758
- GPR_ASSERT(grpclb_policy()->server_name_[0] != '\0');
760
+ GPR_ASSERT(!grpclb_policy()->server_name_.empty());
759
761
  // Closure Initialization
760
762
  GRPC_CLOSURE_INIT(&lb_on_initial_request_sent_, OnInitialRequestSent, this,
761
763
  grpc_schedule_on_exec_ctx);
@@ -778,7 +780,7 @@ GrpcLb::BalancerCallState::BalancerCallState(
778
780
  upb::Arena arena;
779
781
  grpc_slice request_payload_slice = GrpcLbRequestCreate(
780
782
  grpclb_policy()->config_->service_name().empty()
781
- ? grpclb_policy()->server_name_
783
+ ? grpclb_policy()->server_name_.c_str()
782
784
  : grpclb_policy()->config_->service_name().c_str(),
783
785
  arena.ptr());
784
786
  send_message_payload_ =
@@ -844,8 +846,9 @@ void GrpcLb::BalancerCallState::StartQuery() {
844
846
  // with the callback.
845
847
  auto self = Ref(DEBUG_LOCATION, "on_initial_request_sent");
846
848
  self.release();
847
- call_error = grpc_call_start_batch_and_execute(
848
- lb_call_, ops, (size_t)(op - ops), &lb_on_initial_request_sent_);
849
+ call_error = grpc_call_start_batch_and_execute(lb_call_, ops,
850
+ static_cast<size_t>(op - ops),
851
+ &lb_on_initial_request_sent_);
849
852
  GPR_ASSERT(GRPC_CALL_OK == call_error);
850
853
  // Op: recv initial metadata.
851
854
  op = ops;
@@ -867,7 +870,8 @@ void GrpcLb::BalancerCallState::StartQuery() {
867
870
  self = Ref(DEBUG_LOCATION, "on_message_received");
868
871
  self.release();
869
872
  call_error = grpc_call_start_batch_and_execute(
870
- lb_call_, ops, (size_t)(op - ops), &lb_on_balancer_message_received_);
873
+ lb_call_, ops, static_cast<size_t>(op - ops),
874
+ &lb_on_balancer_message_received_);
871
875
  GPR_ASSERT(GRPC_CALL_OK == call_error);
872
876
  // Op: recv server status.
873
877
  op = ops;
@@ -883,7 +887,8 @@ void GrpcLb::BalancerCallState::StartQuery() {
883
887
  // ref instead of a new ref. When it's invoked, it's the initial ref that is
884
888
  // unreffed.
885
889
  call_error = grpc_call_start_batch_and_execute(
886
- lb_call_, ops, (size_t)(op - ops), &lb_on_balancer_status_received_);
890
+ lb_call_, ops, static_cast<size_t>(op - ops),
891
+ &lb_on_balancer_status_received_);
887
892
  GPR_ASSERT(GRPC_CALL_OK == call_error);
888
893
  }
889
894
 
@@ -1335,15 +1340,14 @@ GrpcLb::GrpcLb(Args args)
1335
1340
  const grpc_arg* arg = grpc_channel_args_find(args.args, GRPC_ARG_SERVER_URI);
1336
1341
  const char* server_uri = grpc_channel_arg_get_string(arg);
1337
1342
  GPR_ASSERT(server_uri != nullptr);
1338
- grpc_uri* uri = grpc_uri_parse(server_uri, true);
1339
- GPR_ASSERT(uri->path[0] != '\0');
1340
- server_name_ = gpr_strdup(uri->path[0] == '/' ? uri->path + 1 : uri->path);
1343
+ absl::StatusOr<URI> uri = URI::Parse(server_uri);
1344
+ GPR_ASSERT(uri.ok() && !uri->path().empty());
1345
+ server_name_ = std::string(absl::StripPrefix(uri->path(), "/"));
1341
1346
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1342
1347
  gpr_log(GPR_INFO,
1343
1348
  "[grpclb %p] Will use '%s' as the server name for LB request.",
1344
- this, server_name_);
1349
+ this, server_name_.c_str());
1345
1350
  }
1346
- grpc_uri_destroy(uri);
1347
1351
  // Record LB call timeout.
1348
1352
  arg = grpc_channel_args_find(args.args, GRPC_ARG_GRPCLB_CALL_TIMEOUT_MS);
1349
1353
  lb_call_timeout_ms_ = grpc_channel_arg_get_integer(arg, {0, 0, INT_MAX});
@@ -1353,10 +1357,7 @@ GrpcLb::GrpcLb(Args args)
1353
1357
  arg, {GRPC_GRPCLB_DEFAULT_FALLBACK_TIMEOUT_MS, 0, INT_MAX});
1354
1358
  }
1355
1359
 
1356
- GrpcLb::~GrpcLb() {
1357
- gpr_free((void*)server_name_);
1358
- grpc_channel_args_destroy(args_);
1359
- }
1360
+ GrpcLb::~GrpcLb() { grpc_channel_args_destroy(args_); }
1360
1361
 
1361
1362
  void GrpcLb::ShutdownLocked() {
1362
1363
  shutting_down_ = true;
@@ -1457,7 +1458,7 @@ void GrpcLb::ProcessAddressesAndChannelArgsLocked(
1457
1458
  // since we use this to trigger the client_load_reporting filter.
1458
1459
  static const char* args_to_remove[] = {GRPC_ARG_LB_POLICY_NAME};
1459
1460
  grpc_arg new_arg = grpc_channel_arg_string_create(
1460
- (char*)GRPC_ARG_LB_POLICY_NAME, (char*)"grpclb");
1461
+ const_cast<char*>(GRPC_ARG_LB_POLICY_NAME), const_cast<char*>("grpclb"));
1461
1462
  grpc_channel_args_destroy(args_);
1462
1463
  args_ = grpc_channel_args_copy_and_add_and_remove(
1463
1464
  &args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), &new_arg, 1);
@@ -1766,7 +1767,8 @@ bool maybe_add_client_load_reporting_filter(grpc_channel_stack_builder* builder,
1766
1767
  // will minimize the number of metadata elements that the filter
1767
1768
  // needs to iterate through to find the ClientStats object.
1768
1769
  return grpc_channel_stack_builder_prepend_filter(
1769
- builder, (const grpc_channel_filter*)arg, nullptr, nullptr);
1770
+ builder, static_cast<const grpc_channel_filter*>(arg), nullptr,
1771
+ nullptr);
1770
1772
  }
1771
1773
  return true;
1772
1774
  }
@@ -1777,10 +1779,10 @@ void grpc_lb_policy_grpclb_init() {
1777
1779
  grpc_core::LoadBalancingPolicyRegistry::Builder::
1778
1780
  RegisterLoadBalancingPolicyFactory(
1779
1781
  absl::make_unique<grpc_core::GrpcLbFactory>());
1780
- grpc_channel_init_register_stage(GRPC_CLIENT_SUBCHANNEL,
1781
- GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
1782
- maybe_add_client_load_reporting_filter,
1783
- (void*)&grpc_client_load_reporting_filter);
1782
+ grpc_channel_init_register_stage(
1783
+ GRPC_CLIENT_SUBCHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
1784
+ maybe_add_client_load_reporting_filter,
1785
+ const_cast<grpc_channel_filter*>(&grpc_client_load_reporting_filter));
1784
1786
  }
1785
1787
 
1786
1788
  void grpc_lb_policy_grpclb_shutdown() {}
@@ -155,13 +155,13 @@ grpc_millis grpc_grpclb_duration_to_millis(
155
155
 
156
156
  } // namespace
157
157
 
158
- bool GrpcLbResponseParse(const grpc_slice& encoded_grpc_grpclb_response,
158
+ bool GrpcLbResponseParse(const grpc_slice& serialized_response,
159
159
  upb_arena* arena, GrpcLbResponse* result) {
160
160
  grpc_lb_v1_LoadBalanceResponse* response =
161
161
  grpc_lb_v1_LoadBalanceResponse_parse(
162
162
  reinterpret_cast<const char*>(
163
- GRPC_SLICE_START_PTR(encoded_grpc_grpclb_response)),
164
- GRPC_SLICE_LENGTH(encoded_grpc_grpclb_response), arena);
163
+ GRPC_SLICE_START_PTR(serialized_response)),
164
+ GRPC_SLICE_LENGTH(serialized_response), arena);
165
165
  // Handle serverlist responses.
166
166
  if (ParseServerList(*response, &result->serverlist)) {
167
167
  result->type = result->SERVERLIST;
@@ -66,7 +66,7 @@ grpc_slice GrpcLbLoadReportRequestCreate(
66
66
 
67
67
  // Deserialize a grpclb response.
68
68
  bool GrpcLbResponseParse(const grpc_slice& serialized_response,
69
- upb_arena* arena, GrpcLbResponse* response);
69
+ upb_arena* arena, GrpcLbResponse* result);
70
70
 
71
71
  } // namespace grpc_core
72
72
 
@@ -24,6 +24,7 @@
24
24
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
25
25
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
26
26
  #include "src/core/ext/filters/client_channel/service_config.h"
27
+ #include "src/core/ext/xds/xds_certificate_provider.h"
27
28
  #include "src/core/ext/xds/xds_client.h"
28
29
  #include "src/core/lib/channel/channel_args.h"
29
30
  #include "src/core/lib/gprpp/memory.h"
@@ -31,6 +32,7 @@
31
32
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
32
33
  #include "src/core/lib/iomgr/closure.h"
33
34
  #include "src/core/lib/iomgr/exec_ctx.h"
35
+ #include "src/core/lib/security/credentials/xds/xds_credentials.h"
34
36
  #include "src/core/lib/transport/error_utils.h"
35
37
 
36
38
  namespace grpc_core {
@@ -121,6 +123,9 @@ class CdsLb : public LoadBalancingPolicy {
121
123
  void OnError(grpc_error* error);
122
124
  void OnResourceDoesNotExist();
123
125
 
126
+ grpc_error* UpdateXdsCertificateProvider(
127
+ const XdsApi::CdsUpdate& cluster_data);
128
+
124
129
  void MaybeDestroyChildPolicyLocked();
125
130
 
126
131
  RefCountedPtr<CdsLbConfig> config_;
@@ -134,6 +139,10 @@ class CdsLb : public LoadBalancingPolicy {
134
139
  // Note that this is not owned, so this pointer must never be derefernced.
135
140
  ClusterWatcher* cluster_watcher_ = nullptr;
136
141
 
142
+ RefCountedPtr<grpc_tls_certificate_provider> root_certificate_provider_;
143
+ RefCountedPtr<grpc_tls_certificate_provider> identity_certificate_provider_;
144
+ RefCountedPtr<XdsCertificateProvider> xds_certificate_provider_;
145
+
137
146
  // Child LB policy.
138
147
  OrphanablePtr<LoadBalancingPolicy> child_policy_;
139
148
 
@@ -312,20 +321,32 @@ void CdsLb::UpdateLocked(UpdateArgs args) {
312
321
 
313
322
  void CdsLb::OnClusterChanged(XdsApi::CdsUpdate cluster_data) {
314
323
  if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
315
- gpr_log(GPR_INFO,
316
- "[cdslb %p] received CDS update from xds client %p: "
317
- "eds_service_name=%s lrs_load_reporting_server_name=%s "
318
- "max_concurrent_requests=%d",
319
- this, xds_client_.get(), cluster_data.eds_service_name.c_str(),
320
- cluster_data.lrs_load_reporting_server_name.has_value()
321
- ? cluster_data.lrs_load_reporting_server_name.value().c_str()
322
- : "(unset)",
323
- cluster_data.max_concurrent_requests);
324
+ gpr_log(GPR_INFO, "[cdslb %p] received CDS update from xds client %p: %s",
325
+ this, xds_client_.get(), cluster_data.ToString().c_str());
326
+ }
327
+ grpc_error* error = GRPC_ERROR_NONE;
328
+ error = UpdateXdsCertificateProvider(cluster_data);
329
+ if (error != GRPC_ERROR_NONE) {
330
+ return OnError(error);
324
331
  }
325
332
  // Construct config for child policy.
326
- Json::Object child_config = {
333
+ Json::Object discovery_mechanism = {
327
334
  {"clusterName", config_->cluster()},
328
335
  {"max_concurrent_requests", cluster_data.max_concurrent_requests},
336
+ {"type", "EDS"},
337
+ };
338
+ if (!cluster_data.eds_service_name.empty()) {
339
+ discovery_mechanism["edsServiceName"] = cluster_data.eds_service_name;
340
+ }
341
+ if (cluster_data.lrs_load_reporting_server_name.has_value()) {
342
+ discovery_mechanism["lrsLoadReportingServerName"] =
343
+ cluster_data.lrs_load_reporting_server_name.value();
344
+ }
345
+ Json::Object child_config = {
346
+ {"discoveryMechanisms",
347
+ Json::Array{
348
+ discovery_mechanism,
349
+ }},
329
350
  {"localityPickingPolicy",
330
351
  Json::Array{
331
352
  Json::Object{
@@ -342,16 +363,9 @@ void CdsLb::OnClusterChanged(XdsApi::CdsUpdate cluster_data) {
342
363
  },
343
364
  }},
344
365
  };
345
- if (!cluster_data.eds_service_name.empty()) {
346
- child_config["edsServiceName"] = cluster_data.eds_service_name;
347
- }
348
- if (cluster_data.lrs_load_reporting_server_name.has_value()) {
349
- child_config["lrsLoadReportingServerName"] =
350
- cluster_data.lrs_load_reporting_server_name.value();
351
- }
352
366
  Json json = Json::Array{
353
367
  Json::Object{
354
- {"eds_experimental", std::move(child_config)},
368
+ {"xds_cluster_resolver_experimental", std::move(child_config)},
355
369
  },
356
370
  };
357
371
  if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
@@ -359,7 +373,6 @@ void CdsLb::OnClusterChanged(XdsApi::CdsUpdate cluster_data) {
359
373
  gpr_log(GPR_INFO, "[cdslb %p] generated config for child policy: %s", this,
360
374
  json_str.c_str());
361
375
  }
362
- grpc_error* error = GRPC_ERROR_NONE;
363
376
  RefCountedPtr<LoadBalancingPolicy::Config> config =
364
377
  LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(json, &error);
365
378
  if (error != GRPC_ERROR_NONE) {
@@ -389,7 +402,12 @@ void CdsLb::OnClusterChanged(XdsApi::CdsUpdate cluster_data) {
389
402
  // Update child policy.
390
403
  UpdateArgs args;
391
404
  args.config = std::move(config);
392
- args.args = grpc_channel_args_copy(args_);
405
+ if (xds_certificate_provider_ != nullptr) {
406
+ grpc_arg arg_to_add = xds_certificate_provider_->MakeChannelArg();
407
+ args.args = grpc_channel_args_copy_and_add(args_, &arg_to_add, 1);
408
+ } else {
409
+ args.args = grpc_channel_args_copy(args_);
410
+ }
393
411
  child_policy_->UpdateLocked(std::move(args));
394
412
  }
395
413
 
@@ -425,6 +443,130 @@ void CdsLb::OnResourceDoesNotExist() {
425
443
  MaybeDestroyChildPolicyLocked();
426
444
  }
427
445
 
446
+ grpc_error* CdsLb::UpdateXdsCertificateProvider(
447
+ const XdsApi::CdsUpdate& cluster_data) {
448
+ // Early out if channel is not configured to use xds security.
449
+ grpc_channel_credentials* channel_credentials =
450
+ grpc_channel_credentials_find_in_args(args_);
451
+ if (channel_credentials == nullptr ||
452
+ channel_credentials->type() != kCredentialsTypeXds) {
453
+ xds_certificate_provider_ = nullptr;
454
+ return GRPC_ERROR_NONE;
455
+ }
456
+ absl::string_view root_provider_instance_name =
457
+ cluster_data.common_tls_context.combined_validation_context
458
+ .validation_context_certificate_provider_instance.instance_name;
459
+ absl::string_view root_provider_cert_name =
460
+ cluster_data.common_tls_context.combined_validation_context
461
+ .validation_context_certificate_provider_instance.certificate_name;
462
+ absl::string_view identity_provider_instance_name =
463
+ cluster_data.common_tls_context
464
+ .tls_certificate_certificate_provider_instance.instance_name;
465
+ absl::string_view identity_provider_cert_name =
466
+ cluster_data.common_tls_context
467
+ .tls_certificate_certificate_provider_instance.certificate_name;
468
+ RefCountedPtr<XdsCertificateProvider> new_root_provider;
469
+ if (!root_provider_instance_name.empty()) {
470
+ new_root_provider =
471
+ xds_client_->certificate_provider_store()
472
+ .CreateOrGetCertificateProvider(root_provider_instance_name);
473
+ if (new_root_provider == nullptr) {
474
+ return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
475
+ absl::StrCat("Certificate provider instance name: \"",
476
+ root_provider_instance_name, "\" not recognized.")
477
+ .c_str());
478
+ }
479
+ }
480
+ if (root_certificate_provider_ != new_root_provider) {
481
+ if (root_certificate_provider_ != nullptr &&
482
+ root_certificate_provider_->interested_parties() != nullptr) {
483
+ grpc_pollset_set_del_pollset_set(
484
+ interested_parties(),
485
+ root_certificate_provider_->interested_parties());
486
+ }
487
+ if (new_root_provider != nullptr &&
488
+ new_root_provider->interested_parties() != nullptr) {
489
+ grpc_pollset_set_add_pollset_set(interested_parties(),
490
+ new_root_provider->interested_parties());
491
+ }
492
+ root_certificate_provider_ = std::move(new_root_provider);
493
+ }
494
+ RefCountedPtr<XdsCertificateProvider> new_identity_provider;
495
+ if (!identity_provider_instance_name.empty()) {
496
+ new_identity_provider =
497
+ xds_client_->certificate_provider_store()
498
+ .CreateOrGetCertificateProvider(identity_provider_instance_name);
499
+ if (new_identity_provider == nullptr) {
500
+ return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
501
+ absl::StrCat("Certificate provider instance name: \"",
502
+ identity_provider_instance_name, "\" not recognized.")
503
+ .c_str());
504
+ }
505
+ }
506
+ if (identity_certificate_provider_ != new_identity_provider) {
507
+ if (identity_certificate_provider_ != nullptr &&
508
+ identity_certificate_provider_->interested_parties() != nullptr) {
509
+ grpc_pollset_set_del_pollset_set(
510
+ interested_parties(),
511
+ identity_certificate_provider_->interested_parties());
512
+ }
513
+ if (new_identity_provider != nullptr &&
514
+ new_identity_provider->interested_parties() != nullptr) {
515
+ grpc_pollset_set_add_pollset_set(
516
+ interested_parties(), new_identity_provider->interested_parties());
517
+ }
518
+ identity_certificate_provider_ = std::move(new_identity_provider);
519
+ }
520
+ const std::vector<XdsApi::StringMatcher>& match_subject_alt_names =
521
+ cluster_data.common_tls_context.combined_validation_context
522
+ .default_validation_context.match_subject_alt_names;
523
+ if (!root_provider_instance_name.empty() &&
524
+ !identity_provider_instance_name.empty()) {
525
+ // Using mTLS configuration
526
+ if (xds_certificate_provider_ != nullptr &&
527
+ xds_certificate_provider_->ProvidesRootCerts() &&
528
+ xds_certificate_provider_->ProvidesIdentityCerts()) {
529
+ xds_certificate_provider_->UpdateRootCertNameAndDistributor(
530
+ root_provider_cert_name, root_certificate_provider_->distributor());
531
+ xds_certificate_provider_->UpdateIdentityCertNameAndDistributor(
532
+ identity_provider_cert_name,
533
+ identity_certificate_provider_->distributor());
534
+ xds_certificate_provider_->UpdateSubjectAlternativeNameMatchers(
535
+ match_subject_alt_names);
536
+ } else {
537
+ // Existing xDS certificate provider does not have mTLS configuration.
538
+ // Create new certificate provider so that new subchannel connectors are
539
+ // created.
540
+ xds_certificate_provider_ = MakeRefCounted<XdsCertificateProvider>(
541
+ root_provider_cert_name, root_certificate_provider_->distributor(),
542
+ identity_provider_cert_name,
543
+ identity_certificate_provider_->distributor(),
544
+ match_subject_alt_names);
545
+ }
546
+ } else if (!root_provider_instance_name.empty()) {
547
+ // Using TLS configuration
548
+ if (xds_certificate_provider_ != nullptr &&
549
+ xds_certificate_provider_->ProvidesRootCerts() &&
550
+ !xds_certificate_provider_->ProvidesIdentityCerts()) {
551
+ xds_certificate_provider_->UpdateRootCertNameAndDistributor(
552
+ root_provider_cert_name, root_certificate_provider_->distributor());
553
+ xds_certificate_provider_->UpdateSubjectAlternativeNameMatchers(
554
+ match_subject_alt_names);
555
+ } else {
556
+ // Existing xDS certificate provider does not have TLS configuration.
557
+ // Create new certificate provider so that new subchannel connectors are
558
+ // created.
559
+ xds_certificate_provider_ = MakeRefCounted<XdsCertificateProvider>(
560
+ root_provider_cert_name, root_certificate_provider_->distributor(),
561
+ "", nullptr, match_subject_alt_names);
562
+ }
563
+ } else {
564
+ // No configuration provided.
565
+ xds_certificate_provider_ = nullptr;
566
+ }
567
+ return GRPC_ERROR_NONE;
568
+ }
569
+
428
570
  //
429
571
  // factory
430
572
  //