grpc 1.33.0.pre1 → 1.34.0

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

Potentially problematic release.


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

Files changed (533) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +342 -134
  3. data/include/grpc/grpc.h +1 -2
  4. data/include/grpc/grpc_security.h +149 -172
  5. data/include/grpc/impl/codegen/grpc_types.h +9 -2
  6. data/include/grpc/impl/codegen/port_platform.h +22 -55
  7. data/src/core/ext/filters/client_channel/client_channel.cc +11 -34
  8. data/src/core/ext/filters/client_channel/config_selector.h +2 -3
  9. data/src/core/ext/filters/client_channel/health/health_check_client.cc +4 -1
  10. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
  11. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  12. data/src/core/ext/filters/client_channel/lb_policy.cc +5 -1
  13. data/src/core/ext/filters/client_channel/lb_policy.h +3 -3
  14. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +1 -1
  15. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +80 -71
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
  18. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +2 -2
  19. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +47 -17
  20. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +2 -2
  21. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +8 -5
  22. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -3
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +1 -1
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +16 -243
  25. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +53 -17
  26. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +809 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +20 -25
  28. data/src/core/ext/filters/client_channel/resolver.cc +3 -1
  29. data/src/core/ext/filters/client_channel/resolver.h +4 -1
  30. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +1 -1
  31. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -1
  32. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
  33. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
  34. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
  35. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +20 -0
  36. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +66 -7
  37. data/src/core/ext/filters/client_channel/resolver_registry.cc +4 -4
  38. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +13 -25
  39. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +1 -1
  40. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +2 -2
  41. data/src/core/ext/filters/client_channel/retry_throttle.h +1 -1
  42. data/src/core/ext/filters/client_channel/server_address.h +0 -4
  43. data/src/core/ext/filters/client_channel/service_config.cc +3 -1
  44. data/src/core/ext/filters/client_channel/service_config.h +1 -1
  45. data/src/core/ext/filters/client_channel/subchannel.cc +18 -15
  46. data/src/core/ext/filters/client_channel/subchannel.h +2 -2
  47. data/src/core/ext/filters/client_channel/subchannel_interface.h +7 -15
  48. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -2
  49. data/src/core/ext/filters/deadline/deadline_filter.cc +83 -77
  50. data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
  51. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -1
  52. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  53. data/src/core/ext/filters/max_age/max_age_filter.cc +1 -1
  54. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +1 -1
  55. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +17 -3
  56. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
  57. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +4 -24
  58. data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -2
  59. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  60. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -8
  61. data/src/core/ext/transport/chttp2/transport/internal.h +0 -1
  62. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
  63. data/src/core/ext/transport/chttp2/transport/writing.cc +1 -2
  64. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +38 -0
  65. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  66. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
  67. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  68. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +254 -0
  69. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  70. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
  71. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  72. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +558 -0
  73. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
  74. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
  75. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  76. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +133 -0
  77. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  78. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
  79. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  80. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
  81. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  82. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +266 -0
  83. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +125 -0
  84. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +143 -0
  85. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
  86. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
  87. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  88. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
  89. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
  90. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
  91. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  92. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
  93. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
  94. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
  95. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  96. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +228 -0
  97. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +80 -0
  98. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +46 -0
  99. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  100. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
  101. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  102. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +55 -0
  103. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  104. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +110 -0
  105. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  106. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
  107. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
  108. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
  109. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  110. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
  111. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  112. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +190 -0
  113. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +55 -0
  114. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +185 -0
  115. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  116. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +62 -0
  117. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  118. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +97 -0
  119. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
  120. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +915 -0
  121. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +280 -0
  122. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
  123. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  124. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +64 -0
  125. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  126. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +511 -0
  127. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +115 -0
  128. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +48 -0
  129. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  130. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +166 -0
  131. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
  132. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +105 -0
  133. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  134. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +249 -0
  135. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
  136. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
  137. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
  138. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
  139. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  140. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +152 -0
  141. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +60 -0
  142. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +83 -0
  143. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
  144. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +82 -0
  145. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
  146. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +83 -0
  147. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  148. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +86 -0
  149. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
  150. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
  151. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
  152. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
  153. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  154. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
  155. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  156. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
  157. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  158. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +73 -0
  159. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  160. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +72 -0
  161. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  162. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
  163. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  164. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
  165. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  166. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
  167. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  168. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
  169. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +30 -0
  170. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
  171. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  172. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
  173. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  174. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
  175. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  176. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  177. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  178. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
  179. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  180. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +38 -0
  181. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  182. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
  183. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  184. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +39 -0
  185. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  186. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
  187. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  188. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
  189. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  190. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +39 -0
  191. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  192. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
  193. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  194. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
  195. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  196. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
  197. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  198. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
  199. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  200. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
  201. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  202. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
  203. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  204. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
  205. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  206. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +42 -0
  207. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +35 -0
  208. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +62 -0
  209. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +40 -0
  210. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +45 -0
  211. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +40 -0
  212. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +49 -0
  213. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +35 -0
  214. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +68 -0
  215. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +40 -0
  216. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +51 -0
  217. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +35 -0
  218. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +307 -0
  219. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  220. data/src/core/ext/xds/certificate_provider_factory.h +7 -5
  221. data/src/core/ext/xds/certificate_provider_store.cc +84 -0
  222. data/src/core/ext/xds/certificate_provider_store.h +65 -8
  223. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +119 -0
  224. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +72 -0
  225. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +28 -140
  226. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +6 -4
  227. data/src/core/ext/xds/xds_api.cc +241 -718
  228. data/src/core/ext/xds/xds_api.h +50 -9
  229. data/src/core/ext/xds/xds_bootstrap.cc +172 -25
  230. data/src/core/ext/xds/xds_bootstrap.h +23 -7
  231. data/src/core/ext/xds/xds_certificate_provider.cc +240 -0
  232. data/src/core/ext/xds/xds_certificate_provider.h +74 -0
  233. data/src/core/ext/xds/xds_client.cc +161 -128
  234. data/src/core/ext/xds/xds_client.h +12 -11
  235. data/src/core/ext/xds/xds_client_stats.cc +41 -4
  236. data/src/core/ext/xds/xds_client_stats.h +2 -2
  237. data/src/core/lib/channel/channel_args.cc +2 -1
  238. data/src/core/lib/channel/channel_trace.cc +4 -2
  239. data/src/core/lib/channel/channelz.h +2 -2
  240. data/src/core/lib/channel/handshaker.h +2 -2
  241. data/src/core/lib/compression/compression.cc +8 -4
  242. data/src/core/lib/compression/compression_internal.cc +10 -5
  243. data/src/core/lib/compression/compression_internal.h +2 -1
  244. data/src/core/lib/compression/stream_compression_identity.cc +1 -3
  245. data/src/core/lib/debug/stats_data.cc +1 -0
  246. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  247. data/src/core/lib/gpr/log_linux.cc +17 -3
  248. data/src/core/lib/gpr/log_posix.cc +13 -1
  249. data/src/core/lib/gpr/log_windows.cc +16 -4
  250. data/src/core/lib/gpr/murmur_hash.cc +1 -1
  251. data/src/core/lib/gpr/string.cc +1 -1
  252. data/src/core/lib/gpr/time_precise.cc +3 -2
  253. data/src/core/lib/gpr/tls.h +4 -0
  254. data/src/core/lib/gpr/tls_msvc.h +2 -0
  255. data/src/core/lib/gpr/tls_stdcpp.h +48 -0
  256. data/src/core/lib/gpr/useful.h +5 -4
  257. data/src/core/lib/gprpp/dual_ref_counted.h +44 -49
  258. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  259. data/src/core/lib/gprpp/examine_stack.h +46 -0
  260. data/src/core/lib/gprpp/fork.cc +2 -2
  261. data/src/core/lib/gprpp/manual_constructor.h +1 -1
  262. data/src/core/lib/gprpp/orphanable.h +4 -8
  263. data/src/core/lib/gprpp/ref_counted.h +40 -46
  264. data/src/core/lib/gprpp/ref_counted_ptr.h +9 -11
  265. data/src/core/lib/{security/authorization/mock_cel/statusor.h → gprpp/stat.h} +13 -25
  266. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  267. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  268. data/src/core/lib/gprpp/thd.h +2 -2
  269. data/src/core/lib/gprpp/thd_posix.cc +36 -36
  270. data/src/core/lib/http/parser.cc +46 -25
  271. data/src/core/lib/iomgr/error.cc +2 -1
  272. data/src/core/lib/iomgr/ev_epollex_linux.cc +8 -4
  273. data/src/core/lib/iomgr/exec_ctx.cc +1 -1
  274. data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
  275. data/src/core/lib/iomgr/executor/threadpool.h +3 -3
  276. data/src/core/lib/iomgr/parse_address.cc +84 -6
  277. data/src/core/lib/iomgr/parse_address.h +20 -0
  278. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
  279. data/src/core/lib/iomgr/python_util.h +3 -3
  280. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -5
  281. data/src/core/lib/iomgr/tcp_posix.cc +3 -2
  282. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  283. data/src/core/lib/iomgr/unix_sockets_posix.cc +27 -15
  284. data/src/core/lib/iomgr/unix_sockets_posix.h +5 -0
  285. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +7 -0
  286. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  287. data/src/core/lib/json/json.h +2 -2
  288. data/src/core/lib/json/json_reader.cc +8 -4
  289. data/src/core/lib/json/json_util.h +167 -0
  290. data/src/core/lib/json/json_writer.cc +2 -1
  291. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +3 -1
  292. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +5 -4
  293. data/src/core/lib/security/authorization/mock_cel/cel_value.h +4 -0
  294. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +6 -6
  295. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +10 -9
  296. data/src/core/lib/security/context/security_context.h +3 -1
  297. data/src/core/lib/security/credentials/credentials.cc +1 -1
  298. data/src/core/lib/security/credentials/credentials.h +3 -3
  299. data/src/core/lib/security/credentials/external/aws_request_signer.cc +208 -0
  300. data/src/core/lib/security/credentials/external/aws_request_signer.h +73 -0
  301. data/src/core/lib/security/credentials/external/external_account_credentials.cc +311 -0
  302. data/src/core/lib/security/credentials/external/external_account_credentials.h +118 -0
  303. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +136 -0
  304. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +49 -0
  305. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +211 -0
  306. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +59 -0
  307. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +51 -0
  308. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  309. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
  310. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -1
  311. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +2 -2
  312. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +35 -5
  313. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +12 -8
  314. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +78 -0
  315. data/src/core/lib/security/{certificate_provider.h → credentials/tls/grpc_tls_certificate_provider.h} +32 -18
  316. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +77 -149
  317. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +58 -187
  318. data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -12
  319. data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
  320. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
  321. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +88 -0
  322. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +70 -0
  323. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  324. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  325. data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
  326. data/src/core/lib/security/security_connector/security_connector.cc +1 -1
  327. data/src/core/lib/security/security_connector/security_connector.h +4 -2
  328. data/src/core/lib/security/security_connector/ssl_utils.h +4 -2
  329. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +293 -275
  330. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +106 -61
  331. data/src/core/lib/security/transport/security_handshaker.cc +1 -1
  332. data/src/core/lib/security/transport/server_auth_filter.cc +2 -1
  333. data/src/core/lib/security/util/json_util.h +1 -0
  334. data/src/core/lib/slice/slice.cc +7 -4
  335. data/src/core/lib/slice/slice_buffer.cc +2 -1
  336. data/src/core/lib/slice/slice_intern.cc +2 -2
  337. data/src/core/lib/surface/call.cc +9 -8
  338. data/src/core/lib/surface/completion_queue.cc +7 -6
  339. data/src/core/lib/surface/server.cc +4 -2
  340. data/src/core/lib/surface/server.h +2 -2
  341. data/src/core/lib/surface/validate_metadata.h +3 -0
  342. data/src/core/lib/surface/version.cc +2 -2
  343. data/src/core/lib/transport/authority_override.h +2 -0
  344. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  345. data/src/core/lib/transport/byte_stream.h +3 -3
  346. data/src/core/lib/transport/connectivity_state.h +3 -3
  347. data/src/core/lib/transport/metadata.h +2 -2
  348. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  349. data/src/core/lib/transport/transport.cc +5 -3
  350. data/src/core/lib/transport/transport.h +1 -1
  351. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -4
  352. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -3
  353. data/src/core/tsi/fake_transport_security.cc +1 -0
  354. data/src/core/tsi/local_transport_security.cc +5 -1
  355. data/src/core/tsi/local_transport_security.h +6 -7
  356. data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -0
  357. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -1
  358. data/src/core/tsi/ssl_transport_security.cc +14 -7
  359. data/src/core/tsi/ssl_transport_security.h +3 -0
  360. data/src/core/tsi/transport_security.cc +4 -2
  361. data/src/ruby/ext/grpc/extconf.rb +1 -1
  362. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +22 -14
  363. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -24
  364. data/src/ruby/lib/grpc/version.rb +1 -1
  365. data/third_party/abseil-cpp/absl/algorithm/container.h +59 -22
  366. data/third_party/abseil-cpp/absl/base/attributes.h +99 -38
  367. data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
  368. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  369. data/third_party/abseil-cpp/absl/base/config.h +60 -17
  370. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +428 -335
  371. data/third_party/abseil-cpp/absl/base/internal/bits.h +17 -16
  372. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -0
  373. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  374. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  375. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +1 -1
  376. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +29 -1
  377. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +2 -2
  378. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +7 -5
  379. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +25 -38
  380. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +19 -25
  381. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +8 -0
  382. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
  383. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  384. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  385. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +2 -2
  386. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
  387. data/third_party/abseil-cpp/absl/base/macros.h +36 -109
  388. data/third_party/abseil-cpp/absl/base/optimization.h +61 -1
  389. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  390. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  391. data/third_party/abseil-cpp/absl/base/thread_annotations.h +94 -39
  392. data/third_party/abseil-cpp/absl/container/fixed_array.h +42 -25
  393. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +2 -1
  394. data/third_party/abseil-cpp/absl/container/inlined_vector.h +33 -36
  395. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -2
  396. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +33 -8
  397. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +49 -29
  398. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +15 -0
  399. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +24 -7
  400. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -1
  401. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +35 -11
  402. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +10 -9
  403. data/third_party/abseil-cpp/absl/container/internal/layout.h +7 -5
  404. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +55 -34
  405. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +5 -4
  406. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +66 -16
  407. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +4 -0
  408. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +13 -4
  409. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +43 -24
  410. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +12 -3
  411. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +10 -2
  412. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +22 -1
  413. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +0 -21
  414. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +12 -1
  415. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  416. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +100 -20
  417. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  418. data/third_party/abseil-cpp/absl/functional/function_ref.h +1 -1
  419. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  420. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
  421. data/third_party/abseil-cpp/absl/hash/hash.h +6 -5
  422. data/third_party/abseil-cpp/absl/hash/internal/hash.h +73 -65
  423. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  424. data/third_party/abseil-cpp/absl/meta/type_traits.h +2 -8
  425. data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
  426. data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
  427. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +51 -0
  428. data/third_party/abseil-cpp/absl/status/status.cc +4 -6
  429. data/third_party/abseil-cpp/absl/status/status.h +502 -113
  430. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +5 -10
  431. data/third_party/abseil-cpp/absl/strings/charconv.cc +2 -2
  432. data/third_party/abseil-cpp/absl/strings/cord.cc +91 -112
  433. data/third_party/abseil-cpp/absl/strings/cord.h +360 -205
  434. data/third_party/abseil-cpp/absl/strings/escaping.cc +9 -9
  435. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  436. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  437. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  438. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  439. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +45 -23
  440. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +222 -136
  441. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +136 -64
  442. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +1 -1
  443. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +14 -21
  444. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -14
  445. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
  446. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
  447. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +999 -87
  448. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +3 -3
  449. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  450. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +8 -6
  451. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +13 -11
  452. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -2
  453. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  454. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  455. data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
  456. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  457. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -0
  458. data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
  459. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
  460. data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
  461. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
  462. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +3 -3
  463. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +28 -28
  464. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +4 -16
  465. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -1
  466. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +8 -0
  467. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -2
  468. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -64
  469. data/third_party/abseil-cpp/absl/synchronization/mutex.h +15 -6
  470. data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
  471. data/third_party/abseil-cpp/absl/time/clock.cc +3 -3
  472. data/third_party/abseil-cpp/absl/time/duration.cc +90 -59
  473. data/third_party/abseil-cpp/absl/time/format.cc +43 -36
  474. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +26 -16
  475. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
  476. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
  477. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
  478. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
  479. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
  480. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
  481. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
  482. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +8 -7
  483. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -6
  484. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
  485. data/third_party/abseil-cpp/absl/time/time.h +15 -16
  486. data/third_party/abseil-cpp/absl/types/internal/variant.h +4 -4
  487. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  488. data/third_party/abseil-cpp/absl/types/span.h +49 -36
  489. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  490. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  491. data/third_party/boringssl-with-bazel/err_data.c +340 -336
  492. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  493. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +173 -35
  494. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +46 -7
  495. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +8 -2
  496. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +90 -63
  497. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +60 -60
  498. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +179 -47
  499. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +10 -0
  501. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
  502. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +14 -14
  503. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
  504. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +24 -0
  505. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +7 -5
  506. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -2
  507. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
  508. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  509. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  510. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
  511. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +55 -1
  512. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  513. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +31 -23
  514. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +435 -394
  515. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  516. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +35 -0
  517. data/third_party/boringssl-with-bazel/src/ssl/internal.h +36 -1
  518. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +42 -1
  519. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +67 -0
  520. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +11 -14
  521. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +216 -11
  522. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +53 -11
  523. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +133 -39
  524. data/third_party/upb/upb/def.c +2169 -0
  525. data/third_party/upb/upb/def.h +330 -0
  526. data/third_party/upb/upb/def.hpp +525 -0
  527. data/third_party/upb/upb/reflection.c +391 -0
  528. data/third_party/upb/upb/reflection.h +168 -0
  529. data/third_party/upb/upb/text_encode.c +398 -0
  530. data/third_party/upb/upb/text_encode.h +35 -0
  531. metadata +227 -37
  532. data/src/core/ext/filters/client_channel/lb_policy/xds/eds_drop.cc +0 -571
  533. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
@@ -1,571 +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 "absl/strings/string_view.h"
20
-
21
- #include <grpc/grpc.h>
22
-
23
- #include "src/core/ext/filters/client_channel/lb_policy.h"
24
- #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
25
- #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
26
- #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
27
- #include "src/core/ext/xds/xds_client.h"
28
- #include "src/core/ext/xds/xds_client_stats.h"
29
- #include "src/core/lib/channel/channel_args.h"
30
- #include "src/core/lib/gpr/string.h"
31
- #include "src/core/lib/gprpp/orphanable.h"
32
- #include "src/core/lib/gprpp/ref_counted_ptr.h"
33
- #include "src/core/lib/iomgr/work_serializer.h"
34
-
35
- namespace grpc_core {
36
-
37
- TraceFlag grpc_eds_drop_lb_trace(false, "eds_drop_lb");
38
-
39
- namespace {
40
-
41
- constexpr char kEdsDrop[] = "eds_drop_experimental";
42
-
43
- // Config for EDS drop LB policy.
44
- class EdsDropLbConfig : public LoadBalancingPolicy::Config {
45
- public:
46
- EdsDropLbConfig(RefCountedPtr<LoadBalancingPolicy::Config> child_policy,
47
- std::string cluster_name, std::string eds_service_name,
48
- absl::optional<std::string> lrs_load_reporting_server_name,
49
- RefCountedPtr<XdsApi::EdsUpdate::DropConfig> drop_config)
50
- : child_policy_(std::move(child_policy)),
51
- cluster_name_(std::move(cluster_name)),
52
- eds_service_name_(std::move(eds_service_name)),
53
- lrs_load_reporting_server_name_(
54
- std::move(lrs_load_reporting_server_name)),
55
- drop_config_(std::move(drop_config)) {}
56
-
57
- const char* name() const override { return kEdsDrop; }
58
-
59
- RefCountedPtr<LoadBalancingPolicy::Config> child_policy() const {
60
- return child_policy_;
61
- }
62
- const std::string& cluster_name() const { return cluster_name_; }
63
- const std::string& eds_service_name() const { return eds_service_name_; }
64
- const absl::optional<std::string>& lrs_load_reporting_server_name() const {
65
- return lrs_load_reporting_server_name_;
66
- };
67
- RefCountedPtr<XdsApi::EdsUpdate::DropConfig> drop_config() const {
68
- return drop_config_;
69
- }
70
-
71
- private:
72
- RefCountedPtr<LoadBalancingPolicy::Config> child_policy_;
73
- std::string cluster_name_;
74
- std::string eds_service_name_;
75
- absl::optional<std::string> lrs_load_reporting_server_name_;
76
- RefCountedPtr<XdsApi::EdsUpdate::DropConfig> drop_config_;
77
- };
78
-
79
- // EDS Drop LB policy.
80
- class EdsDropLb : public LoadBalancingPolicy {
81
- public:
82
- EdsDropLb(RefCountedPtr<XdsClient> xds_client, Args args);
83
-
84
- const char* name() const override { return kEdsDrop; }
85
-
86
- void UpdateLocked(UpdateArgs args) override;
87
- void ExitIdleLocked() override;
88
- void ResetBackoffLocked() override;
89
-
90
- private:
91
- // A simple wrapper for ref-counting a picker from the child policy.
92
- class RefCountedPicker : public RefCounted<RefCountedPicker> {
93
- public:
94
- explicit RefCountedPicker(std::unique_ptr<SubchannelPicker> picker)
95
- : picker_(std::move(picker)) {}
96
- PickResult Pick(PickArgs args) { return picker_->Pick(args); }
97
-
98
- private:
99
- std::unique_ptr<SubchannelPicker> picker_;
100
- };
101
-
102
- // A picker that wraps the picker from the child to perform drops.
103
- class DropPicker : public SubchannelPicker {
104
- public:
105
- DropPicker(EdsDropLb* eds_drop_lb, RefCountedPtr<RefCountedPicker> picker)
106
- : drop_config_(eds_drop_lb->config_->drop_config()),
107
- drop_stats_(eds_drop_lb->drop_stats_),
108
- picker_(std::move(picker)) {}
109
-
110
- PickResult Pick(PickArgs args);
111
-
112
- private:
113
- RefCountedPtr<XdsApi::EdsUpdate::DropConfig> drop_config_;
114
- RefCountedPtr<XdsClusterDropStats> drop_stats_;
115
- RefCountedPtr<RefCountedPicker> picker_;
116
- };
117
-
118
- class Helper : public ChannelControlHelper {
119
- public:
120
- explicit Helper(RefCountedPtr<EdsDropLb> eds_drop_policy)
121
- : eds_drop_policy_(std::move(eds_drop_policy)) {}
122
-
123
- ~Helper() { eds_drop_policy_.reset(DEBUG_LOCATION, "Helper"); }
124
-
125
- RefCountedPtr<SubchannelInterface> CreateSubchannel(
126
- ServerAddress address, const grpc_channel_args& args) override;
127
- void UpdateState(grpc_connectivity_state state, const absl::Status& status,
128
- std::unique_ptr<SubchannelPicker> picker) override;
129
- void RequestReresolution() override;
130
- void AddTraceEvent(TraceSeverity severity,
131
- absl::string_view message) override;
132
-
133
- private:
134
- RefCountedPtr<EdsDropLb> eds_drop_policy_;
135
- };
136
-
137
- ~EdsDropLb();
138
-
139
- void ShutdownLocked() override;
140
-
141
- OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
142
- const grpc_channel_args* args);
143
- void UpdateChildPolicyLocked(ServerAddressList addresses,
144
- const grpc_channel_args* args);
145
-
146
- void MaybeUpdatePickerLocked();
147
-
148
- // Current config from the resolver.
149
- RefCountedPtr<EdsDropLbConfig> config_;
150
-
151
- // Internal state.
152
- bool shutting_down_ = false;
153
-
154
- // The xds client.
155
- RefCountedPtr<XdsClient> xds_client_;
156
-
157
- // The stats for client-side load reporting.
158
- RefCountedPtr<XdsClusterDropStats> drop_stats_;
159
-
160
- OrphanablePtr<LoadBalancingPolicy> child_policy_;
161
-
162
- // Latest state and picker reported by the child policy.
163
- grpc_connectivity_state state_ = GRPC_CHANNEL_IDLE;
164
- absl::Status status_;
165
- RefCountedPtr<RefCountedPicker> picker_;
166
- };
167
-
168
- //
169
- // EdsDropLb::DropPicker
170
- //
171
-
172
- LoadBalancingPolicy::PickResult EdsDropLb::DropPicker::Pick(
173
- LoadBalancingPolicy::PickArgs args) {
174
- // Handle drop.
175
- const std::string* drop_category;
176
- if (drop_config_->ShouldDrop(&drop_category)) {
177
- if (drop_stats_ != nullptr) drop_stats_->AddCallDropped(*drop_category);
178
- PickResult result;
179
- result.type = PickResult::PICK_COMPLETE;
180
- return result;
181
- }
182
- // If we're not dropping the call, we should always have a child picker.
183
- if (picker_ == nullptr) { // Should never happen.
184
- PickResult result;
185
- result.type = PickResult::PICK_FAILED;
186
- result.error =
187
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
188
- "eds_drop picker not given any child picker"),
189
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_INTERNAL);
190
- return result;
191
- }
192
- // Not dropping, so delegate to child picker.
193
- return picker_->Pick(args);
194
- }
195
-
196
- //
197
- // EdsDropLb
198
- //
199
-
200
- EdsDropLb::EdsDropLb(RefCountedPtr<XdsClient> xds_client, Args args)
201
- : LoadBalancingPolicy(std::move(args)), xds_client_(std::move(xds_client)) {
202
- if (GRPC_TRACE_FLAG_ENABLED(grpc_eds_drop_lb_trace)) {
203
- gpr_log(GPR_INFO, "[eds_drop_lb %p] created -- using xds client %p", this,
204
- xds_client_.get());
205
- }
206
- }
207
-
208
- EdsDropLb::~EdsDropLb() {
209
- if (GRPC_TRACE_FLAG_ENABLED(grpc_eds_drop_lb_trace)) {
210
- gpr_log(GPR_INFO, "[eds_drop_lb %p] destroying xds LB policy", this);
211
- }
212
- }
213
-
214
- void EdsDropLb::ShutdownLocked() {
215
- if (GRPC_TRACE_FLAG_ENABLED(grpc_eds_drop_lb_trace)) {
216
- gpr_log(GPR_INFO, "[eds_drop_lb %p] shutting down", this);
217
- }
218
- shutting_down_ = true;
219
- // Remove the child policy's interested_parties pollset_set from the
220
- // xDS policy.
221
- if (child_policy_ != nullptr) {
222
- grpc_pollset_set_del_pollset_set(child_policy_->interested_parties(),
223
- interested_parties());
224
- child_policy_.reset();
225
- }
226
- // Drop our ref to the child's picker, in case it's holding a ref to
227
- // the child.
228
- picker_.reset();
229
- drop_stats_.reset();
230
- xds_client_.reset();
231
- }
232
-
233
- void EdsDropLb::ExitIdleLocked() {
234
- if (child_policy_ != nullptr) child_policy_->ExitIdleLocked();
235
- }
236
-
237
- void EdsDropLb::ResetBackoffLocked() {
238
- // The XdsClient will have its backoff reset by the xds resolver, so we
239
- // don't need to do it here.
240
- if (child_policy_ != nullptr) child_policy_->ResetBackoffLocked();
241
- }
242
-
243
- void EdsDropLb::UpdateLocked(UpdateArgs args) {
244
- if (GRPC_TRACE_FLAG_ENABLED(grpc_eds_drop_lb_trace)) {
245
- gpr_log(GPR_INFO, "[eds_drop_lb %p] Received update", this);
246
- }
247
- // Update config.
248
- auto old_config = std::move(config_);
249
- config_ = std::move(args.config);
250
- // Update load reporting if needed.
251
- if (old_config == nullptr ||
252
- config_->lrs_load_reporting_server_name() !=
253
- old_config->lrs_load_reporting_server_name() ||
254
- config_->cluster_name() != old_config->cluster_name() ||
255
- config_->eds_service_name() != old_config->eds_service_name()) {
256
- drop_stats_.reset();
257
- if (config_->lrs_load_reporting_server_name().has_value()) {
258
- drop_stats_ = xds_client_->AddClusterDropStats(
259
- config_->lrs_load_reporting_server_name().value(),
260
- config_->cluster_name(), config_->eds_service_name());
261
- }
262
- MaybeUpdatePickerLocked();
263
- }
264
- // Update child policy.
265
- UpdateChildPolicyLocked(std::move(args.addresses), args.args);
266
- args.args = nullptr;
267
- }
268
-
269
- void EdsDropLb::MaybeUpdatePickerLocked() {
270
- // If we're dropping all calls, report READY, regardless of what (or
271
- // whether) the child has reported.
272
- if (config_->drop_config() != nullptr && config_->drop_config()->drop_all()) {
273
- auto drop_picker = absl::make_unique<DropPicker>(this, picker_);
274
- if (GRPC_TRACE_FLAG_ENABLED(grpc_eds_drop_lb_trace)) {
275
- gpr_log(GPR_INFO,
276
- "[eds_drop_lb %p] updating connectivity (drop all): state=READY "
277
- "picker=%p",
278
- this, drop_picker.get());
279
- }
280
- channel_control_helper()->UpdateState(GRPC_CHANNEL_READY, absl::Status(),
281
- std::move(drop_picker));
282
- return;
283
- }
284
- // Otherwise, update only if we have a child picker.
285
- if (picker_ != nullptr) {
286
- auto drop_picker = absl::make_unique<DropPicker>(this, picker_);
287
- if (GRPC_TRACE_FLAG_ENABLED(grpc_eds_drop_lb_trace)) {
288
- gpr_log(GPR_INFO,
289
- "[eds_drop_lb %p] updating connectivity: state=%s status=(%s) "
290
- "picker=%p",
291
- this, ConnectivityStateName(state_), status_.ToString().c_str(),
292
- drop_picker.get());
293
- }
294
- channel_control_helper()->UpdateState(state_, status_,
295
- std::move(drop_picker));
296
- }
297
- }
298
-
299
- OrphanablePtr<LoadBalancingPolicy> EdsDropLb::CreateChildPolicyLocked(
300
- const grpc_channel_args* args) {
301
- LoadBalancingPolicy::Args lb_policy_args;
302
- lb_policy_args.work_serializer = work_serializer();
303
- lb_policy_args.args = args;
304
- lb_policy_args.channel_control_helper =
305
- absl::make_unique<Helper>(Ref(DEBUG_LOCATION, "Helper"));
306
- OrphanablePtr<LoadBalancingPolicy> lb_policy =
307
- MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
308
- &grpc_eds_drop_lb_trace);
309
- if (GRPC_TRACE_FLAG_ENABLED(grpc_eds_drop_lb_trace)) {
310
- gpr_log(GPR_INFO, "[eds_drop_lb %p] Created new child policy handler %p",
311
- this, lb_policy.get());
312
- }
313
- // Add our interested_parties pollset_set to that of the newly created
314
- // child policy. This will make the child policy progress upon activity on
315
- // this policy, which in turn is tied to the application's call.
316
- grpc_pollset_set_add_pollset_set(lb_policy->interested_parties(),
317
- interested_parties());
318
- return lb_policy;
319
- }
320
-
321
- void EdsDropLb::UpdateChildPolicyLocked(ServerAddressList addresses,
322
- const grpc_channel_args* args) {
323
- // Create policy if needed.
324
- if (child_policy_ == nullptr) {
325
- child_policy_ = CreateChildPolicyLocked(args);
326
- }
327
- // Construct update args.
328
- UpdateArgs update_args;
329
- update_args.addresses = std::move(addresses);
330
- update_args.config = config_->child_policy();
331
- update_args.args = args;
332
- // Update the policy.
333
- if (GRPC_TRACE_FLAG_ENABLED(grpc_eds_drop_lb_trace)) {
334
- gpr_log(GPR_INFO, "[eds_drop_lb %p] Updating child policy handler %p", this,
335
- child_policy_.get());
336
- }
337
- child_policy_->UpdateLocked(std::move(update_args));
338
- }
339
-
340
- //
341
- // EdsDropLb::Helper
342
- //
343
-
344
- RefCountedPtr<SubchannelInterface> EdsDropLb::Helper::CreateSubchannel(
345
- ServerAddress address, const grpc_channel_args& args) {
346
- if (eds_drop_policy_->shutting_down_) return nullptr;
347
- return eds_drop_policy_->channel_control_helper()->CreateSubchannel(
348
- std::move(address), args);
349
- }
350
-
351
- void EdsDropLb::Helper::UpdateState(grpc_connectivity_state state,
352
- const absl::Status& status,
353
- std::unique_ptr<SubchannelPicker> picker) {
354
- if (eds_drop_policy_->shutting_down_) return;
355
- if (GRPC_TRACE_FLAG_ENABLED(grpc_eds_drop_lb_trace)) {
356
- gpr_log(GPR_INFO,
357
- "[eds_drop_lb %p] child connectivity state update: state=%s (%s) "
358
- "picker=%p",
359
- eds_drop_policy_.get(), ConnectivityStateName(state),
360
- status.ToString().c_str(), picker.get());
361
- }
362
- // Save the state and picker.
363
- eds_drop_policy_->state_ = state;
364
- eds_drop_policy_->status_ = status;
365
- eds_drop_policy_->picker_ =
366
- MakeRefCounted<RefCountedPicker>(std::move(picker));
367
- // Wrap the picker and return it to the channel.
368
- eds_drop_policy_->MaybeUpdatePickerLocked();
369
- }
370
-
371
- void EdsDropLb::Helper::RequestReresolution() {
372
- if (eds_drop_policy_->shutting_down_) return;
373
- eds_drop_policy_->channel_control_helper()->RequestReresolution();
374
- }
375
-
376
- void EdsDropLb::Helper::AddTraceEvent(TraceSeverity severity,
377
- absl::string_view message) {
378
- if (eds_drop_policy_->shutting_down_) return;
379
- eds_drop_policy_->channel_control_helper()->AddTraceEvent(severity, message);
380
- }
381
-
382
- //
383
- // factory
384
- //
385
-
386
- class EdsDropLbFactory : public LoadBalancingPolicyFactory {
387
- public:
388
- OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
389
- LoadBalancingPolicy::Args args) const override {
390
- grpc_error* error = GRPC_ERROR_NONE;
391
- RefCountedPtr<XdsClient> xds_client = XdsClient::GetOrCreate(&error);
392
- if (error != GRPC_ERROR_NONE) {
393
- gpr_log(GPR_ERROR,
394
- "cannot get XdsClient to instantiate eds_drop LB policy: %s",
395
- grpc_error_string(error));
396
- GRPC_ERROR_UNREF(error);
397
- return nullptr;
398
- }
399
- return MakeOrphanable<EdsDropLb>(std::move(xds_client), std::move(args));
400
- }
401
-
402
- const char* name() const override { return kEdsDrop; }
403
-
404
- RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
405
- const Json& json, grpc_error** error) const override {
406
- GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
407
- if (json.type() == Json::Type::JSON_NULL) {
408
- // This policy was configured in the deprecated loadBalancingPolicy
409
- // field or in the client API.
410
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
411
- "field:loadBalancingPolicy error:eds_drop policy requires "
412
- "configuration. Please use loadBalancingConfig field of service "
413
- "config instead.");
414
- return nullptr;
415
- }
416
- std::vector<grpc_error*> error_list;
417
- // Child policy.
418
- RefCountedPtr<LoadBalancingPolicy::Config> child_policy;
419
- auto it = json.object_value().find("childPolicy");
420
- if (it == json.object_value().end()) {
421
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
422
- "field:childPolicy error:required field missing"));
423
- } else {
424
- grpc_error* parse_error = GRPC_ERROR_NONE;
425
- child_policy = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
426
- it->second, &parse_error);
427
- if (child_policy == nullptr) {
428
- GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
429
- std::vector<grpc_error*> child_errors;
430
- child_errors.push_back(parse_error);
431
- error_list.push_back(
432
- GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
433
- }
434
- }
435
- // Cluster name.
436
- std::string cluster_name;
437
- it = json.object_value().find("clusterName");
438
- if (it == json.object_value().end()) {
439
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
440
- "field:clusterName error:required field missing"));
441
- } else if (it->second.type() != Json::Type::STRING) {
442
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
443
- "field:clusterName error:type should be string"));
444
- } else {
445
- cluster_name = it->second.string_value();
446
- }
447
- // EDS service name.
448
- std::string eds_service_name;
449
- it = json.object_value().find("edsServiceName");
450
- if (it != json.object_value().end()) {
451
- if (it->second.type() != Json::Type::STRING) {
452
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
453
- "field:edsServiceName error:type should be string"));
454
- } else {
455
- eds_service_name = it->second.string_value();
456
- }
457
- }
458
- // LRS load reporting server name.
459
- absl::optional<std::string> lrs_load_reporting_server_name;
460
- it = json.object_value().find("lrsLoadReportingServerName");
461
- if (it != json.object_value().end()) {
462
- if (it->second.type() != Json::Type::STRING) {
463
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
464
- "field:lrsLoadReportingServerName error:type should be string"));
465
- } else {
466
- lrs_load_reporting_server_name = it->second.string_value();
467
- }
468
- }
469
- // Drop config.
470
- auto drop_config = MakeRefCounted<XdsApi::EdsUpdate::DropConfig>();
471
- it = json.object_value().find("dropCategories");
472
- if (it == json.object_value().end()) {
473
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
474
- "field:dropCategories error:required field missing"));
475
- } else {
476
- std::vector<grpc_error*> child_errors =
477
- ParseDropCategories(it->second, drop_config.get());
478
- if (!child_errors.empty()) {
479
- error_list.push_back(GRPC_ERROR_CREATE_FROM_VECTOR(
480
- "field:dropCategories", &child_errors));
481
- }
482
- }
483
- if (!error_list.empty()) {
484
- *error = GRPC_ERROR_CREATE_FROM_VECTOR(
485
- "eds_drop_experimental LB policy config", &error_list);
486
- return nullptr;
487
- }
488
- return MakeRefCounted<EdsDropLbConfig>(
489
- std::move(child_policy), std::move(cluster_name),
490
- std::move(eds_service_name), std::move(lrs_load_reporting_server_name),
491
- std::move(drop_config));
492
- }
493
-
494
- private:
495
- static std::vector<grpc_error*> ParseDropCategories(
496
- const Json& json, XdsApi::EdsUpdate::DropConfig* drop_config) {
497
- std::vector<grpc_error*> error_list;
498
- if (json.type() != Json::Type::ARRAY) {
499
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
500
- "dropCategories field is not an array"));
501
- return error_list;
502
- }
503
- for (size_t i = 0; i < json.array_value().size(); ++i) {
504
- const Json& entry = json.array_value()[i];
505
- std::vector<grpc_error*> child_errors =
506
- ParseDropCategory(entry, drop_config);
507
- if (!child_errors.empty()) {
508
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
509
- absl::StrCat("errors parsing index ", i).c_str());
510
- for (size_t i = 0; i < child_errors.size(); ++i) {
511
- error = grpc_error_add_child(error, child_errors[i]);
512
- }
513
- error_list.push_back(error);
514
- }
515
- }
516
- return error_list;
517
- }
518
-
519
- static std::vector<grpc_error*> ParseDropCategory(
520
- const Json& json, XdsApi::EdsUpdate::DropConfig* drop_config) {
521
- std::vector<grpc_error*> error_list;
522
- if (json.type() != Json::Type::OBJECT) {
523
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
524
- "dropCategories entry is not an object"));
525
- return error_list;
526
- }
527
- std::string category;
528
- auto it = json.object_value().find("category");
529
- if (it == json.object_value().end()) {
530
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
531
- "\"category\" field not present"));
532
- } else if (it->second.type() != Json::Type::STRING) {
533
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
534
- "\"category\" field is not a string"));
535
- } else {
536
- category = it->second.string_value();
537
- }
538
- uint32_t requests_per_million = 0;
539
- it = json.object_value().find("requests_per_million");
540
- if (it == json.object_value().end()) {
541
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
542
- "\"requests_per_million\" field is not present"));
543
- } else if (it->second.type() != Json::Type::NUMBER) {
544
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
545
- "\"requests_per_million\" field is not a number"));
546
- } else {
547
- requests_per_million =
548
- gpr_parse_nonnegative_int(it->second.string_value().c_str());
549
- }
550
- if (error_list.empty()) {
551
- drop_config->AddCategory(std::move(category), requests_per_million);
552
- }
553
- return error_list;
554
- }
555
- };
556
-
557
- } // namespace
558
-
559
- } // namespace grpc_core
560
-
561
- //
562
- // Plugin registration
563
- //
564
-
565
- void grpc_lb_policy_eds_drop_init() {
566
- grpc_core::LoadBalancingPolicyRegistry::Builder::
567
- RegisterLoadBalancingPolicyFactory(
568
- absl::make_unique<grpc_core::EdsDropLbFactory>());
569
- }
570
-
571
- void grpc_lb_policy_eds_drop_shutdown() {}