grpc 1.28.0.pre2 → 1.31.0.pre1

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

Potentially problematic release.


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

Files changed (660) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +8313 -11862
  3. data/include/grpc/grpc.h +2 -2
  4. data/include/grpc/grpc_security.h +30 -9
  5. data/include/grpc/grpc_security_constants.h +4 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +23 -23
  7. data/include/grpc/impl/codegen/port_platform.h +6 -34
  8. data/include/grpc/module.modulemap +24 -39
  9. data/src/core/ext/filters/client_channel/backend_metric.cc +18 -12
  10. data/src/core/ext/filters/client_channel/client_channel.cc +618 -482
  11. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
  12. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  13. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  14. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
  15. data/src/core/ext/filters/client_channel/health/health_check_client.cc +9 -22
  16. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  17. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -5
  18. data/src/core/ext/filters/client_channel/http_proxy.cc +23 -14
  19. data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
  20. data/src/core/ext/filters/client_channel/lb_policy.h +44 -33
  21. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  22. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +297 -0
  24. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +83 -0
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +311 -497
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
  30. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  31. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +9 -17
  33. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +117 -41
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +1142 -0
  39. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +10 -7
  40. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  41. data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
  42. data/src/core/ext/filters/client_channel/resolver.cc +5 -8
  43. data/src/core/ext/filters/client_channel/resolver.h +12 -14
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +78 -61
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +41 -40
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +22 -24
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +12 -10
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +79 -122
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +199 -163
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
  53. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +46 -45
  54. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +93 -102
  55. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
  56. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -2
  57. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +64 -12
  58. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
  59. data/src/core/ext/filters/client_channel/resolver_registry.cc +19 -17
  60. data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
  61. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +21 -22
  62. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
  63. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +73 -217
  64. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +45 -27
  65. data/src/core/ext/filters/client_channel/server_address.cc +6 -9
  66. data/src/core/ext/filters/client_channel/server_address.h +6 -12
  67. data/src/core/ext/filters/client_channel/service_config.cc +104 -144
  68. data/src/core/ext/filters/client_channel/service_config.h +28 -98
  69. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  70. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  71. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  72. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  73. data/src/core/ext/filters/client_channel/subchannel.cc +55 -25
  74. data/src/core/ext/filters/client_channel/subchannel.h +35 -11
  75. data/src/core/ext/filters/client_channel/xds/xds_api.cc +1200 -246
  76. data/src/core/ext/filters/client_channel/xds/xds_api.h +130 -44
  77. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +90 -29
  78. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +9 -4
  79. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +4 -2
  80. data/src/core/ext/filters/client_channel/xds/xds_client.cc +839 -431
  81. data/src/core/ext/filters/client_channel/xds/xds_client.h +84 -33
  82. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +11 -12
  83. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +40 -28
  84. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -33
  85. data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
  86. data/src/core/ext/filters/http/http_filters_plugin.cc +28 -12
  87. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
  88. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +399 -0
  89. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +31 -0
  90. data/src/core/ext/filters/message_size/message_size_filter.cc +61 -88
  91. data/src/core/ext/filters/message_size/message_size_filter.h +10 -4
  92. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +386 -350
  93. data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -2
  94. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +1 -1
  95. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -13
  96. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +7 -8
  97. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  98. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +42 -26
  99. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  100. data/src/core/ext/transport/chttp2/transport/flow_control.cc +25 -30
  101. data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
  102. data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
  103. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
  104. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  105. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  106. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  107. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
  108. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
  109. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -7
  110. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  111. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  112. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  113. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
  114. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
  115. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
  116. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  117. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
  118. data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
  119. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  120. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  121. data/src/core/ext/transport/chttp2/transport/internal.h +27 -21
  122. data/src/core/ext/transport/chttp2/transport/parsing.cc +33 -43
  123. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  124. data/src/core/ext/transport/chttp2/transport/writing.cc +24 -22
  125. data/src/core/ext/transport/inproc/inproc_transport.cc +54 -15
  126. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
  127. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
  128. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +4 -229
  129. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -876
  130. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  131. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +429 -0
  132. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  133. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +198 -0
  134. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  135. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +388 -0
  136. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
  137. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +1 -2
  138. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +23 -10
  139. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +352 -310
  140. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +1 -0
  141. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +42 -34
  142. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +1 -0
  143. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +7 -7
  144. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
  145. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +79 -61
  146. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +2 -1
  147. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +55 -49
  148. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  149. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +79 -0
  150. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +48 -27
  151. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +258 -214
  152. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +1 -0
  153. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +51 -45
  154. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  155. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +71 -0
  156. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +2 -1
  157. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +107 -100
  158. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +24 -20
  159. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +157 -122
  160. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
  161. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +9 -9
  162. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +38 -18
  163. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +173 -73
  164. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  165. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +88 -0
  166. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +2 -1
  167. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +95 -101
  168. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
  169. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +1 -2
  170. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +2 -1
  171. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +49 -65
  172. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +1 -0
  173. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -1
  174. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +9 -6
  175. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +53 -38
  176. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
  177. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +70 -62
  178. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +1 -0
  179. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +1 -2
  180. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +15 -10
  181. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +95 -63
  182. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +1 -0
  183. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -1
  184. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +3 -2
  185. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +91 -80
  186. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +1 -0
  187. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +9 -10
  188. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +1 -0
  189. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +1 -2
  190. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
  191. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +36 -31
  192. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +1 -0
  193. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -1
  194. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +68 -46
  195. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +770 -722
  196. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
  197. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +16 -15
  198. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
  199. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +1 -2
  200. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +2 -1
  201. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +95 -88
  202. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +48 -28
  203. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +305 -210
  204. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
  205. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +5 -5
  206. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  207. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  208. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
  209. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +1 -2
  210. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
  211. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +22 -16
  212. data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
  213. data/src/core/ext/upb-generated/envoy/type/http.upb.h +0 -1
  214. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +16 -0
  215. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +48 -11
  216. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
  217. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +14 -14
  218. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
  219. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +23 -23
  220. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
  221. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +8 -9
  222. data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
  223. data/src/core/ext/upb-generated/envoy/type/range.upb.h +15 -16
  224. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
  225. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +7 -8
  226. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
  227. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +36 -35
  228. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
  229. data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
  230. data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
  231. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
  232. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +12 -11
  233. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +421 -389
  234. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
  235. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
  236. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
  237. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +33 -54
  238. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
  239. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
  240. data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
  241. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
  242. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
  243. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
  244. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
  245. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
  246. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
  247. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
  248. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
  249. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
  250. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  251. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +64 -0
  252. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
  253. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
  254. data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
  255. data/src/core/ext/upb-generated/validate/validate.upb.h +569 -562
  256. data/src/core/lib/channel/channel_args.cc +15 -14
  257. data/src/core/lib/channel/channel_args.h +3 -1
  258. data/src/core/lib/channel/channel_stack.h +20 -13
  259. data/src/core/lib/channel/channel_trace.cc +2 -6
  260. data/src/core/lib/channel/channelz.cc +10 -21
  261. data/src/core/lib/channel/channelz.h +3 -2
  262. data/src/core/lib/channel/channelz_registry.cc +5 -3
  263. data/src/core/lib/channel/connected_channel.cc +7 -5
  264. data/src/core/lib/channel/context.h +1 -1
  265. data/src/core/lib/channel/handshaker.cc +11 -13
  266. data/src/core/lib/channel/handshaker.h +4 -2
  267. data/src/core/lib/channel/handshaker_registry.cc +5 -17
  268. data/src/core/lib/channel/status_util.cc +2 -3
  269. data/src/core/lib/compression/message_compress.cc +5 -1
  270. data/src/core/lib/debug/stats.cc +21 -27
  271. data/src/core/lib/debug/stats.h +3 -1
  272. data/src/core/lib/gpr/log_linux.cc +6 -8
  273. data/src/core/lib/gpr/log_posix.cc +6 -8
  274. data/src/core/lib/gpr/spinlock.h +2 -3
  275. data/src/core/lib/gpr/string.cc +10 -33
  276. data/src/core/lib/gpr/string.h +4 -18
  277. data/src/core/lib/gpr/sync_abseil.cc +2 -0
  278. data/src/core/lib/gpr/time.cc +4 -0
  279. data/src/core/lib/gpr/time_posix.cc +1 -1
  280. data/src/core/lib/gprpp/atomic.h +6 -6
  281. data/src/core/lib/gprpp/fork.cc +1 -1
  282. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  283. data/src/core/lib/gprpp/host_port.cc +29 -35
  284. data/src/core/lib/gprpp/host_port.h +14 -17
  285. data/src/core/lib/gprpp/map.h +5 -11
  286. data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
  287. data/src/core/lib/gprpp/sync.h +9 -0
  288. data/src/core/lib/http/format_request.cc +46 -65
  289. data/src/core/lib/http/httpcli.cc +15 -13
  290. data/src/core/lib/http/httpcli.h +2 -3
  291. data/src/core/lib/http/httpcli_security_connector.cc +10 -10
  292. data/src/core/lib/http/parser.h +2 -3
  293. data/src/core/lib/iomgr/buffer_list.h +22 -21
  294. data/src/core/lib/iomgr/call_combiner.h +3 -2
  295. data/src/core/lib/iomgr/cfstream_handle.cc +4 -2
  296. data/src/core/lib/iomgr/closure.h +2 -3
  297. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  298. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
  299. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  300. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  301. data/src/core/lib/iomgr/error.cc +6 -9
  302. data/src/core/lib/iomgr/error.h +0 -1
  303. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  304. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  305. data/src/core/lib/iomgr/ev_apple.h +43 -0
  306. data/src/core/lib/iomgr/ev_epoll1_linux.cc +25 -29
  307. data/src/core/lib/iomgr/ev_epollex_linux.cc +17 -24
  308. data/src/core/lib/iomgr/ev_poll_posix.cc +9 -8
  309. data/src/core/lib/iomgr/ev_posix.cc +4 -3
  310. data/src/core/lib/iomgr/exec_ctx.h +14 -2
  311. data/src/core/lib/iomgr/iomgr.cc +10 -0
  312. data/src/core/lib/iomgr/iomgr.h +10 -0
  313. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
  314. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  315. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  316. data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
  317. data/src/core/lib/iomgr/port.h +2 -21
  318. data/src/core/lib/iomgr/python_util.h +46 -0
  319. data/src/core/lib/iomgr/resolve_address.h +4 -6
  320. data/src/core/lib/iomgr/resolve_address_custom.cc +42 -57
  321. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  322. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
  323. data/src/core/lib/iomgr/resolve_address_windows.cc +16 -25
  324. data/src/core/lib/iomgr/resource_quota.cc +38 -37
  325. data/src/core/lib/iomgr/sockaddr_utils.cc +29 -33
  326. data/src/core/lib/iomgr/sockaddr_utils.h +10 -15
  327. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  328. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  329. data/src/core/lib/iomgr/socket_utils_common_posix.cc +102 -81
  330. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  331. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  332. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -18
  333. data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
  334. data/src/core/lib/iomgr/tcp_client_posix.cc +30 -36
  335. data/src/core/lib/iomgr/tcp_client_windows.cc +10 -11
  336. data/src/core/lib/iomgr/tcp_custom.cc +3 -4
  337. data/src/core/lib/iomgr/tcp_custom.h +1 -1
  338. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  339. data/src/core/lib/iomgr/tcp_server.h +7 -5
  340. data/src/core/lib/iomgr/tcp_server_custom.cc +11 -23
  341. data/src/core/lib/iomgr/tcp_server_posix.cc +38 -44
  342. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
  343. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -8
  344. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +10 -18
  345. data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
  346. data/src/core/lib/iomgr/tcp_uv.cc +3 -2
  347. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  348. data/src/core/lib/iomgr/timer_generic.cc +15 -15
  349. data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
  350. data/src/core/lib/iomgr/timer_heap.h +2 -3
  351. data/src/core/lib/iomgr/udp_server.cc +32 -36
  352. data/src/core/lib/iomgr/udp_server.h +5 -2
  353. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  354. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  355. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  356. data/src/core/lib/json/json.h +3 -2
  357. data/src/core/lib/json/json_reader.cc +25 -26
  358. data/src/core/lib/json/json_writer.cc +13 -12
  359. data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
  360. data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
  361. data/src/core/lib/security/credentials/credentials.cc +0 -84
  362. data/src/core/lib/security/credentials/credentials.h +13 -62
  363. data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
  364. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  365. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +15 -17
  366. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
  367. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  368. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  369. data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
  370. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
  371. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  372. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -15
  373. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
  374. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +73 -54
  375. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
  376. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +19 -6
  377. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
  378. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
  379. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
  380. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
  381. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +48 -11
  382. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
  383. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -17
  384. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
  385. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  386. data/src/core/lib/security/security_connector/security_connector.cc +2 -0
  387. data/src/core/lib/security/security_connector/security_connector.h +2 -2
  388. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +38 -36
  389. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +8 -5
  390. data/src/core/lib/security/security_connector/ssl_utils.cc +89 -21
  391. data/src/core/lib/security/security_connector/ssl_utils.h +18 -12
  392. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +101 -72
  393. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
  394. data/src/core/lib/security/transport/auth_filters.h +0 -5
  395. data/src/core/lib/security/transport/client_auth_filter.cc +11 -11
  396. data/src/core/lib/security/util/json_util.cc +12 -13
  397. data/src/core/lib/slice/slice.cc +38 -1
  398. data/src/core/lib/slice/slice_intern.cc +2 -3
  399. data/src/core/lib/slice/slice_internal.h +15 -0
  400. data/src/core/lib/slice/slice_utils.h +9 -0
  401. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  402. data/src/core/lib/surface/call.cc +42 -44
  403. data/src/core/lib/surface/call_log_batch.cc +50 -58
  404. data/src/core/lib/surface/channel.cc +53 -31
  405. data/src/core/lib/surface/channel.h +35 -4
  406. data/src/core/lib/surface/channel_ping.cc +2 -3
  407. data/src/core/lib/surface/completion_queue.cc +304 -47
  408. data/src/core/lib/surface/completion_queue.h +8 -0
  409. data/src/core/lib/surface/event_string.cc +18 -25
  410. data/src/core/lib/surface/event_string.h +3 -1
  411. data/src/core/lib/surface/init.cc +2 -0
  412. data/src/core/lib/surface/init_secure.cc +1 -4
  413. data/src/core/lib/surface/server.cc +971 -837
  414. data/src/core/lib/surface/server.h +66 -12
  415. data/src/core/lib/surface/version.cc +2 -2
  416. data/src/core/lib/transport/byte_stream.h +7 -2
  417. data/src/core/lib/transport/connectivity_state.cc +7 -6
  418. data/src/core/lib/transport/connectivity_state.h +5 -3
  419. data/src/core/lib/transport/metadata.cc +3 -3
  420. data/src/core/lib/transport/metadata_batch.h +2 -3
  421. data/src/core/lib/transport/static_metadata.h +1 -1
  422. data/src/core/lib/transport/status_conversion.cc +6 -14
  423. data/src/core/lib/transport/transport.cc +2 -3
  424. data/src/core/lib/transport/transport.h +9 -2
  425. data/src/core/lib/transport/transport_op_string.cc +61 -102
  426. data/src/core/lib/uri/uri_parser.cc +8 -15
  427. data/src/core/lib/uri/uri_parser.h +2 -3
  428. data/src/core/plugin_registry/grpc_plugin_registry.cc +24 -4
  429. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  430. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +31 -14
  431. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  432. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +34 -2
  433. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  434. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
  435. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  436. data/src/core/tsi/fake_transport_security.cc +10 -15
  437. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  438. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
  439. data/src/core/tsi/ssl_transport_security.cc +154 -50
  440. data/src/core/tsi/ssl_transport_security.h +22 -10
  441. data/src/core/tsi/ssl_types.h +0 -2
  442. data/src/core/tsi/transport_security.h +6 -9
  443. data/src/core/tsi/transport_security_grpc.h +2 -3
  444. data/src/core/tsi/transport_security_interface.h +8 -3
  445. data/src/ruby/ext/grpc/extconf.rb +5 -2
  446. data/src/ruby/ext/grpc/rb_call.c +12 -3
  447. data/src/ruby/ext/grpc/rb_call.h +4 -0
  448. data/src/ruby/ext/grpc/rb_call_credentials.c +57 -12
  449. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  450. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  451. data/src/ruby/lib/grpc/errors.rb +103 -42
  452. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  453. data/src/ruby/lib/grpc/generic/interceptors.rb +5 -5
  454. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  455. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  456. data/src/ruby/lib/grpc/structs.rb +1 -1
  457. data/src/ruby/lib/grpc/version.rb +1 -1
  458. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  459. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
  460. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
  461. data/src/ruby/spec/debug_message_spec.rb +134 -0
  462. data/src/ruby/spec/generic/service_spec.rb +2 -0
  463. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  464. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +7 -0
  465. data/src/ruby/spec/pb/codegen/package_option_spec.rb +7 -1
  466. data/src/ruby/spec/support/services.rb +10 -4
  467. data/src/ruby/spec/testdata/ca.pem +18 -13
  468. data/src/ruby/spec/testdata/client.key +26 -14
  469. data/src/ruby/spec/testdata/client.pem +18 -12
  470. data/src/ruby/spec/testdata/server1.key +26 -14
  471. data/src/ruby/spec/testdata/server1.pem +20 -14
  472. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  473. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  474. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  475. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  476. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  477. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  478. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  479. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  480. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  481. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  482. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  483. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  484. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  485. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  486. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  487. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  488. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  489. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  490. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  491. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  492. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  493. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  494. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  495. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  496. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  497. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  498. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  499. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  500. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  501. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  502. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  503. data/third_party/boringssl-with-bazel/err_data.c +335 -297
  504. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  505. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
  506. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
  507. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
  508. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  509. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
  510. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
  511. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  512. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  513. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  514. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  515. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
  516. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
  517. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
  518. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
  519. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
  520. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
  521. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
  522. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
  523. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
  524. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
  525. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -0
  526. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +385 -0
  527. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +56 -0
  528. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
  529. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
  530. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +143 -0
  531. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
  532. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  533. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
  534. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
  535. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +25 -12
  536. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
  537. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
  538. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
  539. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
  540. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
  541. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  542. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
  543. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +434 -161
  544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
  545. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +18 -25
  546. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
  547. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +104 -122
  548. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +740 -0
  549. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  550. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
  551. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
  552. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
  553. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  554. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
  555. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  556. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
  557. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  558. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  559. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  560. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +41 -5
  561. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
  562. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
  563. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
  564. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
  565. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
  566. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
  567. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
  568. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
  569. data/third_party/boringssl-with-bazel/src/crypto/mem.c +47 -16
  570. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
  571. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  572. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
  573. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
  574. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
  575. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
  576. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
  577. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +249 -0
  578. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1227 -0
  579. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +682 -0
  580. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
  581. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
  582. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  583. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  584. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
  585. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
  586. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +57 -0
  587. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
  588. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +33 -9
  589. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
  590. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
  591. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
  592. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
  593. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
  594. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
  595. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
  596. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  597. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
  598. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +6 -2
  599. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
  600. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
  601. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  602. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
  603. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
  604. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
  605. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
  606. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
  607. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
  608. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
  609. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
  610. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +191 -79
  611. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  612. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +282 -0
  613. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +791 -715
  614. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
  615. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
  616. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
  617. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
  618. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
  619. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +23 -5
  620. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +30 -22
  621. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +21 -4
  622. data/third_party/boringssl-with-bazel/src/ssl/internal.h +74 -54
  623. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
  624. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  625. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
  626. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
  627. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
  628. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +34 -1
  629. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
  630. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +44 -5
  631. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
  632. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
  633. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +51 -26
  634. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
  635. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
  636. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +129 -48
  637. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
  638. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +55 -22
  639. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
  640. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
  641. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
  642. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
  643. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
  644. data/third_party/upb/upb/decode.c +467 -504
  645. data/third_party/upb/upb/encode.c +163 -121
  646. data/third_party/upb/upb/msg.c +130 -64
  647. data/third_party/upb/upb/msg.h +418 -14
  648. data/third_party/upb/upb/port_def.inc +35 -6
  649. data/third_party/upb/upb/port_undef.inc +8 -1
  650. data/third_party/upb/upb/table.c +53 -75
  651. data/third_party/upb/upb/table.int.h +11 -43
  652. data/third_party/upb/upb/upb.c +148 -124
  653. data/third_party/upb/upb/upb.h +65 -147
  654. data/third_party/upb/upb/upb.hpp +86 -0
  655. metadata +122 -41
  656. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1908
  657. data/src/core/lib/gprpp/string_view.h +0 -60
  658. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
  659. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
  660. data/third_party/upb/upb/generated_util.h +0 -105
@@ -26,6 +26,9 @@
26
26
  #include <stdio.h>
27
27
  #include <string.h>
28
28
 
29
+ #include "absl/strings/str_cat.h"
30
+ #include "absl/strings/str_join.h"
31
+
29
32
  #include <grpc/support/alloc.h>
30
33
  #include <grpc/support/log.h>
31
34
  #include <grpc/support/string_util.h>
@@ -33,6 +36,7 @@
33
36
 
34
37
  #include "src/core/ext/filters/client_channel/backup_poller.h"
35
38
  #include "src/core/ext/filters/client_channel/http_connect_handshaker.h"
39
+ #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
36
40
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
37
41
  #include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
38
42
  #include "src/core/ext/filters/client_channel/resolver_registry.h"
@@ -46,10 +50,8 @@
46
50
  #include "src/core/lib/channel/connected_channel.h"
47
51
  #include "src/core/lib/channel/status_util.h"
48
52
  #include "src/core/lib/gpr/string.h"
49
- #include "src/core/lib/gprpp/inlined_vector.h"
50
53
  #include "src/core/lib/gprpp/manual_constructor.h"
51
54
  #include "src/core/lib/gprpp/sync.h"
52
- #include "src/core/lib/iomgr/combiner.h"
53
55
  #include "src/core/lib/iomgr/iomgr.h"
54
56
  #include "src/core/lib/iomgr/polling_entity.h"
55
57
  #include "src/core/lib/profiling/timers.h"
@@ -109,67 +111,32 @@ class ResolvingLoadBalancingPolicy::ResolvingControlHelper
109
111
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
110
112
  const grpc_channel_args& args) override {
111
113
  if (parent_->resolver_ == nullptr) return nullptr; // Shutting down.
112
- if (!CalledByCurrentChild() && !CalledByPendingChild()) return nullptr;
113
114
  return parent_->channel_control_helper()->CreateSubchannel(args);
114
115
  }
115
116
 
116
117
  void UpdateState(grpc_connectivity_state state,
117
118
  std::unique_ptr<SubchannelPicker> picker) override {
118
119
  if (parent_->resolver_ == nullptr) return; // Shutting down.
119
- // If this request is from the pending child policy, ignore it until
120
- // it reports READY, at which point we swap it into place.
121
- if (CalledByPendingChild()) {
122
- if (GRPC_TRACE_FLAG_ENABLED(*(parent_->tracer_))) {
123
- gpr_log(GPR_INFO,
124
- "resolving_lb=%p helper=%p: pending child policy %p reports "
125
- "state=%s",
126
- parent_.get(), this, child_, ConnectivityStateName(state));
127
- }
128
- if (state != GRPC_CHANNEL_READY) return;
129
- grpc_pollset_set_del_pollset_set(
130
- parent_->lb_policy_->interested_parties(),
131
- parent_->interested_parties());
132
- parent_->lb_policy_ = std::move(parent_->pending_lb_policy_);
133
- } else if (!CalledByCurrentChild()) {
134
- // This request is from an outdated child, so ignore it.
135
- return;
136
- }
137
120
  parent_->channel_control_helper()->UpdateState(state, std::move(picker));
138
121
  }
139
122
 
140
123
  void RequestReresolution() override {
141
- // If there is a pending child policy, ignore re-resolution requests
142
- // from the current child policy (or any outdated child).
143
- if (parent_->pending_lb_policy_ != nullptr && !CalledByPendingChild()) {
144
- return;
145
- }
124
+ if (parent_->resolver_ == nullptr) return; // Shutting down.
146
125
  if (GRPC_TRACE_FLAG_ENABLED(*(parent_->tracer_))) {
147
126
  gpr_log(GPR_INFO, "resolving_lb=%p: started name re-resolving",
148
127
  parent_.get());
149
128
  }
150
- if (parent_->resolver_ != nullptr) {
151
- parent_->resolver_->RequestReresolutionLocked();
152
- }
129
+ parent_->resolver_->RequestReresolutionLocked();
153
130
  }
154
131
 
155
- void AddTraceEvent(TraceSeverity /*severity*/,
156
- StringView /*message*/) override {}
157
-
158
- void set_child(LoadBalancingPolicy* child) { child_ = child; }
159
-
160
- private:
161
- bool CalledByPendingChild() const {
162
- GPR_ASSERT(child_ != nullptr);
163
- return child_ == parent_->pending_lb_policy_.get();
132
+ void AddTraceEvent(TraceSeverity severity,
133
+ absl::string_view message) override {
134
+ if (parent_->resolver_ == nullptr) return; // Shutting down.
135
+ parent_->channel_control_helper()->AddTraceEvent(severity, message);
164
136
  }
165
137
 
166
- bool CalledByCurrentChild() const {
167
- GPR_ASSERT(child_ != nullptr);
168
- return child_ == parent_->lb_policy_.get();
169
- };
170
-
138
+ private:
171
139
  RefCountedPtr<ResolvingLoadBalancingPolicy> parent_;
172
- LoadBalancingPolicy* child_ = nullptr;
173
140
  };
174
141
 
175
142
  //
@@ -178,16 +145,14 @@ class ResolvingLoadBalancingPolicy::ResolvingControlHelper
178
145
 
179
146
  ResolvingLoadBalancingPolicy::ResolvingLoadBalancingPolicy(
180
147
  Args args, TraceFlag* tracer, grpc_core::UniquePtr<char> target_uri,
181
- ProcessResolverResultCallback process_resolver_result,
182
- void* process_resolver_result_user_data)
148
+ ChannelConfigHelper* helper)
183
149
  : LoadBalancingPolicy(std::move(args)),
184
150
  tracer_(tracer),
185
151
  target_uri_(std::move(target_uri)),
186
- process_resolver_result_(process_resolver_result),
187
- process_resolver_result_user_data_(process_resolver_result_user_data) {
188
- GPR_ASSERT(process_resolver_result != nullptr);
152
+ helper_(helper) {
153
+ GPR_ASSERT(helper_ != nullptr);
189
154
  resolver_ = ResolverRegistry::CreateResolver(
190
- target_uri_.get(), args.args, interested_parties(), combiner(),
155
+ target_uri_.get(), args.args, interested_parties(), work_serializer(),
191
156
  absl::make_unique<ResolverResultHandler>(Ref()));
192
157
  // Since the validity of args has been checked when create the channel,
193
158
  // CreateResolver() must return a non-null result.
@@ -217,23 +182,11 @@ void ResolvingLoadBalancingPolicy::ShutdownLocked() {
217
182
  interested_parties());
218
183
  lb_policy_.reset();
219
184
  }
220
- if (pending_lb_policy_ != nullptr) {
221
- if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
222
- gpr_log(GPR_INFO, "resolving_lb=%p: shutting down pending lb_policy=%p",
223
- this, pending_lb_policy_.get());
224
- }
225
- grpc_pollset_set_del_pollset_set(pending_lb_policy_->interested_parties(),
226
- interested_parties());
227
- pending_lb_policy_.reset();
228
- }
229
185
  }
230
186
  }
231
187
 
232
188
  void ResolvingLoadBalancingPolicy::ExitIdleLocked() {
233
- if (lb_policy_ != nullptr) {
234
- lb_policy_->ExitIdleLocked();
235
- if (pending_lb_policy_ != nullptr) pending_lb_policy_->ExitIdleLocked();
236
- }
189
+ if (lb_policy_ != nullptr) lb_policy_->ExitIdleLocked();
237
190
  }
238
191
 
239
192
  void ResolvingLoadBalancingPolicy::ResetBackoffLocked() {
@@ -242,7 +195,6 @@ void ResolvingLoadBalancingPolicy::ResetBackoffLocked() {
242
195
  resolver_->RequestReresolutionLocked();
243
196
  }
244
197
  if (lb_policy_ != nullptr) lb_policy_->ResetBackoffLocked();
245
- if (pending_lb_policy_ != nullptr) pending_lb_policy_->ResetBackoffLocked();
246
198
  }
247
199
 
248
200
  void ResolvingLoadBalancingPolicy::OnResolverError(grpc_error* error) {
@@ -260,6 +212,7 @@ void ResolvingLoadBalancingPolicy::OnResolverError(grpc_error* error) {
260
212
  if (lb_policy_ == nullptr) {
261
213
  grpc_error* state_error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
262
214
  "Resolver transient failure", &error, 1);
215
+ helper_->ResolverTransientFailure(GRPC_ERROR_REF(state_error));
263
216
  channel_control_helper()->UpdateState(
264
217
  GRPC_CHANNEL_TRANSIENT_FAILURE,
265
218
  absl::make_unique<TransientFailurePicker>(state_error));
@@ -269,132 +222,41 @@ void ResolvingLoadBalancingPolicy::OnResolverError(grpc_error* error) {
269
222
 
270
223
  void ResolvingLoadBalancingPolicy::CreateOrUpdateLbPolicyLocked(
271
224
  RefCountedPtr<LoadBalancingPolicy::Config> lb_policy_config,
272
- Resolver::Result result, TraceStringVector* trace_strings) {
273
- // If the child policy name changes, we need to create a new child
274
- // policy. When this happens, we leave child_policy_ as-is and store
275
- // the new child policy in pending_child_policy_. Once the new child
276
- // policy transitions into state READY, we swap it into child_policy_,
277
- // replacing the original child policy. So pending_child_policy_ is
278
- // non-null only between when we apply an update that changes the child
279
- // policy name and when the new child reports state READY.
280
- //
281
- // Updates can arrive at any point during this transition. We always
282
- // apply updates relative to the most recently created child policy,
283
- // even if the most recent one is still in pending_child_policy_. This
284
- // is true both when applying the updates to an existing child policy
285
- // and when determining whether we need to create a new policy.
286
- //
287
- // As a result of this, there are several cases to consider here:
288
- //
289
- // 1. We have no existing child policy (i.e., we have started up but
290
- // have not yet received a serverlist from the balancer or gone
291
- // into fallback mode; in this case, both child_policy_ and
292
- // pending_child_policy_ are null). In this case, we create a
293
- // new child policy and store it in child_policy_.
294
- //
295
- // 2. We have an existing child policy and have no pending child policy
296
- // from a previous update (i.e., either there has not been a
297
- // previous update that changed the policy name, or we have already
298
- // finished swapping in the new policy; in this case, child_policy_
299
- // is non-null but pending_child_policy_ is null). In this case:
300
- // a. If child_policy_->name() equals child_policy_name, then we
301
- // update the existing child policy.
302
- // b. If child_policy_->name() does not equal child_policy_name,
303
- // we create a new policy. The policy will be stored in
304
- // pending_child_policy_ and will later be swapped into
305
- // child_policy_ by the helper when the new child transitions
306
- // into state READY.
307
- //
308
- // 3. We have an existing child policy and have a pending child policy
309
- // from a previous update (i.e., a previous update set
310
- // pending_child_policy_ as per case 2b above and that policy has
311
- // not yet transitioned into state READY and been swapped into
312
- // child_policy_; in this case, both child_policy_ and
313
- // pending_child_policy_ are non-null). In this case:
314
- // a. If pending_child_policy_->name() equals child_policy_name,
315
- // then we update the existing pending child policy.
316
- // b. If pending_child_policy->name() does not equal
317
- // child_policy_name, then we create a new policy. The new
318
- // policy is stored in pending_child_policy_ (replacing the one
319
- // that was there before, which will be immediately shut down)
320
- // and will later be swapped into child_policy_ by the helper
321
- // when the new child transitions into state READY.
322
- const char* lb_policy_name = lb_policy_config->name();
323
- const bool create_policy =
324
- // case 1
325
- lb_policy_ == nullptr ||
326
- // case 2b
327
- (pending_lb_policy_ == nullptr &&
328
- strcmp(lb_policy_->name(), lb_policy_name) != 0) ||
329
- // case 3b
330
- (pending_lb_policy_ != nullptr &&
331
- strcmp(pending_lb_policy_->name(), lb_policy_name) != 0);
332
- LoadBalancingPolicy* policy_to_update = nullptr;
333
- if (create_policy) {
334
- // Cases 1, 2b, and 3b: create a new child policy.
335
- // If lb_policy_ is null, we set it (case 1), else we set
336
- // pending_lb_policy_ (cases 2b and 3b).
337
- if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
338
- gpr_log(GPR_INFO, "resolving_lb=%p: Creating new %schild policy %s", this,
339
- lb_policy_ == nullptr ? "" : "pending ", lb_policy_name);
340
- }
341
- auto& lb_policy = lb_policy_ == nullptr ? lb_policy_ : pending_lb_policy_;
342
- lb_policy =
343
- CreateLbPolicyLocked(lb_policy_name, *result.args, trace_strings);
344
- policy_to_update = lb_policy.get();
345
- } else {
346
- // Cases 2a and 3a: update an existing policy.
347
- // If we have a pending child policy, send the update to the pending
348
- // policy (case 3a), else send it to the current policy (case 2a).
349
- policy_to_update = pending_lb_policy_ != nullptr ? pending_lb_policy_.get()
350
- : lb_policy_.get();
351
- }
352
- GPR_ASSERT(policy_to_update != nullptr);
353
- // Update the policy.
354
- if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
355
- gpr_log(GPR_INFO, "resolving_lb=%p: Updating %schild policy %p", this,
356
- policy_to_update == pending_lb_policy_.get() ? "pending " : "",
357
- policy_to_update);
358
- }
225
+ Resolver::Result result) {
226
+ // Construct update.
359
227
  UpdateArgs update_args;
360
228
  update_args.addresses = std::move(result.addresses);
361
229
  update_args.config = std::move(lb_policy_config);
362
230
  // TODO(roth): Once channel args is converted to C++, use std::move() here.
363
231
  update_args.args = result.args;
364
232
  result.args = nullptr;
365
- policy_to_update->UpdateLocked(std::move(update_args));
233
+ // Create policy if needed.
234
+ if (lb_policy_ == nullptr) {
235
+ lb_policy_ = CreateLbPolicyLocked(*update_args.args);
236
+ }
237
+ // Update the policy.
238
+ if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
239
+ gpr_log(GPR_INFO, "resolving_lb=%p: Updating child policy %p", this,
240
+ lb_policy_.get());
241
+ }
242
+ lb_policy_->UpdateLocked(std::move(update_args));
366
243
  }
367
244
 
368
245
  // Creates a new LB policy.
369
- // Updates trace_strings to indicate what was done.
370
246
  OrphanablePtr<LoadBalancingPolicy>
371
247
  ResolvingLoadBalancingPolicy::CreateLbPolicyLocked(
372
- const char* lb_policy_name, const grpc_channel_args& args,
373
- TraceStringVector* trace_strings) {
374
- ResolvingControlHelper* helper = new ResolvingControlHelper(Ref());
248
+ const grpc_channel_args& args) {
375
249
  LoadBalancingPolicy::Args lb_policy_args;
376
- lb_policy_args.combiner = combiner();
250
+ lb_policy_args.work_serializer = work_serializer();
377
251
  lb_policy_args.channel_control_helper =
378
- std::unique_ptr<ChannelControlHelper>(helper);
252
+ absl::make_unique<ResolvingControlHelper>(Ref());
379
253
  lb_policy_args.args = &args;
380
254
  OrphanablePtr<LoadBalancingPolicy> lb_policy =
381
- LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(
382
- lb_policy_name, std::move(lb_policy_args));
383
- if (GPR_UNLIKELY(lb_policy == nullptr)) {
384
- gpr_log(GPR_ERROR, "could not create LB policy \"%s\"", lb_policy_name);
385
- char* str;
386
- gpr_asprintf(&str, "Could not create LB policy \"%s\"", lb_policy_name);
387
- trace_strings->push_back(str);
388
- return nullptr;
389
- }
390
- helper->set_child(lb_policy.get());
255
+ MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args), tracer_);
391
256
  if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
392
- gpr_log(GPR_INFO, "resolving_lb=%p: created new LB policy \"%s\" (%p)",
393
- this, lb_policy_name, lb_policy.get());
257
+ gpr_log(GPR_INFO, "resolving_lb=%p: created new LB policy %p", this,
258
+ lb_policy.get());
394
259
  }
395
- char* str;
396
- gpr_asprintf(&str, "Created new LB policy \"%s\"", lb_policy_name);
397
- trace_strings->push_back(str);
398
260
  grpc_pollset_set_add_pollset_set(lb_policy->interested_parties(),
399
261
  interested_parties());
400
262
  return lb_policy;
@@ -404,31 +266,21 @@ void ResolvingLoadBalancingPolicy::MaybeAddTraceMessagesForAddressChangesLocked(
404
266
  bool resolution_contains_addresses, TraceStringVector* trace_strings) {
405
267
  if (!resolution_contains_addresses &&
406
268
  previous_resolution_contained_addresses_) {
407
- trace_strings->push_back(gpr_strdup("Address list became empty"));
269
+ trace_strings->push_back("Address list became empty");
408
270
  } else if (resolution_contains_addresses &&
409
271
  !previous_resolution_contained_addresses_) {
410
- trace_strings->push_back(gpr_strdup("Address list became non-empty"));
272
+ trace_strings->push_back("Address list became non-empty");
411
273
  }
412
274
  previous_resolution_contained_addresses_ = resolution_contains_addresses;
413
275
  }
414
276
 
415
277
  void ResolvingLoadBalancingPolicy::ConcatenateAndAddChannelTraceLocked(
416
- TraceStringVector* trace_strings) const {
417
- if (!trace_strings->empty()) {
418
- gpr_strvec v;
419
- gpr_strvec_init(&v);
420
- gpr_strvec_add(&v, gpr_strdup("Resolution event: "));
421
- bool is_first = 1;
422
- for (size_t i = 0; i < trace_strings->size(); ++i) {
423
- if (!is_first) gpr_strvec_add(&v, gpr_strdup(", "));
424
- is_first = false;
425
- gpr_strvec_add(&v, (*trace_strings)[i]);
426
- }
427
- size_t len = 0;
428
- grpc_core::UniquePtr<char> message(gpr_strvec_flatten(&v, &len));
278
+ const TraceStringVector& trace_strings) const {
279
+ if (!trace_strings.empty()) {
280
+ std::string message =
281
+ absl::StrCat("Resolution event: ", absl::StrJoin(trace_strings, ", "));
429
282
  channel_control_helper()->AddTraceEvent(ChannelControlHelper::TRACE_INFO,
430
- StringView(message.get()));
431
- gpr_strvec_destroy(&v);
283
+ message);
432
284
  }
433
285
  }
434
286
 
@@ -451,47 +303,51 @@ void ResolvingLoadBalancingPolicy::OnResolverResultChangedLocked(
451
303
  TraceStringVector trace_strings;
452
304
  const bool resolution_contains_addresses = result.addresses.size() > 0;
453
305
  // Process the resolver result.
454
- RefCountedPtr<LoadBalancingPolicy::Config> lb_policy_config;
455
- bool service_config_changed = false;
456
- char* service_config_error_string = nullptr;
457
- if (process_resolver_result_ != nullptr) {
458
- grpc_error* service_config_error = GRPC_ERROR_NONE;
459
- bool no_valid_service_config = false;
460
- service_config_changed = process_resolver_result_(
461
- process_resolver_result_user_data_, result, &lb_policy_config,
462
- &service_config_error, &no_valid_service_config);
463
- if (service_config_error != GRPC_ERROR_NONE) {
464
- service_config_error_string =
465
- gpr_strdup(grpc_error_string(service_config_error));
466
- if (no_valid_service_config) {
306
+ ChannelConfigHelper::ApplyServiceConfigResult service_config_result;
307
+ if (helper_ != nullptr) {
308
+ service_config_result = helper_->ApplyServiceConfig(result);
309
+ if (service_config_result.service_config_error != GRPC_ERROR_NONE) {
310
+ if (service_config_result.no_valid_service_config) {
467
311
  // We received an invalid service config and we don't have a
468
312
  // fallback service config.
469
- OnResolverError(service_config_error);
470
- } else {
471
- GRPC_ERROR_UNREF(service_config_error);
313
+ OnResolverError(service_config_result.service_config_error);
314
+ service_config_result.service_config_error = GRPC_ERROR_NONE;
472
315
  }
473
316
  }
474
317
  } else {
475
- lb_policy_config = child_lb_config_;
318
+ service_config_result.lb_policy_config = child_lb_config_;
319
+ }
320
+ // Before we send the args to the LB policy, grab the ConfigSelector for
321
+ // later use.
322
+ RefCountedPtr<ConfigSelector> config_selector =
323
+ ConfigSelector::GetFromChannelArgs(*result.args);
324
+ // Create or update LB policy, as needed.
325
+ if (service_config_result.lb_policy_config != nullptr) {
326
+ CreateOrUpdateLbPolicyLocked(
327
+ std::move(service_config_result.lb_policy_config), std::move(result));
476
328
  }
477
- if (lb_policy_config != nullptr) {
478
- // Create or update LB policy, as needed.
479
- CreateOrUpdateLbPolicyLocked(std::move(lb_policy_config), std::move(result),
480
- &trace_strings);
329
+ // Apply ConfigSelector to channel.
330
+ // This needs to happen after the LB policy has been updated, since
331
+ // the ConfigSelector may need the LB policy to know about new
332
+ // destinations before it can send RPCs to those destinations.
333
+ if (helper_ != nullptr) {
334
+ helper_->ApplyConfigSelector(service_config_result.service_config_changed,
335
+ std::move(config_selector));
481
336
  }
482
337
  // Add channel trace event.
483
- if (service_config_changed) {
338
+ if (service_config_result.service_config_changed) {
484
339
  // TODO(ncteisen): might be worth somehow including a snippet of the
485
340
  // config in the trace, at the risk of bloating the trace logs.
486
- trace_strings.push_back(gpr_strdup("Service config changed"));
341
+ trace_strings.push_back("Service config changed");
487
342
  }
488
- if (service_config_error_string != nullptr) {
489
- trace_strings.push_back(service_config_error_string);
490
- service_config_error_string = nullptr;
343
+ if (service_config_result.service_config_error != GRPC_ERROR_NONE) {
344
+ trace_strings.push_back(
345
+ grpc_error_string(service_config_result.service_config_error));
491
346
  }
492
347
  MaybeAddTraceMessagesForAddressChangesLocked(resolution_contains_addresses,
493
348
  &trace_strings);
494
- ConcatenateAndAddChannelTraceLocked(&trace_strings);
349
+ ConcatenateAndAddChannelTraceLocked(trace_strings);
350
+ GRPC_ERROR_UNREF(service_config_result.service_config_error);
495
351
  }
496
352
 
497
353
  } // namespace grpc_core
@@ -21,13 +21,15 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include "absl/container/inlined_vector.h"
25
+
26
+ #include "src/core/ext/filters/client_channel/config_selector.h"
24
27
  #include "src/core/ext/filters/client_channel/lb_policy.h"
25
28
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
26
29
  #include "src/core/ext/filters/client_channel/resolver.h"
27
30
  #include "src/core/lib/channel/channel_args.h"
28
31
  #include "src/core/lib/channel/channel_stack.h"
29
32
  #include "src/core/lib/debug/trace.h"
30
- #include "src/core/lib/gprpp/inlined_vector.h"
31
33
  #include "src/core/lib/gprpp/orphanable.h"
32
34
  #include "src/core/lib/iomgr/call_combiner.h"
33
35
  #include "src/core/lib/iomgr/closure.h"
@@ -51,22 +53,39 @@ namespace grpc_core {
51
53
  // child LB policy and config to use.
52
54
  class ResolvingLoadBalancingPolicy : public LoadBalancingPolicy {
53
55
  public:
54
- // Synchronous callback that takes the resolver result and sets
55
- // lb_policy_config to point to the right data.
56
- // Returns true if the service config has changed since the last result.
57
- // If the returned no_valid_service_config is true, that means that we
58
- // don't have a valid service config to use, and we should set the channel
59
- // to be in TRANSIENT_FAILURE.
60
- typedef bool (*ProcessResolverResultCallback)(
61
- void* user_data, const Resolver::Result& result,
62
- RefCountedPtr<LoadBalancingPolicy::Config>* lb_policy_config,
63
- grpc_error** service_config_error, bool* no_valid_service_config);
64
- // If error is set when this returns, then construction failed, and
65
- // the caller may not use the new object.
66
- ResolvingLoadBalancingPolicy(
67
- Args args, TraceFlag* tracer, grpc_core::UniquePtr<char> target_uri,
68
- ProcessResolverResultCallback process_resolver_result,
69
- void* process_resolver_result_user_data);
56
+ class ChannelConfigHelper {
57
+ public:
58
+ struct ApplyServiceConfigResult {
59
+ // Set to true if the service config has changed since the last result.
60
+ bool service_config_changed = false;
61
+ // Set to true if we don't have a valid service config to use.
62
+ // This tells the ResolvingLoadBalancingPolicy to put the channel
63
+ // into TRANSIENT_FAILURE.
64
+ bool no_valid_service_config = false;
65
+ // A service config parsing error occurred.
66
+ grpc_error* service_config_error = GRPC_ERROR_NONE;
67
+ // The LB policy config to use.
68
+ RefCountedPtr<LoadBalancingPolicy::Config> lb_policy_config;
69
+ };
70
+
71
+ virtual ~ChannelConfigHelper() = default;
72
+
73
+ // Applies the service config to the channel.
74
+ virtual ApplyServiceConfigResult ApplyServiceConfig(
75
+ const Resolver::Result& result) = 0;
76
+
77
+ // Applies the ConfigSelector to the channel.
78
+ virtual void ApplyConfigSelector(
79
+ bool service_config_changed,
80
+ RefCountedPtr<ConfigSelector> config_selector) = 0;
81
+
82
+ // Indicates a resolver transient failure.
83
+ virtual void ResolverTransientFailure(grpc_error* error) = 0;
84
+ };
85
+
86
+ ResolvingLoadBalancingPolicy(Args args, TraceFlag* tracer,
87
+ grpc_core::UniquePtr<char> target_uri,
88
+ ChannelConfigHelper* helper);
70
89
 
71
90
  virtual const char* name() const override { return "resolving_lb"; }
72
91
 
@@ -80,7 +99,7 @@ class ResolvingLoadBalancingPolicy : public LoadBalancingPolicy {
80
99
  void ResetBackoffLocked() override;
81
100
 
82
101
  private:
83
- using TraceStringVector = InlinedVector<char*, 3>;
102
+ using TraceStringVector = absl::InlinedVector<const char*, 3>;
84
103
 
85
104
  class ResolverResultHandler;
86
105
  class ResolvingControlHelper;
@@ -92,31 +111,30 @@ class ResolvingLoadBalancingPolicy : public LoadBalancingPolicy {
92
111
  void OnResolverError(grpc_error* error);
93
112
  void CreateOrUpdateLbPolicyLocked(
94
113
  RefCountedPtr<LoadBalancingPolicy::Config> lb_policy_config,
95
- Resolver::Result result, TraceStringVector* trace_strings);
114
+ Resolver::Result result);
96
115
  OrphanablePtr<LoadBalancingPolicy> CreateLbPolicyLocked(
97
- const char* lb_policy_name, const grpc_channel_args& args,
98
- TraceStringVector* trace_strings);
116
+ const grpc_channel_args& args);
99
117
  void MaybeAddTraceMessagesForAddressChangesLocked(
100
118
  bool resolution_contains_addresses, TraceStringVector* trace_strings);
101
119
  void ConcatenateAndAddChannelTraceLocked(
102
- TraceStringVector* trace_strings) const;
120
+ const TraceStringVector& trace_strings) const;
103
121
  void OnResolverResultChangedLocked(Resolver::Result result);
104
122
 
105
123
  // Passed in from caller at construction time.
106
124
  TraceFlag* tracer_;
107
125
  grpc_core::UniquePtr<char> target_uri_;
108
- ProcessResolverResultCallback process_resolver_result_ = nullptr;
109
- void* process_resolver_result_user_data_ = nullptr;
110
- grpc_core::UniquePtr<char> child_policy_name_;
111
- RefCountedPtr<LoadBalancingPolicy::Config> child_lb_config_;
126
+ ChannelConfigHelper* helper_;
112
127
 
113
128
  // Resolver and associated state.
114
129
  OrphanablePtr<Resolver> resolver_;
115
130
  bool previous_resolution_contained_addresses_ = false;
116
131
 
132
+ // Determined by resolver results.
133
+ grpc_core::UniquePtr<char> child_policy_name_;
134
+ RefCountedPtr<LoadBalancingPolicy::Config> child_lb_config_;
135
+
117
136
  // Child LB policy.
118
137
  OrphanablePtr<LoadBalancingPolicy> lb_policy_;
119
- OrphanablePtr<LoadBalancingPolicy> pending_lb_policy_;
120
138
  };
121
139
 
122
140
  } // namespace grpc_core