grpc 1.35.0.pre1 → 1.37.1

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 (507) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +121 -89
  3. data/include/grpc/grpc.h +15 -1
  4. data/include/grpc/grpc_security.h +16 -11
  5. data/include/grpc/impl/codegen/port_platform.h +2 -0
  6. data/src/core/ext/filters/client_channel/client_channel.cc +359 -331
  7. data/src/core/ext/filters/client_channel/client_channel.h +0 -2
  8. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
  9. data/src/core/ext/filters/client_channel/config_selector.h +9 -1
  10. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -4
  11. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -142
  12. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
  13. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -2
  14. data/src/core/ext/filters/client_channel/lb_policy.cc +3 -0
  15. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +3 -5
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -2
  18. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +1 -1
  19. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +8 -6
  20. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +23 -0
  21. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +27 -0
  22. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +289 -170
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +5 -0
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +8 -25
  25. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +1 -1
  26. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +232 -110
  27. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
  28. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
  29. data/src/core/ext/filters/client_channel/resolver.cc +5 -5
  30. data/src/core/ext/filters/client_channel/resolver.h +1 -12
  31. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +36 -45
  32. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  33. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -1
  34. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +34 -50
  35. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +16 -14
  36. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +18 -15
  37. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +377 -0
  38. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -4
  39. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +307 -155
  40. data/src/core/ext/filters/client_channel/server_address.cc +9 -0
  41. data/src/core/ext/filters/client_channel/server_address.h +31 -0
  42. data/src/core/ext/filters/client_channel/subchannel.cc +69 -146
  43. data/src/core/ext/filters/client_channel/subchannel.h +63 -95
  44. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
  45. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +10 -8
  46. data/src/core/ext/filters/client_idle/client_idle_filter.cc +1 -1
  47. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +500 -0
  48. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
  49. data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
  50. data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
  51. data/src/core/ext/filters/max_age/max_age_filter.cc +35 -32
  52. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +1 -1
  53. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
  54. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +3 -2
  55. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  56. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -2
  57. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +490 -178
  58. data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -2
  59. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +11 -1
  60. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +1 -1
  61. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +62 -18
  62. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +39 -7
  63. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
  64. data/src/core/ext/transport/chttp2/transport/frame_data.cc +5 -1
  65. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
  66. data/src/core/ext/transport/chttp2/transport/internal.h +1 -0
  67. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
  68. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
  69. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +0 -1
  70. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +350 -0
  71. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1348 -0
  72. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +11 -16
  73. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +42 -59
  74. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +3 -2
  75. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +15 -0
  76. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -1
  77. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +75 -0
  78. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +2 -2
  79. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +9 -9
  80. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +7 -7
  81. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +28 -13
  82. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +6 -0
  83. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +25 -0
  84. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +0 -1
  85. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +11 -5
  86. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +41 -7
  87. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +0 -1
  88. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +23 -21
  89. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +122 -77
  90. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +13 -9
  91. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +37 -5
  92. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +0 -1
  93. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
  94. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
  95. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
  96. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
  97. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +11 -9
  98. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +44 -27
  99. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +57 -16
  100. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +150 -0
  101. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +0 -1
  102. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
  103. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
  104. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
  105. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
  106. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +78 -0
  107. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +281 -0
  108. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -0
  109. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +113 -0
  110. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +19 -21
  111. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +64 -51
  112. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +0 -1
  113. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +16 -13
  114. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +50 -18
  115. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +4 -7
  116. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +0 -17
  117. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +0 -1
  118. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +30 -23
  119. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +85 -73
  120. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -3
  121. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -3
  122. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +0 -1
  123. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -2
  124. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +93 -0
  125. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +323 -0
  126. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
  127. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
  128. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +0 -1
  129. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
  130. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
  131. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +21 -4
  132. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +29 -0
  133. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
  134. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
  135. data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/authority.upb.c +5 -5
  136. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
  137. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
  138. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
  139. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
  140. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
  141. data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/resource.upb.c +9 -9
  142. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
  143. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
  144. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
  145. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
  146. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
  147. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
  148. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  149. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +168 -171
  150. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +383 -0
  151. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +115 -0
  152. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +405 -420
  153. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +2 -2
  154. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +12 -9
  155. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +177 -171
  156. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +10 -0
  157. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +88 -88
  158. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +153 -153
  159. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +10 -7
  160. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +5 -0
  161. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +4 -7
  162. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +33 -20
  163. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +56 -59
  164. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +116 -111
  165. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +129 -121
  166. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +21 -24
  167. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
  168. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  169. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
  170. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
  171. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +17 -13
  172. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +753 -724
  173. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  174. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +22 -25
  175. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
  176. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  177. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
  178. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  179. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +120 -0
  180. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  181. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +76 -0
  182. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  183. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +371 -377
  184. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +12 -16
  185. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +112 -108
  186. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +45 -53
  187. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +177 -180
  188. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +92 -102
  189. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +5 -0
  190. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +32 -42
  191. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +30 -40
  192. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +4 -7
  193. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +38 -44
  194. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +130 -0
  195. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +50 -0
  196. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
  197. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  198. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +30 -33
  199. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
  200. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  201. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +8 -7
  202. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +9 -9
  203. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +9 -8
  204. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +8 -8
  205. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +8 -8
  206. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +9 -8
  207. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +8 -8
  208. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
  209. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
  210. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +14 -11
  211. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
  212. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  213. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
  214. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  215. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
  216. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  217. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
  218. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  219. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
  220. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  221. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
  222. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  223. data/src/core/ext/xds/xds_api.cc +2149 -666
  224. data/src/core/ext/xds/xds_api.h +321 -119
  225. data/src/core/ext/xds/xds_bootstrap.cc +80 -45
  226. data/src/core/ext/xds/xds_bootstrap.h +17 -5
  227. data/src/core/ext/xds/xds_certificate_provider.cc +180 -74
  228. data/src/core/ext/xds/xds_certificate_provider.h +83 -44
  229. data/src/core/ext/xds/xds_client.cc +181 -34
  230. data/src/core/ext/xds/xds_client.h +29 -0
  231. data/src/core/ext/xds/xds_client_stats.cc +2 -1
  232. data/src/core/ext/xds/xds_client_stats.h +2 -2
  233. data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
  234. data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
  235. data/src/core/ext/xds/xds_http_filters.cc +114 -0
  236. data/src/core/ext/xds/xds_http_filters.h +130 -0
  237. data/src/core/ext/xds/xds_server_config_fetcher.cc +425 -24
  238. data/src/core/lib/channel/channel_stack.cc +12 -0
  239. data/src/core/lib/channel/channel_stack.h +7 -0
  240. data/src/core/lib/channel/channelz.cc +92 -4
  241. data/src/core/lib/channel/channelz.h +30 -1
  242. data/src/core/lib/channel/channelz_registry.cc +14 -0
  243. data/src/core/lib/channel/handshaker.cc +2 -44
  244. data/src/core/lib/channel/handshaker.h +1 -18
  245. data/src/core/lib/channel/status_util.cc +12 -2
  246. data/src/core/lib/channel/status_util.h +5 -0
  247. data/src/core/lib/gpr/log.cc +6 -1
  248. data/src/core/lib/gpr/sync_abseil.cc +3 -6
  249. data/src/core/lib/gpr/sync_windows.cc +2 -2
  250. data/src/core/lib/gprpp/atomic.h +3 -3
  251. data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
  252. data/src/core/lib/gprpp/mpscq.cc +2 -2
  253. data/src/core/lib/gprpp/ref_counted.h +1 -1
  254. data/src/core/lib/gprpp/ref_counted_ptr.h +2 -0
  255. data/src/core/lib/gprpp/sync.h +129 -40
  256. data/src/core/lib/gprpp/thd.h +1 -1
  257. data/src/core/lib/gprpp/time_util.cc +77 -0
  258. data/src/core/lib/gprpp/time_util.h +42 -0
  259. data/src/core/lib/http/httpcli_security_connector.cc +2 -2
  260. data/src/core/lib/iomgr/buffer_list.h +1 -1
  261. data/src/core/lib/iomgr/cfstream_handle.cc +2 -2
  262. data/src/core/lib/iomgr/error.h +1 -1
  263. data/src/core/lib/iomgr/ev_apple.cc +11 -8
  264. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -3
  265. data/src/core/lib/iomgr/ev_epollex_linux.cc +4 -4
  266. data/src/core/lib/iomgr/ev_posix.cc +3 -3
  267. data/src/core/lib/iomgr/exec_ctx.cc +6 -2
  268. data/src/core/lib/iomgr/iomgr_posix.cc +0 -1
  269. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +0 -1
  270. data/src/core/lib/iomgr/resource_quota.cc +1 -1
  271. data/src/core/lib/iomgr/sockaddr_utils.cc +121 -1
  272. data/src/core/lib/iomgr/sockaddr_utils.h +25 -0
  273. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -0
  274. data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
  275. data/src/core/lib/iomgr/tcp_posix.cc +5 -8
  276. data/src/core/lib/iomgr/tcp_uv.cc +2 -2
  277. data/src/core/lib/iomgr/timer_generic.cc +2 -2
  278. data/src/core/lib/iomgr/timer_manager.cc +1 -1
  279. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
  280. data/src/core/lib/matchers/matchers.cc +339 -0
  281. data/src/core/lib/matchers/matchers.h +160 -0
  282. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
  283. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  284. data/src/core/lib/security/credentials/credentials.h +2 -1
  285. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +1 -1
  286. data/src/core/lib/security/credentials/external/external_account_credentials.cc +2 -2
  287. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -1
  288. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -1
  289. data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -1
  290. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +7 -6
  291. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +2 -2
  292. data/src/core/lib/security/credentials/jwt/json_token.cc +0 -3
  293. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +0 -3
  294. data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
  295. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  296. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +2 -1
  297. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
  298. data/src/core/lib/security/credentials/tls/tls_credentials.cc +2 -1
  299. data/src/core/lib/security/credentials/tls/tls_credentials.h +1 -1
  300. data/src/core/lib/security/credentials/xds/xds_credentials.cc +128 -59
  301. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  302. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
  303. data/src/core/lib/security/security_connector/ssl_utils.cc +9 -4
  304. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +32 -14
  305. data/src/core/lib/security/transport/security_handshaker.cc +33 -5
  306. data/src/core/lib/security/transport/server_auth_filter.cc +7 -0
  307. data/src/core/lib/slice/slice_intern.cc +5 -6
  308. data/src/core/lib/surface/channel.h +3 -3
  309. data/src/core/lib/surface/completion_queue.cc +1 -1
  310. data/src/core/lib/surface/init.cc +13 -15
  311. data/src/core/lib/surface/lame_client.cc +38 -19
  312. data/src/core/lib/surface/lame_client.h +4 -3
  313. data/src/core/lib/surface/server.cc +43 -36
  314. data/src/core/lib/surface/server.h +76 -14
  315. data/src/core/lib/surface/version.cc +2 -2
  316. data/src/core/lib/transport/metadata.cc +6 -2
  317. data/src/core/lib/transport/metadata_batch.cc +27 -0
  318. data/src/core/lib/transport/metadata_batch.h +14 -0
  319. data/src/core/plugin_registry/grpc_plugin_registry.cc +12 -0
  320. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +18 -24
  321. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +16 -21
  322. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
  323. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -3
  324. data/src/core/tsi/fake_transport_security.cc +11 -2
  325. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -3
  326. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
  327. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +2 -4
  328. data/src/core/tsi/ssl_transport_security.cc +0 -3
  329. data/src/core/tsi/ssl_transport_security.h +0 -3
  330. data/src/ruby/ext/grpc/extconf.rb +9 -1
  331. data/src/ruby/ext/grpc/rb_channel.c +10 -1
  332. data/src/ruby/ext/grpc/rb_channel_credentials.c +11 -1
  333. data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
  334. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  335. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  336. data/src/ruby/ext/grpc/rb_grpc.c +4 -0
  337. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  338. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -1
  339. data/src/ruby/ext/grpc/rb_server.c +13 -1
  340. data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
  341. data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
  342. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
  343. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
  344. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
  345. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
  346. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
  347. data/src/ruby/lib/grpc/version.rb +1 -1
  348. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +7 -0
  349. data/src/ruby/spec/call_spec.rb +1 -1
  350. data/src/ruby/spec/channel_credentials_spec.rb +32 -0
  351. data/src/ruby/spec/channel_spec.rb +17 -6
  352. data/src/ruby/spec/client_auth_spec.rb +27 -1
  353. data/src/ruby/spec/errors_spec.rb +1 -1
  354. data/src/ruby/spec/generic/active_call_spec.rb +2 -2
  355. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  356. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  357. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  358. data/src/ruby/spec/server_spec.rb +22 -0
  359. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +1 -0
  360. data/third_party/boringssl-with-bazel/err_data.c +715 -713
  361. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  362. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +2 -2
  363. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
  364. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -10
  365. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  366. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +4 -2
  367. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
  368. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +15 -14
  369. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +30 -0
  370. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
  371. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +39 -85
  372. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +5 -16
  373. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
  374. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
  375. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
  376. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  377. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
  378. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  379. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
  380. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
  381. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  382. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +87 -0
  383. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  384. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
  385. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  386. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  387. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
  388. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
  389. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  390. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +3 -1
  391. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  392. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
  393. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +9 -1
  394. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +21 -13
  395. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  396. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
  397. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +12 -0
  398. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -1
  399. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +28 -0
  400. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +135 -43
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +0 -7
  402. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +51 -32
  403. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +147 -0
  404. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +18 -29
  405. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +13 -4
  406. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
  407. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  408. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  409. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  410. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +4 -0
  411. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  412. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
  413. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +1 -29
  414. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +10 -7
  415. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +1 -1
  416. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +8 -8
  417. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +1 -1
  418. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +29 -23
  419. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +22 -17
  420. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +1 -2
  421. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  422. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +39 -4
  423. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  424. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
  425. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +11 -10
  426. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
  427. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +25 -25
  428. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -2
  429. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
  430. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +40 -20
  431. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  432. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
  433. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
  434. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +6 -6
  435. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +6 -6
  436. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +3 -3
  437. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +652 -545
  438. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
  439. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -5
  440. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  441. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +22 -7
  442. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +19 -0
  443. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  444. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +56 -26
  445. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  446. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +15 -0
  447. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +12 -2
  448. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -0
  449. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +67 -33
  451. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +27 -8
  452. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +287 -99
  453. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +139 -36
  454. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +4 -3
  455. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +11 -20
  456. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +10 -5
  457. data/third_party/boringssl-with-bazel/src/ssl/internal.h +37 -16
  458. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
  459. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -8
  460. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +20 -14
  461. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +7 -8
  462. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +2 -2
  463. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
  464. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +362 -50
  465. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +2 -2
  466. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +48 -15
  467. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +66 -24
  468. data/third_party/xxhash/xxhash.h +5443 -0
  469. metadata +140 -84
  470. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +0 -60
  471. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +0 -52
  472. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +0 -143
  473. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +0 -42
  474. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +0 -84
  475. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +0 -94
  476. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +0 -54
  477. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +0 -173
  478. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +0 -36
  479. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +0 -92
  480. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +0 -42
  481. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +0 -35
  482. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +0 -62
  483. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +0 -40
  484. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +0 -45
  485. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +0 -40
  486. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +0 -49
  487. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +0 -35
  488. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +0 -68
  489. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +0 -40
  490. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +0 -51
  491. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +0 -35
  492. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  493. data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
  494. data/src/core/lib/security/authorization/authorization_engine.h +0 -84
  495. data/src/core/lib/security/authorization/evaluate_args.cc +0 -148
  496. data/src/core/lib/security/authorization/evaluate_args.h +0 -59
  497. data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
  498. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -44
  499. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -69
  500. data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -97
  501. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
  502. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -57
  503. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -504
  504. data/third_party/upb/upb/json_decode.c +0 -1443
  505. data/third_party/upb/upb/json_decode.h +0 -23
  506. data/third_party/upb/upb/json_encode.c +0 -713
  507. data/third_party/upb/upb/json_encode.h +0 -36
@@ -21,4 +21,9 @@
21
21
  // Set by xds_cluster_impl LB policy and used by GoogleDefaultCredentials.
22
22
  #define GRPC_ARG_XDS_CLUSTER_NAME "grpc.internal.xds_cluster_name"
23
23
 
24
+ // For testing purpose, this channel arg indicating xds_cluster_resolver LB
25
+ // policy should use the fake DNS resolver to resolve logical dns cluster.
26
+ #define GRPC_ARG_XDS_LOGICAL_DNS_CLUSTER_FAKE_RESOLVER_RESPONSE_GENERATOR \
27
+ "grpc.internal.xds_logical_dns_cluster_fake_resolver_response_generator"
28
+
24
29
  #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_CHANNEL_ARGS_H
@@ -107,17 +107,6 @@ CircuitBreakerCallCounterMap::CallCounter::~CallCounter() {
107
107
 
108
108
  constexpr char kXdsClusterImpl[] = "xds_cluster_impl_experimental";
109
109
 
110
- // TODO (donnadionne): Check to see if circuit breaking is enabled, this will be
111
- // removed once circuit breaking feature is fully integrated and enabled by
112
- // default.
113
- bool XdsCircuitBreakingEnabled() {
114
- char* value = gpr_getenv("GRPC_XDS_EXPERIMENTAL_CIRCUIT_BREAKING");
115
- bool parsed_value;
116
- bool parse_succeeded = gpr_parse_bool_value(value, &parsed_value);
117
- gpr_free(value);
118
- return parse_succeeded && parsed_value;
119
- }
120
-
121
110
  // Config for xDS Cluster Impl LB policy.
122
111
  class XdsClusterImplLbConfig : public LoadBalancingPolicy::Config {
123
112
  public:
@@ -145,9 +134,7 @@ class XdsClusterImplLbConfig : public LoadBalancingPolicy::Config {
145
134
  const absl::optional<std::string>& lrs_load_reporting_server_name() const {
146
135
  return lrs_load_reporting_server_name_;
147
136
  };
148
- const uint32_t max_concurrent_requests() const {
149
- return max_concurrent_requests_;
150
- }
137
+ uint32_t max_concurrent_requests() const { return max_concurrent_requests_; }
151
138
  RefCountedPtr<XdsApi::EdsUpdate::DropConfig> drop_config() const {
152
139
  return drop_config_;
153
140
  }
@@ -210,7 +197,6 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
210
197
 
211
198
  private:
212
199
  RefCountedPtr<CircuitBreakerCallCounterMap::CallCounter> call_counter_;
213
- bool xds_circuit_breaking_enabled_;
214
200
  uint32_t max_concurrent_requests_;
215
201
  RefCountedPtr<XdsApi::EdsUpdate::DropConfig> drop_config_;
216
202
  RefCountedPtr<XdsClusterDropStats> drop_stats_;
@@ -279,7 +265,6 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
279
265
  XdsClusterImplLb::Picker::Picker(XdsClusterImplLb* xds_cluster_impl_lb,
280
266
  RefCountedPtr<RefCountedPicker> picker)
281
267
  : call_counter_(xds_cluster_impl_lb->call_counter_),
282
- xds_circuit_breaking_enabled_(XdsCircuitBreakingEnabled()),
283
268
  max_concurrent_requests_(
284
269
  xds_cluster_impl_lb->config_->max_concurrent_requests()),
285
270
  drop_config_(xds_cluster_impl_lb->config_->drop_config()),
@@ -303,15 +288,13 @@ LoadBalancingPolicy::PickResult XdsClusterImplLb::Picker::Pick(
303
288
  }
304
289
  // Handle circuit breaking.
305
290
  uint32_t current = call_counter_->Increment();
306
- if (xds_circuit_breaking_enabled_) {
307
- // Check and see if we exceeded the max concurrent requests count.
308
- if (current >= max_concurrent_requests_) {
309
- call_counter_->Decrement();
310
- if (drop_stats_ != nullptr) drop_stats_->AddUncategorizedDrops();
311
- PickResult result;
312
- result.type = PickResult::PICK_COMPLETE;
313
- return result;
314
- }
291
+ // Check and see if we exceeded the max concurrent requests count.
292
+ if (current >= max_concurrent_requests_) {
293
+ call_counter_->Decrement();
294
+ if (drop_stats_ != nullptr) drop_stats_->AddUncategorizedDrops();
295
+ PickResult result;
296
+ result.type = PickResult::PICK_COMPLETE;
297
+ return result;
315
298
  }
316
299
  // If we're not dropping the call, we should always have a child picker.
317
300
  if (picker_ == nullptr) { // Should never happen.
@@ -501,7 +501,7 @@ void XdsClusterManagerLb::ClusterChild::ResetBackoffLocked() {
501
501
 
502
502
  void XdsClusterManagerLb::ClusterChild::DeactivateLocked() {
503
503
  // If already deactivated, don't do that again.
504
- if (delayed_removal_timer_callback_pending_ == true) return;
504
+ if (delayed_removal_timer_callback_pending_) return;
505
505
  // Set the child weight to 0 so that future picker won't contain this child.
506
506
  // Start a timer to delete the child.
507
507
  Ref(DEBUG_LOCATION, "ClusterChild+timer").release();
@@ -29,8 +29,10 @@
29
29
  #include "src/core/ext/filters/client_channel/lb_policy/address_filtering.h"
30
30
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
31
31
  #include "src/core/ext/filters/client_channel/lb_policy/xds/xds.h"
32
+ #include "src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h"
32
33
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
33
34
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
35
+ #include "src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h"
34
36
  #include "src/core/ext/filters/client_channel/resolver_registry.h"
35
37
  #include "src/core/ext/filters/client_channel/server_address.h"
36
38
  #include "src/core/ext/xds/xds_channel_args.h"
@@ -80,28 +82,20 @@ class XdsClusterResolverLbConfig : public LoadBalancingPolicy::Config {
80
82
  };
81
83
 
82
84
  XdsClusterResolverLbConfig(
83
- std::vector<DiscoveryMechanism> discovery_mechanisms,
84
- Json locality_picking_policy, Json endpoint_picking_policy)
85
+ std::vector<DiscoveryMechanism> discovery_mechanisms, Json xds_lb_policy)
85
86
  : discovery_mechanisms_(std::move(discovery_mechanisms)),
86
- locality_picking_policy_(std::move(locality_picking_policy)),
87
- endpoint_picking_policy_(std::move(endpoint_picking_policy)) {}
87
+ xds_lb_policy_(std::move(xds_lb_policy)) {}
88
88
 
89
89
  const char* name() const override { return kXdsClusterResolver; }
90
-
91
90
  const std::vector<DiscoveryMechanism>& discovery_mechanisms() const {
92
91
  return discovery_mechanisms_;
93
92
  }
94
- const Json& locality_picking_policy() const {
95
- return locality_picking_policy_;
96
- }
97
- const Json& endpoint_picking_policy() const {
98
- return endpoint_picking_policy_;
99
- }
93
+
94
+ const Json& xds_lb_policy() const { return xds_lb_policy_; }
100
95
 
101
96
  private:
102
97
  std::vector<DiscoveryMechanism> discovery_mechanisms_;
103
- Json locality_picking_policy_;
104
- Json endpoint_picking_policy_;
98
+ Json xds_lb_policy_;
105
99
  };
106
100
 
107
101
  // Xds Cluster Resolver LB policy.
@@ -113,6 +107,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
113
107
 
114
108
  void UpdateLocked(UpdateArgs args) override;
115
109
  void ResetBackoffLocked() override;
110
+ void ExitIdleLocked() override;
116
111
 
117
112
  private:
118
113
  // Discovery Mechanism Base class
@@ -132,9 +127,11 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
132
127
  : parent_(std::move(xds_cluster_resolver_lb)), index_(index) {}
133
128
  virtual void Start() = 0;
134
129
  void Orphan() override = 0;
130
+ virtual Json::Array override_child_policy() = 0;
131
+ virtual bool disable_reresolution() = 0;
135
132
 
136
133
  // Caller must ensure that config_ is set before calling.
137
- const absl::string_view GetXdsClusterResolverResourceName() const {
134
+ absl::string_view GetXdsClusterResolverResourceName() const {
138
135
  if (!parent_->is_xds_uri_) return parent_->server_name_;
139
136
  if (!parent_->config_->discovery_mechanisms()[index_]
140
137
  .eds_service_name.empty()) {
@@ -172,6 +169,8 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
172
169
  : DiscoveryMechanism(std::move(xds_cluster_resolver_lb), index) {}
173
170
  void Start() override;
174
171
  void Orphan() override;
172
+ Json::Array override_child_policy() override { return Json::Array{}; }
173
+ bool disable_reresolution() override { return true; }
175
174
 
176
175
  private:
177
176
  class EndpointWatcher : public XdsClient::EndpointWatcherInterface {
@@ -230,6 +229,14 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
230
229
  : DiscoveryMechanism(std::move(xds_cluster_resolver_lb), index) {}
231
230
  void Start() override;
232
231
  void Orphan() override;
232
+ Json::Array override_child_policy() override {
233
+ return Json::Array{
234
+ Json::Object{
235
+ {"pick_first", Json::Object()},
236
+ },
237
+ };
238
+ }
239
+ bool disable_reresolution() override { return false; };
233
240
 
234
241
  private:
235
242
  class ResolverResultHandler : public Resolver::ResultHandler {
@@ -469,11 +476,26 @@ void XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
469
476
  //
470
477
 
471
478
  void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::Start() {
479
+ std::string target = parent()->server_name_;
480
+ grpc_channel_args* args = nullptr;
481
+ FakeResolverResponseGenerator* fake_resolver_response_generator =
482
+ grpc_channel_args_find_pointer<FakeResolverResponseGenerator>(
483
+ parent()->args_,
484
+ GRPC_ARG_XDS_LOGICAL_DNS_CLUSTER_FAKE_RESOLVER_RESPONSE_GENERATOR);
485
+ if (fake_resolver_response_generator != nullptr) {
486
+ target = absl::StrCat("fake:", target);
487
+ grpc_arg new_arg = FakeResolverResponseGenerator::MakeChannelArg(
488
+ fake_resolver_response_generator);
489
+ args = grpc_channel_args_copy_and_add(parent()->args_, &new_arg, 1);
490
+ } else {
491
+ args = grpc_channel_args_copy(parent()->args_);
492
+ }
472
493
  resolver_ = ResolverRegistry::CreateResolver(
473
- parent()->server_name_.c_str(), parent()->args_,
474
- grpc_pollset_set_create(), parent()->work_serializer(),
494
+ target.c_str(), args, parent()->interested_parties(),
495
+ parent()->work_serializer(),
475
496
  absl::make_unique<ResolverResultHandler>(
476
497
  Ref(DEBUG_LOCATION, "LogicalDNSDiscoveryMechanism")));
498
+ grpc_channel_args_destroy(args);
477
499
  if (resolver_ == nullptr) {
478
500
  parent()->OnResourceDoesNotExist(index());
479
501
  return;
@@ -509,9 +531,11 @@ void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::ResolverResultHandler::
509
531
  XdsApi::EdsUpdate update;
510
532
  XdsApi::EdsUpdate::Priority::Locality locality;
511
533
  locality.name = MakeRefCounted<XdsLocalityName>("", "", "");
534
+ locality.lb_weight = 1;
512
535
  locality.endpoints = std::move(result.addresses);
513
- update.priorities[0].localities.emplace(locality.name.get(),
514
- std::move(locality));
536
+ XdsApi::EdsUpdate::Priority priority;
537
+ priority.localities.emplace(locality.name.get(), std::move(locality));
538
+ update.priorities.emplace_back(std::move(priority));
515
539
  discovery_mechanism_->parent()->OnEndpointChanged(
516
540
  discovery_mechanism_->index(), std::move(update));
517
541
  }
@@ -655,6 +679,10 @@ void XdsClusterResolverLb::ResetBackoffLocked() {
655
679
  }
656
680
  }
657
681
 
682
+ void XdsClusterResolverLb::ExitIdleLocked() {
683
+ if (child_policy_ != nullptr) child_policy_->ExitIdleLocked();
684
+ }
685
+
658
686
  void XdsClusterResolverLb::OnEndpointChanged(size_t index,
659
687
  XdsApi::EdsUpdate update) {
660
688
  if (shutting_down_) return;
@@ -673,10 +701,17 @@ void XdsClusterResolverLb::OnEndpointChanged(size_t index,
673
701
  discovery_mechanisms_[index].pending_priority_list =
674
702
  std::move(update.priorities);
675
703
  discovery_mechanisms_[index].first_update_received = true;
676
- if (!discovery_mechanisms_[0].first_update_received) {
677
- // We have not yet received an update for index 0, so wait until that
678
- // happens to create the child policy.
679
- return;
704
+ // If any discovery mechanism has not received its first update,
705
+ // wait until that happens before creating the child policy.
706
+ // TODO(roth): If this becomes problematic in the future (e.g., a
707
+ // secondary discovery mechanism delaying us from starting up at all),
708
+ // we can consider some sort of optimization whereby we can create the
709
+ // priority policy with only a subset of its children. But we need to
710
+ // make sure not to get into a situation where the priority policy
711
+ // will put the channel into TRANSIENT_FAILURE instead of CONNECTING
712
+ // while we're still waiting for the other discovery mechanism(s).
713
+ for (DiscoveryMechanismEntry& mechanism : discovery_mechanisms_) {
714
+ if (!mechanism.first_update_received) return;
680
715
  }
681
716
  // Construct new priority list.
682
717
  XdsApi::EdsUpdate::PriorityList priority_list;
@@ -813,7 +848,11 @@ ServerAddressList XdsClusterResolverLb::CreateChildPolicyAddressesLocked() {
813
848
  MakeHierarchicalPathAttribute(hierarchical_path))
814
849
  .WithAttribute(kXdsLocalityNameAttributeKey,
815
850
  absl::make_unique<XdsLocalityAttribute>(
816
- locality_name->Ref())));
851
+ locality_name->Ref()))
852
+ .WithAttribute(ServerAddressWeightAttribute::
853
+ kServerAddressWeightAttributeKey,
854
+ absl::make_unique<ServerAddressWeightAttribute>(
855
+ locality.lb_weight)));
817
856
  }
818
857
  }
819
858
  }
@@ -825,53 +864,76 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
825
864
  Json::Object priority_children;
826
865
  Json::Array priority_priorities;
827
866
  // Setting up index to iterate through the discovery mechanisms and keeping
828
- // track the discovery_mechanism each prioirty belongs to.
867
+ // track the discovery_mechanism each priority belongs to.
829
868
  size_t discovery_index = 0;
830
869
  // Setting up num_priorities_remaining to track the priorities in each
831
870
  // discovery_mechanism.
832
871
  size_t num_priorities_remaining_in_discovery =
833
872
  discovery_mechanisms_[discovery_index].num_priorities;
834
873
  for (size_t priority = 0; priority < priority_list_.size(); ++priority) {
835
- // Each prioirty in the priority_list_ should correspond to a priority in a
836
- // discovery mechanism in discovery_mechanisms_ (both in the same order).
837
- // Keeping track of the discovery_mechanism each prioirty belongs to.
838
- if (num_priorities_remaining_in_discovery == 0) {
839
- ++discovery_index;
840
- num_priorities_remaining_in_discovery =
841
- discovery_mechanisms_[discovery_index].num_priorities;
874
+ Json child_policy;
875
+ if (!discovery_mechanisms_[discovery_index]
876
+ .discovery_mechanism->override_child_policy()
877
+ .empty()) {
878
+ child_policy = discovery_mechanisms_[discovery_index]
879
+ .discovery_mechanism->override_child_policy();
842
880
  } else {
843
- --num_priorities_remaining_in_discovery;
844
- }
845
- const auto& localities = priority_list_[priority].localities;
846
- Json::Object weighted_targets;
847
- for (const auto& p : localities) {
848
- XdsLocalityName* locality_name = p.first;
849
- const auto& locality = p.second;
850
- // Construct JSON object containing locality name.
851
- Json::Object locality_name_json;
852
- if (!locality_name->region().empty()) {
853
- locality_name_json["region"] = locality_name->region();
854
- }
855
- if (!locality_name->zone().empty()) {
856
- locality_name_json["zone"] = locality_name->zone();
857
- }
858
- if (!locality_name->sub_zone().empty()) {
859
- locality_name_json["subzone"] = locality_name->sub_zone();
881
+ const auto& xds_lb_policy = config_->xds_lb_policy().object_value();
882
+ if (xds_lb_policy.find("ROUND_ROBIN") != xds_lb_policy.end()) {
883
+ const auto& localities = priority_list_[priority].localities;
884
+ Json::Object weighted_targets;
885
+ for (const auto& p : localities) {
886
+ XdsLocalityName* locality_name = p.first;
887
+ const auto& locality = p.second;
888
+ // Construct JSON object containing locality name.
889
+ Json::Object locality_name_json;
890
+ if (!locality_name->region().empty()) {
891
+ locality_name_json["region"] = locality_name->region();
892
+ }
893
+ if (!locality_name->zone().empty()) {
894
+ locality_name_json["zone"] = locality_name->zone();
895
+ }
896
+ if (!locality_name->sub_zone().empty()) {
897
+ locality_name_json["sub_zone"] = locality_name->sub_zone();
898
+ }
899
+ // Add weighted target entry.
900
+ weighted_targets[locality_name->AsHumanReadableString()] =
901
+ Json::Object{
902
+ {"weight", locality.lb_weight},
903
+ {"childPolicy",
904
+ Json::Array{
905
+ Json::Object{
906
+ {"round_robin", Json::Object()},
907
+ },
908
+ }},
909
+ };
910
+ }
911
+ // Construct locality-picking policy.
912
+ // Start with field from our config and add the "targets" field.
913
+ child_policy = Json::Array{
914
+ Json::Object{
915
+ {"weighted_target_experimental",
916
+ Json::Object{
917
+ {"targets", Json::Object()},
918
+ }},
919
+ },
920
+ };
921
+ Json::Object& config =
922
+ *(*child_policy.mutable_array())[0].mutable_object();
923
+ auto it = config.begin();
924
+ GPR_ASSERT(it != config.end());
925
+ (*it->second.mutable_object())["targets"] = std::move(weighted_targets);
926
+ } else {
927
+ auto it = xds_lb_policy.find("RING_HASH");
928
+ GPR_ASSERT(it != xds_lb_policy.end());
929
+ Json::Object ring_hash_experimental_policy = it->second.object_value();
930
+ child_policy = Json::Array{
931
+ Json::Object{
932
+ {"ring_hash_experimental", ring_hash_experimental_policy},
933
+ },
934
+ };
860
935
  }
861
- // Add weighted target entry.
862
- weighted_targets[locality_name->AsHumanReadableString()] = Json::Object{
863
- {"weight", locality.lb_weight},
864
- {"childPolicy", config_->endpoint_picking_policy()},
865
- };
866
936
  }
867
- // Construct locality-picking policy.
868
- // Start with field from our config and add the "targets" field.
869
- Json locality_picking_config = config_->locality_picking_policy();
870
- Json::Object& config =
871
- *(*locality_picking_config.mutable_array())[0].mutable_object();
872
- auto it = config.begin();
873
- GPR_ASSERT(it != config.end());
874
- (*it->second.mutable_object())["targets"] = std::move(weighted_targets);
875
937
  // Wrap it in the drop policy.
876
938
  Json::Array drop_categories;
877
939
  if (discovery_mechanisms_[discovery_index].drop_config != nullptr) {
@@ -887,7 +949,7 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
887
949
  .discovery_mechanism->GetLrsClusterKey();
888
950
  Json::Object xds_cluster_impl_config = {
889
951
  {"clusterName", std::string(lrs_key.first)},
890
- {"childPolicy", std::move(locality_picking_config)},
952
+ {"childPolicy", std::move(child_policy)},
891
953
  {"dropCategories", std::move(drop_categories)},
892
954
  {"maxConcurrentRequests",
893
955
  config_->discovery_mechanisms()[discovery_index]
@@ -909,10 +971,24 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
909
971
  const size_t child_number = priority_child_numbers_[priority];
910
972
  std::string child_name = absl::StrCat("child", child_number);
911
973
  priority_priorities.emplace_back(child_name);
912
- priority_children[child_name] = Json::Object{
974
+ Json::Object child_config = {
913
975
  {"config", std::move(locality_picking_policy)},
914
- {"ignore_reresolution_requests", true},
915
976
  };
977
+ if (discovery_mechanisms_[discovery_index]
978
+ .discovery_mechanism->disable_reresolution()) {
979
+ child_config["ignore_reresolution_requests"] = true;
980
+ }
981
+ priority_children[child_name] = std::move(child_config);
982
+ // Each priority in the priority_list_ should correspond to a priority in a
983
+ // discovery mechanism in discovery_mechanisms_ (both in the same order).
984
+ // Keeping track of the discovery_mechanism each priority belongs to.
985
+ --num_priorities_remaining_in_discovery;
986
+ while (num_priorities_remaining_in_discovery == 0 &&
987
+ discovery_index < discovery_mechanisms_.size() - 1) {
988
+ ++discovery_index;
989
+ num_priorities_remaining_in_discovery =
990
+ discovery_mechanisms_[discovery_index].num_priorities;
991
+ }
916
992
  }
917
993
  // There should be matching number of priorities in discovery_mechanisms_ and
918
994
  // in priority_list_; therefore at the end of looping through all the
@@ -1077,58 +1153,104 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1077
1153
  discovery_mechanisms.emplace_back(std::move(discovery_mechanism));
1078
1154
  }
1079
1155
  }
1080
- // Locality-picking policy.
1081
- Json locality_picking_policy;
1082
- it = json.object_value().find("localityPickingPolicy");
1083
- if (it == json.object_value().end()) {
1084
- locality_picking_policy = Json::Array{
1085
- Json::Object{
1086
- {"weighted_target_experimental",
1087
- Json::Object{
1088
- {"targets", Json::Object()},
1089
- }},
1090
- },
1091
- };
1092
- } else {
1093
- locality_picking_policy = it->second;
1094
- }
1095
- grpc_error* parse_error = GRPC_ERROR_NONE;
1096
- if (LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1097
- locality_picking_policy, &parse_error) == nullptr) {
1098
- GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
1099
- error_list.push_back(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1100
- "localityPickingPolicy", &parse_error, 1));
1101
- GRPC_ERROR_UNREF(parse_error);
1102
- }
1103
- // Endpoint-picking policy. Called "childPolicy" for xds policy.
1104
- Json endpoint_picking_policy;
1105
- it = json.object_value().find("endpointPickingPolicy");
1106
- if (it == json.object_value().end()) {
1107
- endpoint_picking_policy = Json::Array{
1108
- Json::Object{
1109
- {"round_robin", Json::Object()},
1110
- },
1111
- };
1112
- } else {
1113
- endpoint_picking_policy = it->second;
1114
- }
1115
- parse_error = GRPC_ERROR_NONE;
1116
- if (LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1117
- endpoint_picking_policy, &parse_error) == nullptr) {
1118
- GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
1119
- error_list.push_back(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1120
- "endpointPickingPolicy", &parse_error, 1));
1121
- GRPC_ERROR_UNREF(parse_error);
1122
- }
1123
1156
  if (discovery_mechanisms.empty()) {
1124
1157
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1125
1158
  "field:discovery_mechanism error:list is missing or empty"));
1126
1159
  }
1160
+ Json xds_lb_policy = Json::Object{
1161
+ {"ROUND_ROBIN", Json::Object()},
1162
+ };
1163
+ it = json.object_value().find("xdsLbPolicy");
1164
+ if (it != json.object_value().end()) {
1165
+ if (it->second.type() != Json::Type::ARRAY) {
1166
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1167
+ "field:xdsLbPolicy error:type should be array"));
1168
+ } else {
1169
+ const Json::Array& array = it->second.array_value();
1170
+ for (size_t i = 0; i < array.size(); ++i) {
1171
+ if (array[i].type() != Json::Type::OBJECT) {
1172
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1173
+ "field:xdsLbPolicy error:element should be of type object"));
1174
+ continue;
1175
+ }
1176
+ const Json::Object& policy = array[i].object_value();
1177
+ auto policy_it = policy.find("ROUND_ROBIN");
1178
+ if (policy_it != policy.end()) {
1179
+ if (policy_it->second.type() != Json::Type::OBJECT) {
1180
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1181
+ "field:ROUND_ROBIN error:type should be object"));
1182
+ }
1183
+ break;
1184
+ }
1185
+ policy_it = policy.find("RING_HASH");
1186
+ if (policy_it != policy.end()) {
1187
+ if (policy_it->second.type() != Json::Type::OBJECT) {
1188
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1189
+ "field:RING_HASH error:type should be object"));
1190
+ continue;
1191
+ }
1192
+ // TODO(donnadionne): Move this to a method in
1193
+ // ring_hash_experimental and call it here.
1194
+ const Json::Object& ring_hash = policy_it->second.object_value();
1195
+ xds_lb_policy = array[i];
1196
+ size_t min_ring_size = 1024;
1197
+ size_t max_ring_size = 8388608;
1198
+ auto ring_hash_it = ring_hash.find("min_ring_size");
1199
+ if (ring_hash_it == ring_hash.end()) {
1200
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1201
+ "field:min_ring_size missing"));
1202
+ } else if (ring_hash_it->second.type() != Json::Type::NUMBER) {
1203
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1204
+ "field:min_ring_size error: should be of "
1205
+ "number"));
1206
+ } else {
1207
+ min_ring_size = gpr_parse_nonnegative_int(
1208
+ ring_hash_it->second.string_value().c_str());
1209
+ }
1210
+ ring_hash_it = ring_hash.find("max_ring_size");
1211
+ if (ring_hash_it == ring_hash.end()) {
1212
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1213
+ "field:max_ring_size missing"));
1214
+ } else if (ring_hash_it->second.type() != Json::Type::NUMBER) {
1215
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1216
+ "field:max_ring_size error: should be of "
1217
+ "number"));
1218
+ } else {
1219
+ max_ring_size = gpr_parse_nonnegative_int(
1220
+ ring_hash_it->second.string_value().c_str());
1221
+ }
1222
+ if (min_ring_size <= 0 || min_ring_size > 8388608 ||
1223
+ max_ring_size <= 0 || max_ring_size > 8388608 ||
1224
+ min_ring_size > max_ring_size) {
1225
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1226
+ "field:max_ring_size and or min_ring_size error: "
1227
+ "values need to be in the range of 1 to 8388608 "
1228
+ "and max_ring_size cannot be smaller than "
1229
+ "min_ring_size"));
1230
+ }
1231
+ ring_hash_it = ring_hash.find("hash_function");
1232
+ if (ring_hash_it == ring_hash.end()) {
1233
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1234
+ "field:hash_function missing"));
1235
+ } else if (ring_hash_it->second.type() != Json::Type::STRING) {
1236
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1237
+ "field:hash_function error: should be a "
1238
+ "string"));
1239
+ } else if (ring_hash_it->second.string_value() != "XX_HASH" &&
1240
+ ring_hash_it->second.string_value() != "MURMUR_HASH_2") {
1241
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1242
+ "field:hash_function error: unsupported "
1243
+ "hash_function"));
1244
+ }
1245
+ break;
1246
+ }
1247
+ }
1248
+ }
1249
+ }
1127
1250
  // Construct config.
1128
1251
  if (error_list.empty()) {
1129
1252
  return MakeRefCounted<XdsClusterResolverLbConfig>(
1130
- std::move(discovery_mechanisms), std::move(locality_picking_policy),
1131
- std::move(endpoint_picking_policy));
1253
+ std::move(discovery_mechanisms), std::move(xds_lb_policy));
1132
1254
  } else {
1133
1255
  *error = GRPC_ERROR_CREATE_FROM_VECTOR(
1134
1256
  "xds_cluster_resolver_experimental LB policy config", &error_list);
@@ -1236,7 +1358,7 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1236
1358
  }
1237
1359
 
1238
1360
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
1239
- const char* name, LoadBalancingPolicy::Args args) const override {
1361
+ const char* /*name*/, LoadBalancingPolicy::Args args) const override {
1240
1362
  return MakeOrphanable<XdsClusterResolverLb>(xds_client_, std::move(args));
1241
1363
  }
1242
1364