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
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grpc
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.34.0
4
+ version: 1.35.0.pre1
5
5
  platform: ruby
6
6
  authors:
7
7
  - gRPC Authors
8
8
  autorequire:
9
9
  bindir: src/ruby/bin
10
10
  cert_chain: []
11
- date: 2020-12-02 00:00:00.000000000 Z
11
+ date: 2021-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: google-protobuf
@@ -282,6 +282,8 @@ files:
282
282
  - src/core/ext/filters/client_channel/config_selector.cc
283
283
  - src/core/ext/filters/client_channel/config_selector.h
284
284
  - src/core/ext/filters/client_channel/connector.h
285
+ - src/core/ext/filters/client_channel/dynamic_filters.cc
286
+ - src/core/ext/filters/client_channel/dynamic_filters.h
285
287
  - src/core/ext/filters/client_channel/global_subchannel_pool.cc
286
288
  - src/core/ext/filters/client_channel/global_subchannel_pool.h
287
289
  - src/core/ext/filters/client_channel/health/health_check_client.cc
@@ -314,10 +316,11 @@ files:
314
316
  - src/core/ext/filters/client_channel/lb_policy/subchannel_list.h
315
317
  - src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc
316
318
  - src/core/ext/filters/client_channel/lb_policy/xds/cds.cc
317
- - src/core/ext/filters/client_channel/lb_policy/xds/eds.cc
318
319
  - src/core/ext/filters/client_channel/lb_policy/xds/xds.h
320
+ - src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h
319
321
  - src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc
320
322
  - src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc
323
+ - src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc
321
324
  - src/core/ext/filters/client_channel/lb_policy_factory.h
322
325
  - src/core/ext/filters/client_channel/lb_policy_registry.cc
323
326
  - src/core/ext/filters/client_channel/lb_policy_registry.h
@@ -329,14 +332,12 @@ files:
329
332
  - src/core/ext/filters/client_channel/resolver.cc
330
333
  - src/core/ext/filters/client_channel/resolver.h
331
334
  - src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc
332
- - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc
333
335
  - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h
334
336
  - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc
335
337
  - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc
336
338
  - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc
337
339
  - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc
338
340
  - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h
339
- - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc
340
341
  - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc
341
342
  - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc
342
343
  - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc
@@ -353,8 +354,6 @@ files:
353
354
  - src/core/ext/filters/client_channel/resolver_registry.h
354
355
  - src/core/ext/filters/client_channel/resolver_result_parsing.cc
355
356
  - src/core/ext/filters/client_channel/resolver_result_parsing.h
356
- - src/core/ext/filters/client_channel/resolving_lb_policy.cc
357
- - src/core/ext/filters/client_channel/resolving_lb_policy.h
358
357
  - src/core/ext/filters/client_channel/retry_throttle.cc
359
358
  - src/core/ext/filters/client_channel/retry_throttle.h
360
359
  - src/core/ext/filters/client_channel/server_address.cc
@@ -790,8 +789,6 @@ files:
790
789
  - src/core/ext/xds/certificate_provider_store.h
791
790
  - src/core/ext/xds/file_watcher_certificate_provider_factory.cc
792
791
  - src/core/ext/xds/file_watcher_certificate_provider_factory.h
793
- - src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc
794
- - src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h
795
792
  - src/core/ext/xds/xds_api.cc
796
793
  - src/core/ext/xds/xds_api.h
797
794
  - src/core/ext/xds/xds_bootstrap.cc
@@ -803,6 +800,7 @@ files:
803
800
  - src/core/ext/xds/xds_client.h
804
801
  - src/core/ext/xds/xds_client_stats.cc
805
802
  - src/core/ext/xds/xds_client_stats.h
803
+ - src/core/ext/xds/xds_server_config_fetcher.cc
806
804
  - src/core/lib/avl/avl.cc
807
805
  - src/core/lib/avl/avl.h
808
806
  - src/core/lib/backoff/backoff.cc
@@ -913,7 +911,6 @@ files:
913
911
  - src/core/lib/gprpp/host_port.cc
914
912
  - src/core/lib/gprpp/host_port.h
915
913
  - src/core/lib/gprpp/manual_constructor.h
916
- - src/core/lib/gprpp/map.h
917
914
  - src/core/lib/gprpp/memory.h
918
915
  - src/core/lib/gprpp/mpscq.cc
919
916
  - src/core/lib/gprpp/mpscq.h
@@ -1144,6 +1141,8 @@ files:
1144
1141
  - src/core/lib/security/credentials/credentials.cc
1145
1142
  - src/core/lib/security/credentials/credentials.h
1146
1143
  - src/core/lib/security/credentials/credentials_metadata.cc
1144
+ - src/core/lib/security/credentials/external/aws_external_account_credentials.cc
1145
+ - src/core/lib/security/credentials/external/aws_external_account_credentials.h
1147
1146
  - src/core/lib/security/credentials/external/aws_request_signer.cc
1148
1147
  - src/core/lib/security/credentials/external/aws_request_signer.h
1149
1148
  - src/core/lib/security/credentials/external/external_account_credentials.cc
@@ -1182,6 +1181,8 @@ files:
1182
1181
  - src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h
1183
1182
  - src/core/lib/security/credentials/tls/tls_credentials.cc
1184
1183
  - src/core/lib/security/credentials/tls/tls_credentials.h
1184
+ - src/core/lib/security/credentials/tls/tls_utils.cc
1185
+ - src/core/lib/security/credentials/tls/tls_utils.h
1185
1186
  - src/core/lib/security/credentials/xds/xds_credentials.cc
1186
1187
  - src/core/lib/security/credentials/xds/xds_credentials.h
1187
1188
  - src/core/lib/security/security_connector/alts/alts_security_connector.cc
@@ -1515,6 +1516,7 @@ files:
1515
1516
  - third_party/abseil-cpp/absl/base/port.h
1516
1517
  - third_party/abseil-cpp/absl/base/thread_annotations.h
1517
1518
  - third_party/abseil-cpp/absl/container/fixed_array.h
1519
+ - third_party/abseil-cpp/absl/container/flat_hash_map.h
1518
1520
  - third_party/abseil-cpp/absl/container/flat_hash_set.h
1519
1521
  - third_party/abseil-cpp/absl/container/inlined_vector.h
1520
1522
  - third_party/abseil-cpp/absl/container/internal/common.h
@@ -1529,6 +1531,7 @@ files:
1529
1531
  - third_party/abseil-cpp/absl/container/internal/have_sse.h
1530
1532
  - third_party/abseil-cpp/absl/container/internal/inlined_vector.h
1531
1533
  - third_party/abseil-cpp/absl/container/internal/layout.h
1534
+ - third_party/abseil-cpp/absl/container/internal/raw_hash_map.h
1532
1535
  - third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc
1533
1536
  - third_party/abseil-cpp/absl/container/internal/raw_hash_set.h
1534
1537
  - third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc
@@ -1572,10 +1575,13 @@ files:
1572
1575
  - third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc
1573
1576
  - third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc
1574
1577
  - third_party/abseil-cpp/absl/status/internal/status_internal.h
1578
+ - third_party/abseil-cpp/absl/status/internal/statusor_internal.h
1575
1579
  - third_party/abseil-cpp/absl/status/status.cc
1576
1580
  - third_party/abseil-cpp/absl/status/status.h
1577
1581
  - third_party/abseil-cpp/absl/status/status_payload_printer.cc
1578
1582
  - third_party/abseil-cpp/absl/status/status_payload_printer.h
1583
+ - third_party/abseil-cpp/absl/status/statusor.cc
1584
+ - third_party/abseil-cpp/absl/status/statusor.h
1579
1585
  - third_party/abseil-cpp/absl/strings/ascii.cc
1580
1586
  - third_party/abseil-cpp/absl/strings/ascii.h
1581
1587
  - third_party/abseil-cpp/absl/strings/charconv.cc
@@ -2291,16 +2297,23 @@ files:
2291
2297
  - third_party/re2/util/test.h
2292
2298
  - third_party/re2/util/utf.h
2293
2299
  - third_party/re2/util/util.h
2300
+ - third_party/upb/third_party/wyhash/wyhash.h
2294
2301
  - third_party/upb/upb/decode.c
2295
2302
  - third_party/upb/upb/decode.h
2303
+ - third_party/upb/upb/decode.int.h
2304
+ - third_party/upb/upb/decode_fast.c
2305
+ - third_party/upb/upb/decode_fast.h
2296
2306
  - third_party/upb/upb/def.c
2297
2307
  - third_party/upb/upb/def.h
2298
2308
  - third_party/upb/upb/def.hpp
2299
2309
  - third_party/upb/upb/encode.c
2300
2310
  - third_party/upb/upb/encode.h
2311
+ - third_party/upb/upb/json_decode.c
2312
+ - third_party/upb/upb/json_decode.h
2313
+ - third_party/upb/upb/json_encode.c
2314
+ - third_party/upb/upb/json_encode.h
2301
2315
  - third_party/upb/upb/msg.c
2302
2316
  - third_party/upb/upb/msg.h
2303
- - third_party/upb/upb/port.c
2304
2317
  - third_party/upb/upb/port_def.inc
2305
2318
  - third_party/upb/upb/port_undef.inc
2306
2319
  - third_party/upb/upb/reflection.c
@@ -2312,6 +2325,7 @@ files:
2312
2325
  - third_party/upb/upb/upb.c
2313
2326
  - third_party/upb/upb/upb.h
2314
2327
  - third_party/upb/upb/upb.hpp
2328
+ - third_party/upb/upb/upb.int.h
2315
2329
  - third_party/zlib/adler32.c
2316
2330
  - third_party/zlib/compress.c
2317
2331
  - third_party/zlib/crc32.c
@@ -2355,55 +2369,55 @@ required_ruby_version: !ruby/object:Gem::Requirement
2355
2369
  version: 2.3.0
2356
2370
  required_rubygems_version: !ruby/object:Gem::Requirement
2357
2371
  requirements:
2358
- - - ">="
2372
+ - - ">"
2359
2373
  - !ruby/object:Gem::Version
2360
- version: '0'
2374
+ version: 1.3.1
2361
2375
  requirements: []
2362
- rubygems_version: 3.1.4
2376
+ rubygems_version: 3.2.4
2363
2377
  signing_key:
2364
2378
  specification_version: 4
2365
2379
  summary: GRPC system in Ruby
2366
2380
  test_files:
2367
- - src/ruby/spec/spec_helper.rb
2368
- - src/ruby/spec/call_spec.rb
2369
- - src/ruby/spec/google_rpc_status_utils_spec.rb
2370
- - src/ruby/spec/testdata/server1.key
2371
- - src/ruby/spec/testdata/client.pem
2381
+ - src/ruby/spec/channel_connection_spec.rb
2382
+ - src/ruby/spec/channel_credentials_spec.rb
2383
+ - src/ruby/spec/client_auth_spec.rb
2384
+ - src/ruby/spec/generic/client_interceptors_spec.rb
2385
+ - src/ruby/spec/generic/client_stub_spec.rb
2386
+ - src/ruby/spec/generic/active_call_spec.rb
2387
+ - src/ruby/spec/generic/service_spec.rb
2388
+ - src/ruby/spec/generic/interceptor_registry_spec.rb
2389
+ - src/ruby/spec/generic/rpc_server_pool_spec.rb
2390
+ - src/ruby/spec/generic/server_interceptors_spec.rb
2391
+ - src/ruby/spec/generic/rpc_desc_spec.rb
2392
+ - src/ruby/spec/generic/rpc_server_spec.rb
2393
+ - src/ruby/spec/testdata/README
2372
2394
  - src/ruby/spec/testdata/ca.pem
2373
2395
  - src/ruby/spec/testdata/server1.pem
2374
- - src/ruby/spec/testdata/README
2375
2396
  - src/ruby/spec/testdata/client.key
2376
- - src/ruby/spec/channel_credentials_spec.rb
2397
+ - src/ruby/spec/testdata/client.pem
2398
+ - src/ruby/spec/testdata/server1.key
2399
+ - src/ruby/spec/call_credentials_spec.rb
2400
+ - src/ruby/spec/google_rpc_status_utils_spec.rb
2401
+ - src/ruby/spec/spec_helper.rb
2402
+ - src/ruby/spec/server_credentials_spec.rb
2403
+ - src/ruby/spec/time_consts_spec.rb
2404
+ - src/ruby/spec/user_agent_spec.rb
2377
2405
  - src/ruby/spec/support/helpers.rb
2378
2406
  - src/ruby/spec/support/services.rb
2379
- - src/ruby/spec/channel_spec.rb
2380
- - src/ruby/spec/user_agent_spec.rb
2407
+ - src/ruby/spec/debug_message_spec.rb
2381
2408
  - src/ruby/spec/compression_options_spec.rb
2382
- - src/ruby/spec/client_auth_spec.rb
2409
+ - src/ruby/spec/call_spec.rb
2410
+ - src/ruby/spec/channel_spec.rb
2411
+ - src/ruby/spec/server_spec.rb
2412
+ - src/ruby/spec/error_sanity_spec.rb
2383
2413
  - src/ruby/spec/errors_spec.rb
2384
- - src/ruby/spec/server_credentials_spec.rb
2385
- - src/ruby/spec/time_consts_spec.rb
2414
+ - src/ruby/spec/client_server_spec.rb
2415
+ - src/ruby/spec/pb/duplicate/codegen_spec.rb
2386
2416
  - src/ruby/spec/pb/health/checker_spec.rb
2387
- - src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto
2388
- - src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto
2389
- - src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto
2390
- - src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto
2391
2417
  - src/ruby/spec/pb/codegen/grpc/testing/package_options.proto
2418
+ - src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto
2419
+ - src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto
2392
2420
  - src/ruby/spec/pb/codegen/grpc/testing/package_options_import.proto
2421
+ - src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto
2422
+ - src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto
2393
2423
  - src/ruby/spec/pb/codegen/package_option_spec.rb
2394
- - src/ruby/spec/pb/duplicate/codegen_spec.rb
2395
- - src/ruby/spec/channel_connection_spec.rb
2396
- - src/ruby/spec/client_server_spec.rb
2397
- - src/ruby/spec/server_spec.rb
2398
- - src/ruby/spec/error_sanity_spec.rb
2399
- - src/ruby/spec/debug_message_spec.rb
2400
- - src/ruby/spec/generic/rpc_desc_spec.rb
2401
- - src/ruby/spec/generic/server_interceptors_spec.rb
2402
- - src/ruby/spec/generic/client_interceptors_spec.rb
2403
- - src/ruby/spec/generic/rpc_server_pool_spec.rb
2404
- - src/ruby/spec/generic/interceptor_registry_spec.rb
2405
- - src/ruby/spec/generic/service_spec.rb
2406
- - src/ruby/spec/generic/client_stub_spec.rb
2407
- - src/ruby/spec/generic/active_call_spec.rb
2408
- - src/ruby/spec/generic/rpc_server_spec.rb
2409
- - src/ruby/spec/call_credentials_spec.rb
@@ -1,909 +0,0 @@
1
- //
2
- // Copyright 2018 gRPC authors.
3
- //
4
- // Licensed under the Apache License, Version 2.0 (the "License");
5
- // you may not use this file except in compliance with the License.
6
- // You may obtain a copy of the License at
7
- //
8
- // http://www.apache.org/licenses/LICENSE-2.0
9
- //
10
- // Unless required by applicable law or agreed to in writing, software
11
- // distributed under the License is distributed on an "AS IS" BASIS,
12
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- // See the License for the specific language governing permissions and
14
- // limitations under the License.
15
- //
16
-
17
- #include <grpc/support/port_platform.h>
18
-
19
- #include <inttypes.h>
20
- #include <limits.h>
21
-
22
- #include "absl/strings/str_cat.h"
23
- #include "absl/types/optional.h"
24
-
25
- #include <grpc/grpc.h>
26
-
27
- #include "src/core/ext/filters/client_channel/client_channel.h"
28
- #include "src/core/ext/filters/client_channel/lb_policy.h"
29
- #include "src/core/ext/filters/client_channel/lb_policy/address_filtering.h"
30
- #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
31
- #include "src/core/ext/filters/client_channel/lb_policy/xds/xds.h"
32
- #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
33
- #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
34
- #include "src/core/ext/filters/client_channel/server_address.h"
35
- #include "src/core/ext/xds/xds_channel_args.h"
36
- #include "src/core/ext/xds/xds_client.h"
37
- #include "src/core/ext/xds/xds_client_stats.h"
38
- #include "src/core/lib/channel/channel_args.h"
39
- #include "src/core/lib/gpr/string.h"
40
- #include "src/core/lib/gprpp/orphanable.h"
41
- #include "src/core/lib/gprpp/ref_counted_ptr.h"
42
- #include "src/core/lib/iomgr/work_serializer.h"
43
- #include "src/core/lib/transport/error_utils.h"
44
- #include "src/core/lib/uri/uri_parser.h"
45
-
46
- #define GRPC_EDS_DEFAULT_FALLBACK_TIMEOUT 10000
47
-
48
- namespace grpc_core {
49
-
50
- TraceFlag grpc_lb_eds_trace(false, "eds_lb");
51
-
52
- const char* kXdsLocalityNameAttributeKey = "xds_locality_name";
53
-
54
- namespace {
55
-
56
- constexpr char kEds[] = "eds_experimental";
57
-
58
- // Config for EDS LB policy.
59
- class EdsLbConfig : public LoadBalancingPolicy::Config {
60
- public:
61
- EdsLbConfig(std::string cluster_name, std::string eds_service_name,
62
- absl::optional<std::string> lrs_load_reporting_server_name,
63
- Json locality_picking_policy, Json endpoint_picking_policy,
64
- uint32_t max_concurrent_requests)
65
- : cluster_name_(std::move(cluster_name)),
66
- eds_service_name_(std::move(eds_service_name)),
67
- lrs_load_reporting_server_name_(
68
- std::move(lrs_load_reporting_server_name)),
69
- locality_picking_policy_(std::move(locality_picking_policy)),
70
- endpoint_picking_policy_(std::move(endpoint_picking_policy)),
71
- max_concurrent_requests_(max_concurrent_requests) {}
72
-
73
- const char* name() const override { return kEds; }
74
-
75
- const std::string& cluster_name() const { return cluster_name_; }
76
- const std::string& eds_service_name() const { return eds_service_name_; }
77
- const absl::optional<std::string>& lrs_load_reporting_server_name() const {
78
- return lrs_load_reporting_server_name_;
79
- };
80
- const Json& locality_picking_policy() const {
81
- return locality_picking_policy_;
82
- }
83
- const Json& endpoint_picking_policy() const {
84
- return endpoint_picking_policy_;
85
- }
86
- const uint32_t max_concurrent_requests() const {
87
- return max_concurrent_requests_;
88
- }
89
-
90
- private:
91
- std::string cluster_name_;
92
- std::string eds_service_name_;
93
- absl::optional<std::string> lrs_load_reporting_server_name_;
94
- Json locality_picking_policy_;
95
- Json endpoint_picking_policy_;
96
- uint32_t max_concurrent_requests_;
97
- };
98
-
99
- // EDS LB policy.
100
- class EdsLb : public LoadBalancingPolicy {
101
- public:
102
- EdsLb(RefCountedPtr<XdsClient> xds_client, Args args);
103
-
104
- const char* name() const override { return kEds; }
105
-
106
- void UpdateLocked(UpdateArgs args) override;
107
- void ResetBackoffLocked() override;
108
-
109
- private:
110
- class EndpointWatcher : public XdsClient::EndpointWatcherInterface {
111
- public:
112
- explicit EndpointWatcher(RefCountedPtr<EdsLb> parent)
113
- : parent_(std::move(parent)) {}
114
- void OnEndpointChanged(XdsApi::EdsUpdate update) override {
115
- new Notifier(parent_, std::move(update));
116
- }
117
- void OnError(grpc_error* error) override { new Notifier(parent_, error); }
118
- void OnResourceDoesNotExist() override { new Notifier(parent_); }
119
-
120
- private:
121
- class Notifier {
122
- public:
123
- Notifier(RefCountedPtr<EdsLb> parent, XdsApi::EdsUpdate update);
124
- Notifier(RefCountedPtr<EdsLb> parent, grpc_error* error);
125
- explicit Notifier(RefCountedPtr<EdsLb> parent);
126
-
127
- private:
128
- enum Type { kUpdate, kError, kDoesNotExist };
129
-
130
- static void RunInExecCtx(void* arg, grpc_error* error);
131
- void RunInWorkSerializer(grpc_error* error);
132
-
133
- RefCountedPtr<EdsLb> parent_;
134
- grpc_closure closure_;
135
- XdsApi::EdsUpdate update_;
136
- Type type_;
137
- };
138
-
139
- RefCountedPtr<EdsLb> parent_;
140
- };
141
-
142
- class Helper : public ChannelControlHelper {
143
- public:
144
- explicit Helper(RefCountedPtr<EdsLb> eds_policy)
145
- : eds_policy_(std::move(eds_policy)) {}
146
-
147
- ~Helper() override { eds_policy_.reset(DEBUG_LOCATION, "Helper"); }
148
-
149
- RefCountedPtr<SubchannelInterface> CreateSubchannel(
150
- ServerAddress address, const grpc_channel_args& args) override;
151
- void UpdateState(grpc_connectivity_state state, const absl::Status& status,
152
- std::unique_ptr<SubchannelPicker> picker) override;
153
- // This is a no-op, because we get the addresses from the xds
154
- // client, which is a watch-based API.
155
- void RequestReresolution() override {}
156
- void AddTraceEvent(TraceSeverity severity,
157
- absl::string_view message) override;
158
-
159
- private:
160
- RefCountedPtr<EdsLb> eds_policy_;
161
- };
162
-
163
- ~EdsLb() override;
164
-
165
- void ShutdownLocked() override;
166
-
167
- void OnEndpointChanged(XdsApi::EdsUpdate update);
168
- void OnError(grpc_error* error);
169
- void OnResourceDoesNotExist();
170
-
171
- void MaybeDestroyChildPolicyLocked();
172
-
173
- void UpdatePriorityList(XdsApi::EdsUpdate::PriorityList priority_list);
174
- void UpdateChildPolicyLocked();
175
- OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
176
- const grpc_channel_args* args);
177
- ServerAddressList CreateChildPolicyAddressesLocked();
178
- RefCountedPtr<Config> CreateChildPolicyConfigLocked();
179
- grpc_channel_args* CreateChildPolicyArgsLocked(
180
- const grpc_channel_args* args_in);
181
-
182
- // Caller must ensure that config_ is set before calling.
183
- const absl::string_view GetEdsResourceName() const {
184
- if (!is_xds_uri_) return server_name_;
185
- if (!config_->eds_service_name().empty()) {
186
- return config_->eds_service_name();
187
- }
188
- return config_->cluster_name();
189
- }
190
-
191
- // Returns a pair containing the cluster and eds_service_name to use
192
- // for LRS load reporting.
193
- // Caller must ensure that config_ is set before calling.
194
- std::pair<absl::string_view, absl::string_view> GetLrsClusterKey() const {
195
- if (!is_xds_uri_) return {server_name_, nullptr};
196
- return {config_->cluster_name(), config_->eds_service_name()};
197
- }
198
-
199
- // Server name from target URI.
200
- std::string server_name_;
201
- bool is_xds_uri_;
202
-
203
- // Current channel args and config from the resolver.
204
- const grpc_channel_args* args_ = nullptr;
205
- RefCountedPtr<EdsLbConfig> config_;
206
-
207
- // Internal state.
208
- bool shutting_down_ = false;
209
-
210
- // The xds client and endpoint watcher.
211
- RefCountedPtr<XdsClient> xds_client_;
212
- // A pointer to the endpoint watcher, to be used when cancelling the watch.
213
- // Note that this is not owned, so this pointer must never be derefernced.
214
- EndpointWatcher* endpoint_watcher_ = nullptr;
215
- // The latest data from the endpoint watcher.
216
- XdsApi::EdsUpdate::PriorityList priority_list_;
217
- // State used to retain child policy names for priority policy.
218
- std::vector<size_t /*child_number*/> priority_child_numbers_;
219
-
220
- RefCountedPtr<XdsApi::EdsUpdate::DropConfig> drop_config_;
221
-
222
- OrphanablePtr<LoadBalancingPolicy> child_policy_;
223
- };
224
-
225
- //
226
- // EdsLb::Helper
227
- //
228
-
229
- RefCountedPtr<SubchannelInterface> EdsLb::Helper::CreateSubchannel(
230
- ServerAddress address, const grpc_channel_args& args) {
231
- if (eds_policy_->shutting_down_) return nullptr;
232
- return eds_policy_->channel_control_helper()->CreateSubchannel(
233
- std::move(address), args);
234
- }
235
-
236
- void EdsLb::Helper::UpdateState(grpc_connectivity_state state,
237
- const absl::Status& status,
238
- std::unique_ptr<SubchannelPicker> picker) {
239
- if (eds_policy_->shutting_down_ || eds_policy_->child_policy_ == nullptr) {
240
- return;
241
- }
242
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
243
- gpr_log(GPR_INFO, "[edslb %p] child policy updated state=%s (%s) picker=%p",
244
- eds_policy_.get(), ConnectivityStateName(state),
245
- status.ToString().c_str(), picker.get());
246
- }
247
- eds_policy_->channel_control_helper()->UpdateState(state, status,
248
- std::move(picker));
249
- }
250
-
251
- void EdsLb::Helper::AddTraceEvent(TraceSeverity severity,
252
- absl::string_view message) {
253
- if (eds_policy_->shutting_down_) return;
254
- eds_policy_->channel_control_helper()->AddTraceEvent(severity, message);
255
- }
256
-
257
- //
258
- // EdsLb::EndpointWatcher::Notifier
259
- //
260
-
261
- EdsLb::EndpointWatcher::Notifier::Notifier(RefCountedPtr<EdsLb> parent,
262
- XdsApi::EdsUpdate update)
263
- : parent_(std::move(parent)), update_(std::move(update)), type_(kUpdate) {
264
- GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
265
- ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
266
- }
267
-
268
- EdsLb::EndpointWatcher::Notifier::Notifier(RefCountedPtr<EdsLb> parent,
269
- grpc_error* error)
270
- : parent_(std::move(parent)), type_(kError) {
271
- GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
272
- ExecCtx::Run(DEBUG_LOCATION, &closure_, error);
273
- }
274
-
275
- EdsLb::EndpointWatcher::Notifier::Notifier(RefCountedPtr<EdsLb> parent)
276
- : parent_(std::move(parent)), type_(kDoesNotExist) {
277
- GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
278
- ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
279
- }
280
-
281
- void EdsLb::EndpointWatcher::Notifier::RunInExecCtx(void* arg,
282
- grpc_error* error) {
283
- Notifier* self = static_cast<Notifier*>(arg);
284
- GRPC_ERROR_REF(error);
285
- self->parent_->work_serializer()->Run(
286
- [self, error]() { self->RunInWorkSerializer(error); }, DEBUG_LOCATION);
287
- }
288
-
289
- void EdsLb::EndpointWatcher::Notifier::RunInWorkSerializer(grpc_error* error) {
290
- switch (type_) {
291
- case kUpdate:
292
- parent_->OnEndpointChanged(std::move(update_));
293
- break;
294
- case kError:
295
- parent_->OnError(error);
296
- break;
297
- case kDoesNotExist:
298
- parent_->OnResourceDoesNotExist();
299
- break;
300
- };
301
- delete this;
302
- }
303
-
304
- //
305
- // EdsLb public methods
306
- //
307
-
308
- EdsLb::EdsLb(RefCountedPtr<XdsClient> xds_client, Args args)
309
- : LoadBalancingPolicy(std::move(args)), xds_client_(std::move(xds_client)) {
310
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
311
- gpr_log(GPR_INFO, "[edslb %p] created -- using xds client %p", this,
312
- xds_client_.get());
313
- }
314
- // Record server name.
315
- const char* server_uri =
316
- grpc_channel_args_find_string(args.args, GRPC_ARG_SERVER_URI);
317
- GPR_ASSERT(server_uri != nullptr);
318
- grpc_uri* uri = grpc_uri_parse(server_uri, true);
319
- GPR_ASSERT(uri->path[0] != '\0');
320
- server_name_ = uri->path[0] == '/' ? uri->path + 1 : uri->path;
321
- is_xds_uri_ = strcmp(uri->scheme, "xds") == 0;
322
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
323
- gpr_log(GPR_INFO, "[edslb %p] server name from channel (is_xds_uri=%d): %s",
324
- this, is_xds_uri_, server_name_.c_str());
325
- }
326
- grpc_uri_destroy(uri);
327
- // EDS-only flow.
328
- if (!is_xds_uri_) {
329
- // Setup channelz linkage.
330
- channelz::ChannelNode* parent_channelz_node =
331
- grpc_channel_args_find_pointer<channelz::ChannelNode>(
332
- args.args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
333
- if (parent_channelz_node != nullptr) {
334
- xds_client_->AddChannelzLinkage(parent_channelz_node);
335
- }
336
- // Couple polling.
337
- grpc_pollset_set_add_pollset_set(xds_client_->interested_parties(),
338
- interested_parties());
339
- }
340
- }
341
-
342
- EdsLb::~EdsLb() {
343
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
344
- gpr_log(GPR_INFO, "[edslb %p] destroying eds LB policy", this);
345
- }
346
- }
347
-
348
- void EdsLb::ShutdownLocked() {
349
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
350
- gpr_log(GPR_INFO, "[edslb %p] shutting down", this);
351
- }
352
- shutting_down_ = true;
353
- MaybeDestroyChildPolicyLocked();
354
- // Cancel watcher.
355
- if (endpoint_watcher_ != nullptr) {
356
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
357
- gpr_log(GPR_INFO, "[edslb %p] cancelling xds watch for %s", this,
358
- std::string(GetEdsResourceName()).c_str());
359
- }
360
- xds_client_->CancelEndpointDataWatch(GetEdsResourceName(),
361
- endpoint_watcher_);
362
- }
363
- if (!is_xds_uri_) {
364
- // Remove channelz linkage.
365
- channelz::ChannelNode* parent_channelz_node =
366
- grpc_channel_args_find_pointer<channelz::ChannelNode>(
367
- args_, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
368
- if (parent_channelz_node != nullptr) {
369
- xds_client_->RemoveChannelzLinkage(parent_channelz_node);
370
- }
371
- // Decouple polling.
372
- grpc_pollset_set_del_pollset_set(xds_client_->interested_parties(),
373
- interested_parties());
374
- }
375
- xds_client_.reset(DEBUG_LOCATION, "EdsLb");
376
- // Destroy channel args.
377
- grpc_channel_args_destroy(args_);
378
- args_ = nullptr;
379
- }
380
-
381
- void EdsLb::MaybeDestroyChildPolicyLocked() {
382
- if (child_policy_ != nullptr) {
383
- grpc_pollset_set_del_pollset_set(child_policy_->interested_parties(),
384
- interested_parties());
385
- child_policy_.reset();
386
- }
387
- }
388
-
389
- void EdsLb::UpdateLocked(UpdateArgs args) {
390
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
391
- gpr_log(GPR_INFO, "[edslb %p] Received update", this);
392
- }
393
- const bool is_initial_update = args_ == nullptr;
394
- // Update config.
395
- auto old_config = std::move(config_);
396
- config_ = std::move(args.config);
397
- // Update args.
398
- grpc_channel_args_destroy(args_);
399
- args_ = args.args;
400
- args.args = nullptr;
401
- // Update child policy if needed.
402
- if (child_policy_ != nullptr) UpdateChildPolicyLocked();
403
- // Create endpoint watcher if needed.
404
- if (is_initial_update) {
405
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
406
- gpr_log(GPR_INFO, "[edslb %p] starting xds watch for %s", this,
407
- std::string(GetEdsResourceName()).c_str());
408
- }
409
- auto watcher = absl::make_unique<EndpointWatcher>(
410
- Ref(DEBUG_LOCATION, "EndpointWatcher"));
411
- endpoint_watcher_ = watcher.get();
412
- xds_client_->WatchEndpointData(GetEdsResourceName(), std::move(watcher));
413
- }
414
- }
415
-
416
- void EdsLb::ResetBackoffLocked() {
417
- // When the XdsClient is instantiated in the resolver instead of in this
418
- // LB policy, this is done via the resolver, so we don't need to do it here.
419
- if (!is_xds_uri_ && xds_client_ != nullptr) xds_client_->ResetBackoff();
420
- if (child_policy_ != nullptr) {
421
- child_policy_->ResetBackoffLocked();
422
- }
423
- }
424
-
425
- void EdsLb::OnEndpointChanged(XdsApi::EdsUpdate update) {
426
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
427
- gpr_log(GPR_INFO, "[edslb %p] Received EDS update from xds client", this);
428
- }
429
- // Update the drop config.
430
- drop_config_ = std::move(update.drop_config);
431
- // If priority list is empty, add a single priority, just so that we
432
- // have a child in which to create the xds_cluster_impl policy.
433
- if (update.priorities.empty()) update.priorities.emplace_back();
434
- // Update child policy.
435
- UpdatePriorityList(std::move(update.priorities));
436
- }
437
-
438
- void EdsLb::OnError(grpc_error* error) {
439
- gpr_log(GPR_ERROR, "[edslb %p] xds watcher reported error: %s", this,
440
- grpc_error_string(error));
441
- // Go into TRANSIENT_FAILURE if we have not yet created the child
442
- // policy (i.e., we have not yet received data from xds). Otherwise,
443
- // we keep running with the data we had previously.
444
- if (child_policy_ == nullptr) {
445
- channel_control_helper()->UpdateState(
446
- GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
447
- absl::make_unique<TransientFailurePicker>(error));
448
- } else {
449
- GRPC_ERROR_UNREF(error);
450
- }
451
- }
452
-
453
- void EdsLb::OnResourceDoesNotExist() {
454
- gpr_log(
455
- GPR_ERROR,
456
- "[edslb %p] EDS resource does not exist -- reporting TRANSIENT_FAILURE",
457
- this);
458
- grpc_error* error = grpc_error_set_int(
459
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("EDS resource does not exist"),
460
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
461
- channel_control_helper()->UpdateState(
462
- GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
463
- absl::make_unique<TransientFailurePicker>(error));
464
- MaybeDestroyChildPolicyLocked();
465
- }
466
-
467
- //
468
- // child policy-related methods
469
- //
470
-
471
- void EdsLb::UpdatePriorityList(XdsApi::EdsUpdate::PriorityList priority_list) {
472
- // Build some maps from locality to child number and the reverse from
473
- // the old data in priority_list_ and priority_child_numbers_.
474
- std::map<XdsLocalityName*, size_t /*child_number*/, XdsLocalityName::Less>
475
- locality_child_map;
476
- std::map<size_t, std::set<XdsLocalityName*>> child_locality_map;
477
- for (size_t priority = 0; priority < priority_list_.size(); ++priority) {
478
- size_t child_number = priority_child_numbers_[priority];
479
- const auto& localities = priority_list_[priority].localities;
480
- for (const auto& p : localities) {
481
- XdsLocalityName* locality_name = p.first;
482
- locality_child_map[locality_name] = child_number;
483
- child_locality_map[child_number].insert(locality_name);
484
- }
485
- }
486
- // Construct new list of children.
487
- std::vector<size_t> priority_child_numbers;
488
- for (size_t priority = 0; priority < priority_list.size(); ++priority) {
489
- const auto& localities = priority_list[priority].localities;
490
- absl::optional<size_t> child_number;
491
- // If one of the localities in this priority already existed, reuse its
492
- // child number.
493
- for (const auto& p : localities) {
494
- XdsLocalityName* locality_name = p.first;
495
- if (!child_number.has_value()) {
496
- auto it = locality_child_map.find(locality_name);
497
- if (it != locality_child_map.end()) {
498
- child_number = it->second;
499
- locality_child_map.erase(it);
500
- // Remove localities that *used* to be in this child number, so
501
- // that we don't incorrectly reuse this child number for a
502
- // subsequent priority.
503
- for (XdsLocalityName* old_locality :
504
- child_locality_map[*child_number]) {
505
- locality_child_map.erase(old_locality);
506
- }
507
- }
508
- } else {
509
- // Remove all localities that are now in this child number, so
510
- // that we don't accidentally reuse this child number for a
511
- // subsequent priority.
512
- locality_child_map.erase(locality_name);
513
- }
514
- }
515
- // If we didn't find an existing child number, assign a new one.
516
- if (!child_number.has_value()) {
517
- for (child_number = 0;
518
- child_locality_map.find(*child_number) != child_locality_map.end();
519
- ++(*child_number)) {
520
- }
521
- // Add entry so we know that the child number is in use.
522
- // (Don't need to add the list of localities, since we won't use them.)
523
- child_locality_map[*child_number];
524
- }
525
- priority_child_numbers.push_back(*child_number);
526
- }
527
- // Save update.
528
- priority_list_ = std::move(priority_list);
529
- priority_child_numbers_ = std::move(priority_child_numbers);
530
- // Update child policy.
531
- UpdateChildPolicyLocked();
532
- }
533
-
534
- ServerAddressList EdsLb::CreateChildPolicyAddressesLocked() {
535
- ServerAddressList addresses;
536
- for (size_t priority = 0; priority < priority_list_.size(); ++priority) {
537
- const auto& localities = priority_list_[priority].localities;
538
- std::string priority_child_name =
539
- absl::StrCat("child", priority_child_numbers_[priority]);
540
- for (const auto& p : localities) {
541
- const auto& locality_name = p.first;
542
- const auto& locality = p.second;
543
- std::vector<std::string> hierarchical_path = {
544
- priority_child_name, locality_name->AsHumanReadableString()};
545
- for (const auto& endpoint : locality.endpoints) {
546
- addresses.emplace_back(
547
- endpoint
548
- .WithAttribute(kHierarchicalPathAttributeKey,
549
- MakeHierarchicalPathAttribute(hierarchical_path))
550
- .WithAttribute(kXdsLocalityNameAttributeKey,
551
- absl::make_unique<XdsLocalityAttribute>(
552
- locality_name->Ref())));
553
- }
554
- }
555
- }
556
- return addresses;
557
- }
558
-
559
- RefCountedPtr<LoadBalancingPolicy::Config>
560
- EdsLb::CreateChildPolicyConfigLocked() {
561
- const auto lrs_key = GetLrsClusterKey();
562
- Json::Object priority_children;
563
- Json::Array priority_priorities;
564
- for (size_t priority = 0; priority < priority_list_.size(); ++priority) {
565
- const auto& localities = priority_list_[priority].localities;
566
- Json::Object weighted_targets;
567
- for (const auto& p : localities) {
568
- XdsLocalityName* locality_name = p.first;
569
- const auto& locality = p.second;
570
- // Construct JSON object containing locality name.
571
- Json::Object locality_name_json;
572
- if (!locality_name->region().empty()) {
573
- locality_name_json["region"] = locality_name->region();
574
- }
575
- if (!locality_name->zone().empty()) {
576
- locality_name_json["zone"] = locality_name->zone();
577
- }
578
- if (!locality_name->sub_zone().empty()) {
579
- locality_name_json["subzone"] = locality_name->sub_zone();
580
- }
581
- // Add weighted target entry.
582
- weighted_targets[locality_name->AsHumanReadableString()] = Json::Object{
583
- {"weight", locality.lb_weight},
584
- {"childPolicy", config_->endpoint_picking_policy()},
585
- };
586
- }
587
- // Construct locality-picking policy.
588
- // Start with field from our config and add the "targets" field.
589
- Json locality_picking_config = config_->locality_picking_policy();
590
- Json::Object& config =
591
- *(*locality_picking_config.mutable_array())[0].mutable_object();
592
- auto it = config.begin();
593
- GPR_ASSERT(it != config.end());
594
- (*it->second.mutable_object())["targets"] = std::move(weighted_targets);
595
- // Wrap it in the drop policy.
596
- Json::Array drop_categories;
597
- for (const auto& category : drop_config_->drop_category_list()) {
598
- drop_categories.push_back(Json::Object{
599
- {"category", category.name},
600
- {"requests_per_million", category.parts_per_million},
601
- });
602
- }
603
- Json::Object xds_cluster_impl_config = {
604
- {"clusterName", std::string(lrs_key.first)},
605
- {"childPolicy", std::move(locality_picking_config)},
606
- {"dropCategories", std::move(drop_categories)},
607
- {"maxConcurrentRequests", config_->max_concurrent_requests()},
608
- };
609
- if (!lrs_key.second.empty()) {
610
- xds_cluster_impl_config["edsServiceName"] = std::string(lrs_key.second);
611
- }
612
- if (config_->lrs_load_reporting_server_name().has_value()) {
613
- xds_cluster_impl_config["lrsLoadReportingServerName"] =
614
- config_->lrs_load_reporting_server_name().value();
615
- }
616
- Json locality_picking_policy = Json::Array{Json::Object{
617
- {"xds_cluster_impl_experimental", std::move(xds_cluster_impl_config)},
618
- }};
619
- // Add priority entry.
620
- const size_t child_number = priority_child_numbers_[priority];
621
- std::string child_name = absl::StrCat("child", child_number);
622
- priority_priorities.emplace_back(child_name);
623
- priority_children[child_name] = Json::Object{
624
- {"config", std::move(locality_picking_policy)},
625
- {"ignore_reresolution_requests", true},
626
- };
627
- }
628
- Json json = Json::Array{Json::Object{
629
- {"priority_experimental",
630
- Json::Object{
631
- {"children", std::move(priority_children)},
632
- {"priorities", std::move(priority_priorities)},
633
- }},
634
- }};
635
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
636
- std::string json_str = json.Dump(/*indent=*/1);
637
- gpr_log(GPR_INFO, "[edslb %p] generated config for child policy: %s", this,
638
- json_str.c_str());
639
- }
640
- grpc_error* error = GRPC_ERROR_NONE;
641
- RefCountedPtr<LoadBalancingPolicy::Config> config =
642
- LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(json, &error);
643
- if (error != GRPC_ERROR_NONE) {
644
- // This should never happen, but if it does, we basically have no
645
- // way to fix it, so we put the channel in TRANSIENT_FAILURE.
646
- gpr_log(GPR_ERROR,
647
- "[edslb %p] error parsing generated child policy config -- "
648
- "will put channel in TRANSIENT_FAILURE: %s",
649
- this, grpc_error_string(error));
650
- error = grpc_error_set_int(
651
- grpc_error_add_child(
652
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(
653
- "eds LB policy: error parsing generated child policy config"),
654
- error),
655
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_INTERNAL);
656
- channel_control_helper()->UpdateState(
657
- GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
658
- absl::make_unique<TransientFailurePicker>(error));
659
- return nullptr;
660
- }
661
- return config;
662
- }
663
-
664
- void EdsLb::UpdateChildPolicyLocked() {
665
- if (shutting_down_) return;
666
- UpdateArgs update_args;
667
- update_args.config = CreateChildPolicyConfigLocked();
668
- if (update_args.config == nullptr) return;
669
- update_args.addresses = CreateChildPolicyAddressesLocked();
670
- update_args.args = CreateChildPolicyArgsLocked(args_);
671
- if (child_policy_ == nullptr) {
672
- child_policy_ = CreateChildPolicyLocked(update_args.args);
673
- }
674
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
675
- gpr_log(GPR_INFO, "[edslb %p] Updating child policy %p", this,
676
- child_policy_.get());
677
- }
678
- child_policy_->UpdateLocked(std::move(update_args));
679
- }
680
-
681
- grpc_channel_args* EdsLb::CreateChildPolicyArgsLocked(
682
- const grpc_channel_args* args) {
683
- grpc_arg args_to_add[] = {
684
- // A channel arg indicating if the target is a backend inferred from an
685
- // xds load balancer.
686
- // TODO(roth): This isn't needed with the new fallback design.
687
- // Remove as part of implementing the new fallback functionality.
688
- grpc_channel_arg_integer_create(
689
- const_cast<char*>(GRPC_ARG_ADDRESS_IS_BACKEND_FROM_XDS_LOAD_BALANCER),
690
- 1),
691
- // Inhibit client-side health checking, since the balancer does
692
- // this for us.
693
- grpc_channel_arg_integer_create(
694
- const_cast<char*>(GRPC_ARG_INHIBIT_HEALTH_CHECKING), 1),
695
- };
696
- return grpc_channel_args_copy_and_add(args, args_to_add,
697
- GPR_ARRAY_SIZE(args_to_add));
698
- }
699
-
700
- OrphanablePtr<LoadBalancingPolicy> EdsLb::CreateChildPolicyLocked(
701
- const grpc_channel_args* args) {
702
- LoadBalancingPolicy::Args lb_policy_args;
703
- lb_policy_args.work_serializer = work_serializer();
704
- lb_policy_args.args = args;
705
- lb_policy_args.channel_control_helper =
706
- absl::make_unique<Helper>(Ref(DEBUG_LOCATION, "Helper"));
707
- OrphanablePtr<LoadBalancingPolicy> lb_policy =
708
- LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(
709
- "priority_experimental", std::move(lb_policy_args));
710
- if (GPR_UNLIKELY(lb_policy == nullptr)) {
711
- gpr_log(GPR_ERROR, "[edslb %p] failure creating child policy", this);
712
- return nullptr;
713
- }
714
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
715
- gpr_log(GPR_INFO, "[edslb %p]: Created new child policy %p", this,
716
- lb_policy.get());
717
- }
718
- // Add our interested_parties pollset_set to that of the newly created
719
- // child policy. This will make the child policy progress upon activity on
720
- // this policy, which in turn is tied to the application's call.
721
- grpc_pollset_set_add_pollset_set(lb_policy->interested_parties(),
722
- interested_parties());
723
- return lb_policy;
724
- }
725
-
726
- //
727
- // factory
728
- //
729
-
730
- class EdsLbFactory : public LoadBalancingPolicyFactory {
731
- public:
732
- OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
733
- LoadBalancingPolicy::Args args) const override {
734
- grpc_error* error = GRPC_ERROR_NONE;
735
- RefCountedPtr<XdsClient> xds_client = XdsClient::GetOrCreate(&error);
736
- if (error != GRPC_ERROR_NONE) {
737
- gpr_log(GPR_ERROR,
738
- "cannot get XdsClient to instantiate eds LB policy: %s",
739
- grpc_error_string(error));
740
- GRPC_ERROR_UNREF(error);
741
- return nullptr;
742
- }
743
- return MakeOrphanable<EdsChildHandler>(std::move(xds_client),
744
- std::move(args));
745
- }
746
-
747
- const char* name() const override { return kEds; }
748
-
749
- RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
750
- const Json& json, grpc_error** error) const override {
751
- GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
752
- if (json.type() == Json::Type::JSON_NULL) {
753
- // eds was mentioned as a policy in the deprecated loadBalancingPolicy
754
- // field or in the client API.
755
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
756
- "field:loadBalancingPolicy error:eds policy requires configuration. "
757
- "Please use loadBalancingConfig field of service config instead.");
758
- return nullptr;
759
- }
760
- std::vector<grpc_error*> error_list;
761
- // EDS service name.
762
- std::string eds_service_name;
763
- auto it = json.object_value().find("edsServiceName");
764
- if (it != json.object_value().end()) {
765
- if (it->second.type() != Json::Type::STRING) {
766
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
767
- "field:edsServiceName error:type should be string"));
768
- } else {
769
- eds_service_name = it->second.string_value();
770
- }
771
- }
772
- // Cluster name.
773
- std::string cluster_name;
774
- it = json.object_value().find("clusterName");
775
- if (it == json.object_value().end()) {
776
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
777
- "field:clusterName error:required field missing"));
778
- } else if (it->second.type() != Json::Type::STRING) {
779
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
780
- "field:clusterName error:type should be string"));
781
- } else {
782
- cluster_name = it->second.string_value();
783
- }
784
- // LRS load reporting server name.
785
- absl::optional<std::string> lrs_load_reporting_server_name;
786
- it = json.object_value().find("lrsLoadReportingServerName");
787
- if (it != json.object_value().end()) {
788
- if (it->second.type() != Json::Type::STRING) {
789
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
790
- "field:lrsLoadReportingServerName error:type should be string"));
791
- } else {
792
- lrs_load_reporting_server_name.emplace(it->second.string_value());
793
- }
794
- }
795
- // Locality-picking policy.
796
- Json locality_picking_policy;
797
- it = json.object_value().find("localityPickingPolicy");
798
- if (it == json.object_value().end()) {
799
- locality_picking_policy = Json::Array{
800
- Json::Object{
801
- {"weighted_target_experimental",
802
- Json::Object{
803
- {"targets", Json::Object()},
804
- }},
805
- },
806
- };
807
- } else {
808
- locality_picking_policy = it->second;
809
- }
810
- grpc_error* parse_error = GRPC_ERROR_NONE;
811
- if (LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
812
- locality_picking_policy, &parse_error) == nullptr) {
813
- GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
814
- error_list.push_back(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
815
- "localityPickingPolicy", &parse_error, 1));
816
- GRPC_ERROR_UNREF(parse_error);
817
- }
818
- // Endpoint-picking policy. Called "childPolicy" for xds policy.
819
- Json endpoint_picking_policy;
820
- it = json.object_value().find("endpointPickingPolicy");
821
- if (it == json.object_value().end()) {
822
- endpoint_picking_policy = Json::Array{
823
- Json::Object{
824
- {"round_robin", Json::Object()},
825
- },
826
- };
827
- } else {
828
- endpoint_picking_policy = it->second;
829
- }
830
- parse_error = GRPC_ERROR_NONE;
831
- if (LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
832
- endpoint_picking_policy, &parse_error) == nullptr) {
833
- GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
834
- error_list.push_back(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
835
- "endpointPickingPolicy", &parse_error, 1));
836
- GRPC_ERROR_UNREF(parse_error);
837
- }
838
- // Max concurrent requests.
839
- uint32_t max_concurrent_requests = 1024;
840
- it = json.object_value().find("max_concurrent_requests");
841
- if (it != json.object_value().end()) {
842
- if (it->second.type() != Json::Type::NUMBER) {
843
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
844
- "field:max_concurrent_requests error:must be of type number"));
845
- } else {
846
- max_concurrent_requests =
847
- gpr_parse_nonnegative_int(it->second.string_value().c_str());
848
- }
849
- }
850
- // Construct config.
851
- if (error_list.empty()) {
852
- return MakeRefCounted<EdsLbConfig>(
853
- std::move(cluster_name), std::move(eds_service_name),
854
- std::move(lrs_load_reporting_server_name),
855
- std::move(locality_picking_policy),
856
- std::move(endpoint_picking_policy), max_concurrent_requests);
857
- } else {
858
- *error = GRPC_ERROR_CREATE_FROM_VECTOR(
859
- "eds_experimental LB policy config", &error_list);
860
- return nullptr;
861
- }
862
- }
863
-
864
- private:
865
- class EdsChildHandler : public ChildPolicyHandler {
866
- public:
867
- EdsChildHandler(RefCountedPtr<XdsClient> xds_client, Args args)
868
- : ChildPolicyHandler(std::move(args), &grpc_lb_eds_trace),
869
- xds_client_(std::move(xds_client)) {}
870
-
871
- bool ConfigChangeRequiresNewPolicyInstance(
872
- LoadBalancingPolicy::Config* old_config,
873
- LoadBalancingPolicy::Config* new_config) const override {
874
- GPR_ASSERT(old_config->name() == kEds);
875
- GPR_ASSERT(new_config->name() == kEds);
876
- EdsLbConfig* old_eds_config = static_cast<EdsLbConfig*>(old_config);
877
- EdsLbConfig* new_eds_config = static_cast<EdsLbConfig*>(new_config);
878
- return old_eds_config->cluster_name() != new_eds_config->cluster_name() ||
879
- old_eds_config->eds_service_name() !=
880
- new_eds_config->eds_service_name() ||
881
- old_eds_config->lrs_load_reporting_server_name() !=
882
- new_eds_config->lrs_load_reporting_server_name();
883
- }
884
-
885
- OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
886
- const char* name, LoadBalancingPolicy::Args args) const override {
887
- return MakeOrphanable<EdsLb>(xds_client_, std::move(args));
888
- }
889
-
890
- private:
891
- RefCountedPtr<XdsClient> xds_client_;
892
- };
893
- };
894
-
895
- } // namespace
896
-
897
- } // namespace grpc_core
898
-
899
- //
900
- // Plugin registration
901
- //
902
-
903
- void grpc_lb_policy_eds_init() {
904
- grpc_core::LoadBalancingPolicyRegistry::Builder::
905
- RegisterLoadBalancingPolicyFactory(
906
- absl::make_unique<grpc_core::EdsLbFactory>());
907
- }
908
-
909
- void grpc_lb_policy_eds_shutdown() {}