grpc 1.24.0 → 1.25.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 (504) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +306 -243
  3. data/etc/roots.pem +0 -100
  4. data/include/grpc/grpc_security.h +44 -18
  5. data/include/grpc/impl/codegen/grpc_types.h +15 -0
  6. data/include/grpc/impl/codegen/port_platform.h +27 -11
  7. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  8. data/src/boringssl/err_data.c +695 -650
  9. data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
  10. data/src/core/ext/filters/client_channel/client_channel.h +24 -0
  11. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
  12. data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
  13. data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
  14. data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
  15. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  16. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
  17. data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
  20. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
  21. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
  22. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
  25. data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
  26. data/src/core/ext/filters/client_channel/resolver.cc +1 -2
  27. data/src/core/ext/filters/client_channel/resolver.h +8 -16
  28. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
  29. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
  30. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
  31. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
  32. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  33. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
  34. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
  35. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  36. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
  37. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
  38. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
  39. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
  40. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
  41. data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
  42. data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
  43. data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
  45. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
  46. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
  47. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
  48. data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
  49. data/src/core/ext/filters/client_channel/service_config.h +8 -8
  50. data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
  51. data/src/core/ext/filters/client_channel/subchannel.h +7 -9
  52. data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
  53. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
  54. data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
  55. data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
  56. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
  57. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
  58. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
  59. data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
  60. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
  61. data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
  62. data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
  63. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
  64. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
  65. data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
  66. data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
  67. data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
  68. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
  69. data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
  70. data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
  71. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
  73. data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
  74. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
  75. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
  76. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
  77. data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
  78. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
  79. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
  80. data/src/core/lib/channel/channel_args.cc +16 -0
  81. data/src/core/lib/channel/channel_args.h +22 -0
  82. data/src/core/lib/channel/channelz.cc +5 -6
  83. data/src/core/lib/channel/channelz.h +1 -1
  84. data/src/core/lib/channel/connected_channel.cc +20 -20
  85. data/src/core/lib/channel/handshaker.h +3 -4
  86. data/src/core/lib/channel/handshaker_factory.h +1 -3
  87. data/src/core/lib/debug/trace.h +3 -2
  88. data/src/core/lib/gprpp/arena.cc +3 -3
  89. data/src/core/lib/gprpp/arena.h +2 -3
  90. data/src/core/lib/gprpp/inlined_vector.h +9 -0
  91. data/src/core/lib/gprpp/map.h +3 -501
  92. data/src/core/lib/gprpp/memory.h +45 -41
  93. data/src/core/lib/gprpp/mpscq.cc +108 -0
  94. data/src/core/lib/gprpp/mpscq.h +98 -0
  95. data/src/core/lib/gprpp/orphanable.h +6 -11
  96. data/src/core/lib/gprpp/ref_counted.h +25 -19
  97. data/src/core/lib/gprpp/set.h +33 -0
  98. data/src/core/lib/gprpp/thd.h +2 -4
  99. data/src/core/lib/http/httpcli.cc +1 -1
  100. data/src/core/lib/http/httpcli_security_connector.cc +15 -11
  101. data/src/core/lib/http/parser.cc +1 -1
  102. data/src/core/lib/iomgr/buffer_list.cc +4 -5
  103. data/src/core/lib/iomgr/buffer_list.h +5 -6
  104. data/src/core/lib/iomgr/call_combiner.cc +4 -5
  105. data/src/core/lib/iomgr/call_combiner.h +2 -2
  106. data/src/core/lib/iomgr/cfstream_handle.h +3 -5
  107. data/src/core/lib/iomgr/closure.h +8 -3
  108. data/src/core/lib/iomgr/combiner.cc +45 -82
  109. data/src/core/lib/iomgr/combiner.h +32 -8
  110. data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
  111. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
  112. data/src/core/lib/iomgr/exec_ctx.h +4 -3
  113. data/src/core/lib/iomgr/executor.cc +4 -2
  114. data/src/core/lib/iomgr/executor.h +3 -0
  115. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
  116. data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
  117. data/src/core/lib/iomgr/executor/threadpool.h +7 -11
  118. data/src/core/lib/iomgr/resource_quota.cc +55 -51
  119. data/src/core/lib/iomgr/resource_quota.h +13 -9
  120. data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
  121. data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
  122. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
  123. data/src/core/lib/iomgr/tcp_custom.cc +9 -7
  124. data/src/core/lib/iomgr/tcp_posix.cc +20 -16
  125. data/src/core/lib/iomgr/tcp_server.h +1 -4
  126. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  127. data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
  128. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
  129. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  130. data/src/core/lib/iomgr/udp_server.cc +3 -2
  131. data/src/core/lib/iomgr/udp_server.h +6 -12
  132. data/src/core/lib/json/json.h +1 -1
  133. data/src/core/lib/json/json_string.cc +2 -2
  134. data/src/core/lib/profiling/basic_timers.cc +2 -2
  135. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
  136. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  137. data/src/core/lib/security/credentials/credentials.h +4 -20
  138. data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
  139. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
  140. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
  141. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
  142. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
  143. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
  144. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
  145. data/src/core/lib/security/security_connector/security_connector.cc +1 -0
  146. data/src/core/lib/security/security_connector/security_connector.h +19 -17
  147. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
  148. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  149. data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
  150. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
  151. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
  152. data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
  153. data/src/core/lib/security/transport/security_handshaker.cc +29 -13
  154. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  155. data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
  156. data/src/core/lib/slice/slice.cc +2 -10
  157. data/src/core/lib/slice/slice_hash_table.h +4 -6
  158. data/src/core/lib/slice/slice_intern.cc +42 -39
  159. data/src/core/lib/slice/slice_internal.h +3 -3
  160. data/src/core/lib/slice/slice_utils.h +21 -4
  161. data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
  162. data/src/core/lib/surface/call.cc +3 -3
  163. data/src/core/lib/surface/channel.cc +7 -0
  164. data/src/core/lib/surface/completion_queue.cc +12 -11
  165. data/src/core/lib/surface/completion_queue.h +4 -2
  166. data/src/core/lib/surface/init.cc +1 -0
  167. data/src/core/lib/surface/lame_client.cc +33 -18
  168. data/src/core/lib/surface/server.cc +77 -76
  169. data/src/core/lib/surface/version.cc +1 -1
  170. data/src/core/lib/transport/byte_stream.h +3 -7
  171. data/src/core/lib/transport/connectivity_state.cc +112 -98
  172. data/src/core/lib/transport/connectivity_state.h +100 -50
  173. data/src/core/lib/transport/static_metadata.cc +276 -288
  174. data/src/core/lib/transport/static_metadata.h +73 -76
  175. data/src/core/lib/transport/status_conversion.cc +1 -1
  176. data/src/core/lib/transport/status_metadata.cc +1 -1
  177. data/src/core/lib/transport/transport.cc +2 -2
  178. data/src/core/lib/transport/transport.h +12 -4
  179. data/src/core/lib/transport/transport_op_string.cc +14 -11
  180. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  181. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  182. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
  183. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  184. data/src/core/tsi/fake_transport_security.cc +7 -5
  185. data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
  186. data/src/core/tsi/local_transport_security.cc +8 -6
  187. data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
  188. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
  189. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
  190. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
  191. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
  192. data/src/core/tsi/ssl_transport_security.cc +12 -12
  193. data/src/core/tsi/ssl_transport_security.h +2 -2
  194. data/src/core/tsi/transport_security_grpc.cc +7 -0
  195. data/src/core/tsi/transport_security_grpc.h +6 -0
  196. data/src/ruby/ext/grpc/extconf.rb +1 -0
  197. data/src/ruby/ext/grpc/rb_call.c +1 -1
  198. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  199. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  200. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  201. data/src/ruby/lib/grpc/version.rb +1 -1
  202. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  203. data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
  204. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
  205. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
  206. data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
  207. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
  208. data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
  209. data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
  210. data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
  211. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  212. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
  213. data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
  214. data/third_party/boringssl/crypto/base64/base64.c +2 -2
  215. data/third_party/boringssl/crypto/bio/bio.c +73 -9
  216. data/third_party/boringssl/crypto/bio/connect.c +4 -0
  217. data/third_party/boringssl/crypto/bio/fd.c +4 -0
  218. data/third_party/boringssl/crypto/bio/file.c +5 -2
  219. data/third_party/boringssl/crypto/bio/socket.c +4 -0
  220. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
  221. data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
  222. data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
  223. data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
  224. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
  225. data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
  226. data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
  227. data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
  228. data/third_party/boringssl/crypto/chacha/internal.h +45 -0
  229. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
  230. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
  231. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
  232. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
  233. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
  234. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
  235. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
  236. data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
  237. data/third_party/boringssl/crypto/conf/conf.c +7 -0
  238. data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
  239. data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
  240. data/third_party/boringssl/crypto/cpu-intel.c +45 -51
  241. data/third_party/boringssl/crypto/crypto.c +39 -22
  242. data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
  243. data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
  244. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
  245. data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
  246. data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
  247. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
  248. data/third_party/boringssl/crypto/engine/engine.c +2 -1
  249. data/third_party/boringssl/crypto/err/err.c +2 -0
  250. data/third_party/boringssl/crypto/err/internal.h +2 -2
  251. data/third_party/boringssl/crypto/evp/evp.c +89 -8
  252. data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
  253. data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
  254. data/third_party/boringssl/crypto/evp/internal.h +18 -1
  255. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
  256. data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
  257. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
  258. data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
  259. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
  260. data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
  261. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
  262. data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
  263. data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
  264. data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
  265. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
  266. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
  267. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
  268. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
  269. data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
  270. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
  271. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
  272. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
  273. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
  274. data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
  275. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
  276. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
  277. data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  278. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
  279. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
  280. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
  281. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
  282. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
  283. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
  284. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
  285. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
  286. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
  287. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
  288. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
  289. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
  290. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
  291. data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
  292. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
  293. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
  294. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
  295. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
  296. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
  297. data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
  298. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
  299. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
  300. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
  301. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
  302. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
  303. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
  304. data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
  305. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
  306. data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
  307. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
  308. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
  309. data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  310. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
  311. data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
  312. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
  313. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
  314. data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
  315. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
  316. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
  317. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
  318. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
  319. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
  320. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
  321. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
  322. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
  323. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
  324. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
  325. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
  326. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
  327. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
  328. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
  329. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
  330. data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
  331. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
  332. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
  333. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
  334. data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
  335. data/third_party/boringssl/crypto/hrss/internal.h +62 -0
  336. data/third_party/boringssl/crypto/internal.h +95 -20
  337. data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
  338. data/third_party/boringssl/crypto/mem.c +39 -2
  339. data/third_party/boringssl/crypto/obj/obj.c +4 -4
  340. data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
  341. data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
  342. data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
  343. data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
  344. data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
  345. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
  346. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
  347. data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
  348. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
  349. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
  350. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
  351. data/third_party/boringssl/crypto/pool/internal.h +1 -1
  352. data/third_party/boringssl/crypto/pool/pool.c +21 -0
  353. data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
  354. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
  355. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  356. data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
  357. data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
  358. data/third_party/boringssl/crypto/stack/stack.c +83 -32
  359. data/third_party/boringssl/crypto/thread_none.c +2 -2
  360. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  361. data/third_party/boringssl/crypto/thread_win.c +38 -19
  362. data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
  363. data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
  364. data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
  365. data/third_party/boringssl/crypto/x509/by_file.c +12 -10
  366. data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
  367. data/third_party/boringssl/crypto/x509/t_req.c +1 -3
  368. data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
  369. data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
  370. data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
  371. data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
  372. data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
  373. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  374. data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
  375. data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
  376. data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
  377. data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
  378. data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
  379. data/third_party/boringssl/crypto/x509/x509name.c +2 -3
  380. data/third_party/boringssl/crypto/x509/x_all.c +109 -210
  381. data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
  382. data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
  383. data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
  384. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
  385. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
  386. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
  387. data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
  388. data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
  389. data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
  390. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
  391. data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
  392. data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
  393. data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
  394. data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
  395. data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
  396. data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
  397. data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
  398. data/third_party/boringssl/include/openssl/aead.h +45 -19
  399. data/third_party/boringssl/include/openssl/aes.h +32 -7
  400. data/third_party/boringssl/include/openssl/asn1.h +7 -77
  401. data/third_party/boringssl/include/openssl/base.h +120 -6
  402. data/third_party/boringssl/include/openssl/base64.h +4 -1
  403. data/third_party/boringssl/include/openssl/bio.h +112 -81
  404. data/third_party/boringssl/include/openssl/blowfish.h +3 -3
  405. data/third_party/boringssl/include/openssl/bn.h +55 -29
  406. data/third_party/boringssl/include/openssl/buf.h +2 -2
  407. data/third_party/boringssl/include/openssl/bytestring.h +54 -32
  408. data/third_party/boringssl/include/openssl/cast.h +2 -2
  409. data/third_party/boringssl/include/openssl/cipher.h +46 -16
  410. data/third_party/boringssl/include/openssl/cmac.h +6 -2
  411. data/third_party/boringssl/include/openssl/conf.h +3 -6
  412. data/third_party/boringssl/include/openssl/cpu.h +25 -9
  413. data/third_party/boringssl/include/openssl/crypto.h +32 -10
  414. data/third_party/boringssl/include/openssl/curve25519.h +4 -4
  415. data/third_party/boringssl/include/openssl/dh.h +3 -2
  416. data/third_party/boringssl/include/openssl/digest.h +21 -7
  417. data/third_party/boringssl/include/openssl/dsa.h +8 -2
  418. data/third_party/boringssl/include/openssl/e_os2.h +18 -0
  419. data/third_party/boringssl/include/openssl/ec.h +25 -21
  420. data/third_party/boringssl/include/openssl/ec_key.h +36 -8
  421. data/third_party/boringssl/include/openssl/ecdh.h +17 -0
  422. data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
  423. data/third_party/boringssl/include/openssl/engine.h +4 -4
  424. data/third_party/boringssl/include/openssl/err.h +3 -0
  425. data/third_party/boringssl/include/openssl/evp.h +199 -42
  426. data/third_party/boringssl/include/openssl/hmac.h +4 -4
  427. data/third_party/boringssl/include/openssl/hrss.h +100 -0
  428. data/third_party/boringssl/include/openssl/lhash.h +131 -23
  429. data/third_party/boringssl/include/openssl/md4.h +6 -4
  430. data/third_party/boringssl/include/openssl/md5.h +6 -4
  431. data/third_party/boringssl/include/openssl/mem.h +6 -2
  432. data/third_party/boringssl/include/openssl/nid.h +3 -0
  433. data/third_party/boringssl/include/openssl/obj.h +3 -0
  434. data/third_party/boringssl/include/openssl/pem.h +102 -64
  435. data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
  436. data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
  437. data/third_party/boringssl/include/openssl/pool.h +13 -2
  438. data/third_party/boringssl/include/openssl/ripemd.h +5 -4
  439. data/third_party/boringssl/include/openssl/rsa.h +46 -15
  440. data/third_party/boringssl/include/openssl/sha.h +40 -28
  441. data/third_party/boringssl/include/openssl/siphash.h +37 -0
  442. data/third_party/boringssl/include/openssl/span.h +17 -9
  443. data/third_party/boringssl/include/openssl/ssl.h +766 -393
  444. data/third_party/boringssl/include/openssl/ssl3.h +4 -3
  445. data/third_party/boringssl/include/openssl/stack.h +134 -77
  446. data/third_party/boringssl/include/openssl/thread.h +1 -1
  447. data/third_party/boringssl/include/openssl/tls1.h +25 -9
  448. data/third_party/boringssl/include/openssl/type_check.h +14 -15
  449. data/third_party/boringssl/include/openssl/x509.h +28 -3
  450. data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
  451. data/third_party/boringssl/include/openssl/x509v3.h +17 -13
  452. data/third_party/boringssl/ssl/d1_both.cc +9 -18
  453. data/third_party/boringssl/ssl/d1_lib.cc +4 -3
  454. data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
  455. data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
  456. data/third_party/boringssl/ssl/dtls_method.cc +0 -1
  457. data/third_party/boringssl/ssl/dtls_record.cc +28 -28
  458. data/third_party/boringssl/ssl/handoff.cc +295 -91
  459. data/third_party/boringssl/ssl/handshake.cc +133 -72
  460. data/third_party/boringssl/ssl/handshake_client.cc +218 -189
  461. data/third_party/boringssl/ssl/handshake_server.cc +399 -272
  462. data/third_party/boringssl/ssl/internal.h +1413 -928
  463. data/third_party/boringssl/ssl/s3_both.cc +175 -36
  464. data/third_party/boringssl/ssl/s3_lib.cc +9 -13
  465. data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
  466. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
  467. data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
  468. data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
  469. data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
  470. data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
  471. data/third_party/boringssl/ssl/ssl_file.cc +2 -0
  472. data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
  473. data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
  474. data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
  475. data/third_party/boringssl/ssl/ssl_session.cc +230 -178
  476. data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
  477. data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
  478. data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
  479. data/third_party/boringssl/ssl/t1_enc.cc +5 -96
  480. data/third_party/boringssl/ssl/t1_lib.cc +931 -678
  481. data/third_party/boringssl/ssl/tls13_both.cc +251 -121
  482. data/third_party/boringssl/ssl/tls13_client.cc +129 -73
  483. data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
  484. data/third_party/boringssl/ssl/tls13_server.cc +259 -192
  485. data/third_party/boringssl/ssl/tls_method.cc +26 -21
  486. data/third_party/boringssl/ssl/tls_record.cc +42 -47
  487. data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
  488. data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
  489. data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
  490. data/third_party/boringssl/third_party/fiat/p256.c +238 -999
  491. data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
  492. data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
  493. data/third_party/upb/upb/port_def.inc +1 -1
  494. data/third_party/upb/upb/table.c +2 -1
  495. metadata +71 -43
  496. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
  497. data/src/core/lib/gpr/mpscq.cc +0 -117
  498. data/src/core/lib/gpr/mpscq.h +0 -88
  499. data/src/core/lib/gprpp/abstract.h +0 -47
  500. data/src/core/lib/gprpp/pair.h +0 -38
  501. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  502. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  503. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  504. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -77,9 +77,9 @@ class ConnectedSubchannel : public RefCounted<ConnectedSubchannel> {
77
77
  RefCountedPtr<channelz::SubchannelNode> channelz_subchannel);
78
78
  ~ConnectedSubchannel();
79
79
 
80
- void NotifyOnStateChange(grpc_pollset_set* interested_parties,
81
- grpc_connectivity_state* state,
82
- grpc_closure* closure);
80
+ void StartWatch(grpc_pollset_set* interested_parties,
81
+ OrphanablePtr<ConnectivityStateWatcherInterface> watcher);
82
+
83
83
  void Ping(grpc_closure* on_initiate, grpc_closure* on_ack);
84
84
 
85
85
  grpc_channel_stack* channel_stack() const { return channel_stack_; }
@@ -192,11 +192,9 @@ class Subchannel {
192
192
  virtual void OnConnectivityStateChange(
193
193
  grpc_connectivity_state new_state,
194
194
  RefCountedPtr<ConnectedSubchannel> connected_subchannel) // NOLINT
195
- GRPC_ABSTRACT;
196
-
197
- virtual grpc_pollset_set* interested_parties() GRPC_ABSTRACT;
195
+ = 0;
198
196
 
199
- GRPC_ABSTRACT_BASE_CLASS
197
+ virtual grpc_pollset_set* interested_parties() = 0;
200
198
  };
201
199
 
202
200
  // The ctor and dtor are not intended to use directly.
@@ -294,8 +292,8 @@ class Subchannel {
294
292
  bool empty() const { return watchers_.empty(); }
295
293
 
296
294
  private:
297
- // TODO(roth): This could be a set instead of a map if we had a set
298
- // implementation.
295
+ // TODO(roth): Once we can use C++-14 heterogeneous lookups, this can
296
+ // be a set instead of a map.
299
297
  Map<ConnectivityStateWatcherInterface*,
300
298
  OrphanablePtr<ConnectivityStateWatcherInterface>>
301
299
  watchers_;
@@ -36,14 +36,12 @@ class SubchannelInterface : public RefCounted<SubchannelInterface> {
36
36
  // Will be invoked whenever the subchannel's connectivity state
37
37
  // changes. There will be only one invocation of this method on a
38
38
  // given watcher instance at any given time.
39
- virtual void OnConnectivityStateChange(grpc_connectivity_state new_state)
40
- GRPC_ABSTRACT;
39
+ virtual void OnConnectivityStateChange(
40
+ grpc_connectivity_state new_state) = 0;
41
41
 
42
42
  // TODO(roth): Remove this as soon as we move to EventManager-based
43
43
  // polling.
44
- virtual grpc_pollset_set* interested_parties() GRPC_ABSTRACT;
45
-
46
- GRPC_ABSTRACT_BASE_CLASS
44
+ virtual grpc_pollset_set* interested_parties() = 0;
47
45
  };
48
46
 
49
47
  template <typename TraceFlagT = TraceFlag>
@@ -53,7 +51,7 @@ class SubchannelInterface : public RefCounted<SubchannelInterface> {
53
51
  virtual ~SubchannelInterface() = default;
54
52
 
55
53
  // Returns the current connectivity state of the subchannel.
56
- virtual grpc_connectivity_state CheckConnectivityState() GRPC_ABSTRACT;
54
+ virtual grpc_connectivity_state CheckConnectivityState() = 0;
57
55
 
58
56
  // Starts watching the subchannel's connectivity state.
59
57
  // The first callback to the watcher will be delivered when the
@@ -68,29 +66,27 @@ class SubchannelInterface : public RefCounted<SubchannelInterface> {
68
66
  // the previous watcher using CancelConnectivityStateWatch().
69
67
  virtual void WatchConnectivityState(
70
68
  grpc_connectivity_state initial_state,
71
- UniquePtr<ConnectivityStateWatcherInterface> watcher) GRPC_ABSTRACT;
69
+ UniquePtr<ConnectivityStateWatcherInterface> watcher) = 0;
72
70
 
73
71
  // Cancels a connectivity state watch.
74
72
  // If the watcher has already been destroyed, this is a no-op.
75
73
  virtual void CancelConnectivityStateWatch(
76
- ConnectivityStateWatcherInterface* watcher) GRPC_ABSTRACT;
74
+ ConnectivityStateWatcherInterface* watcher) = 0;
77
75
 
78
76
  // Attempt to connect to the backend. Has no effect if already connected.
79
77
  // If the subchannel is currently in backoff delay due to a previously
80
78
  // failed attempt, the new connection attempt will not start until the
81
79
  // backoff delay has elapsed.
82
- virtual void AttemptToConnect() GRPC_ABSTRACT;
80
+ virtual void AttemptToConnect() = 0;
83
81
 
84
82
  // Resets the subchannel's connection backoff state. If AttemptToConnect()
85
83
  // has been called since the subchannel entered TRANSIENT_FAILURE state,
86
84
  // starts a new connection attempt immediately; otherwise, a new connection
87
85
  // attempt will be started as soon as AttemptToConnect() is called.
88
- virtual void ResetBackoff() GRPC_ABSTRACT;
86
+ virtual void ResetBackoff() = 0;
89
87
 
90
88
  // TODO(roth): Need a better non-grpc-specific abstraction here.
91
- virtual const grpc_channel_args* channel_args() GRPC_ABSTRACT;
92
-
93
- GRPC_ABSTRACT_BASE_CLASS
89
+ virtual const grpc_channel_args* channel_args() = 0;
94
90
  };
95
91
 
96
92
  } // namespace grpc_core
@@ -23,7 +23,6 @@
23
23
 
24
24
  #include "src/core/lib/avl/avl.h"
25
25
  #include "src/core/lib/channel/channel_args.h"
26
- #include "src/core/lib/gprpp/abstract.h"
27
26
  #include "src/core/lib/gprpp/ref_counted.h"
28
27
 
29
28
  namespace grpc_core {
@@ -70,14 +69,14 @@ class SubchannelPoolInterface : public RefCounted<SubchannelPoolInterface> {
70
69
  // with \a key, which may be different from \a constructed because we reuse
71
70
  // (instead of update) any existing subchannel already registered with \a key.
72
71
  virtual Subchannel* RegisterSubchannel(SubchannelKey* key,
73
- Subchannel* constructed) GRPC_ABSTRACT;
72
+ Subchannel* constructed) = 0;
74
73
 
75
74
  // Removes the registered subchannel found by \a key.
76
- virtual void UnregisterSubchannel(SubchannelKey* key) GRPC_ABSTRACT;
75
+ virtual void UnregisterSubchannel(SubchannelKey* key) = 0;
77
76
 
78
77
  // Finds the subchannel registered for the given subchannel key. Returns NULL
79
78
  // if no such channel exists. Thread-safe.
80
- virtual Subchannel* FindSubchannel(SubchannelKey* key) GRPC_ABSTRACT;
79
+ virtual Subchannel* FindSubchannel(SubchannelKey* key) = 0;
81
80
 
82
81
  // Creates a channel arg from \a subchannel pool.
83
82
  static grpc_arg CreateChannelArg(SubchannelPoolInterface* subchannel_pool);
@@ -85,8 +84,6 @@ class SubchannelPoolInterface : public RefCounted<SubchannelPoolInterface> {
85
84
  // Gets the subchannel pool from the channel args.
86
85
  static SubchannelPoolInterface* GetSubchannelPoolFromChannelArgs(
87
86
  const grpc_channel_args* args);
88
-
89
- GRPC_ABSTRACT_BASE_CLASS
90
87
  };
91
88
 
92
89
  } // namespace grpc_core
@@ -24,7 +24,7 @@
24
24
  #include <grpc/support/alloc.h>
25
25
  #include <grpc/support/string_util.h>
26
26
 
27
- #include "src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h"
27
+ #include "src/core/ext/filters/client_channel/xds/xds_api.h"
28
28
  #include "src/core/lib/iomgr/error.h"
29
29
  #include "src/core/lib/iomgr/sockaddr_utils.h"
30
30
 
@@ -49,15 +49,49 @@ namespace {
49
49
 
50
50
  constexpr char kEdsTypeUrl[] =
51
51
  "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment";
52
- constexpr char kEndpointRequired[] = "endpointRequired";
53
52
 
54
53
  } // namespace
55
54
 
55
+ bool XdsPriorityListUpdate::operator==(
56
+ const XdsPriorityListUpdate& other) const {
57
+ if (priorities_.size() != other.priorities_.size()) return false;
58
+ for (size_t i = 0; i < priorities_.size(); ++i) {
59
+ if (priorities_[i].localities != other.priorities_[i].localities) {
60
+ return false;
61
+ }
62
+ }
63
+ return true;
64
+ }
65
+
66
+ void XdsPriorityListUpdate::Add(
67
+ XdsPriorityListUpdate::LocalityMap::Locality locality) {
68
+ // Pad the missing priorities in case the localities are not ordered by
69
+ // priority.
70
+ if (!Contains(locality.priority)) priorities_.resize(locality.priority + 1);
71
+ LocalityMap& locality_map = priorities_[locality.priority];
72
+ locality_map.localities.emplace(locality.name, std::move(locality));
73
+ }
74
+
75
+ const XdsPriorityListUpdate::LocalityMap* XdsPriorityListUpdate::Find(
76
+ uint32_t priority) const {
77
+ if (!Contains(priority)) return nullptr;
78
+ return &priorities_[priority];
79
+ }
80
+
81
+ bool XdsPriorityListUpdate::Contains(
82
+ const RefCountedPtr<XdsLocalityName>& name) {
83
+ for (size_t i = 0; i < priorities_.size(); ++i) {
84
+ const LocalityMap& locality_map = priorities_[i];
85
+ if (locality_map.Contains(name)) return true;
86
+ }
87
+ return false;
88
+ }
89
+
56
90
  bool XdsDropConfig::ShouldDrop(const UniquePtr<char>** category_name) const {
57
91
  for (size_t i = 0; i < drop_category_list_.size(); ++i) {
58
92
  const auto& drop_category = drop_category_list_[i];
59
93
  // Generate a random number in [0, 1000000).
60
- const int random = rand() % 1000000;
94
+ const uint32_t random = static_cast<uint32_t>(rand()) % 1000000;
61
95
  if (random < drop_category.parts_per_million) {
62
96
  *category_name = &drop_category.name;
63
97
  return true;
@@ -66,24 +100,115 @@ bool XdsDropConfig::ShouldDrop(const UniquePtr<char>** category_name) const {
66
100
  return false;
67
101
  }
68
102
 
69
- grpc_slice XdsEdsRequestCreateAndEncode(const char* service_name) {
103
+ namespace {
104
+
105
+ void PopulateMetadataValue(upb_arena* arena, google_protobuf_Value* value_pb,
106
+ const XdsBootstrap::MetadataValue& value);
107
+
108
+ void PopulateListValue(upb_arena* arena, google_protobuf_ListValue* list_value,
109
+ const std::vector<XdsBootstrap::MetadataValue>& values) {
110
+ for (const auto& value : values) {
111
+ auto* value_pb = google_protobuf_ListValue_add_values(list_value, arena);
112
+ PopulateMetadataValue(arena, value_pb, value);
113
+ }
114
+ }
115
+
116
+ void PopulateMetadata(
117
+ upb_arena* arena, google_protobuf_Struct* metadata_pb,
118
+ const Map<const char*, XdsBootstrap::MetadataValue, StringLess>& metadata) {
119
+ for (const auto& p : metadata) {
120
+ google_protobuf_Struct_FieldsEntry* field =
121
+ google_protobuf_Struct_add_fields(metadata_pb, arena);
122
+ google_protobuf_Struct_FieldsEntry_set_key(field,
123
+ upb_strview_makez(p.first));
124
+ google_protobuf_Value* value =
125
+ google_protobuf_Struct_FieldsEntry_mutable_value(field, arena);
126
+ PopulateMetadataValue(arena, value, p.second);
127
+ }
128
+ }
129
+
130
+ void PopulateMetadataValue(upb_arena* arena, google_protobuf_Value* value_pb,
131
+ const XdsBootstrap::MetadataValue& value) {
132
+ switch (value.type) {
133
+ case XdsBootstrap::MetadataValue::Type::MD_NULL:
134
+ google_protobuf_Value_set_null_value(value_pb, 0);
135
+ break;
136
+ case XdsBootstrap::MetadataValue::Type::DOUBLE:
137
+ google_protobuf_Value_set_number_value(value_pb, value.double_value);
138
+ break;
139
+ case XdsBootstrap::MetadataValue::Type::STRING:
140
+ google_protobuf_Value_set_string_value(
141
+ value_pb, upb_strview_makez(value.string_value));
142
+ break;
143
+ case XdsBootstrap::MetadataValue::Type::BOOL:
144
+ google_protobuf_Value_set_bool_value(value_pb, value.bool_value);
145
+ break;
146
+ case XdsBootstrap::MetadataValue::Type::STRUCT: {
147
+ google_protobuf_Struct* struct_value =
148
+ google_protobuf_Value_mutable_struct_value(value_pb, arena);
149
+ PopulateMetadata(arena, struct_value, value.struct_value);
150
+ break;
151
+ }
152
+ case XdsBootstrap::MetadataValue::Type::LIST: {
153
+ google_protobuf_ListValue* list_value =
154
+ google_protobuf_Value_mutable_list_value(value_pb, arena);
155
+ PopulateListValue(arena, list_value, value.list_value);
156
+ break;
157
+ }
158
+ }
159
+ }
160
+
161
+ void PopulateNode(upb_arena* arena, const XdsBootstrap::Node* node,
162
+ const char* build_version, envoy_api_v2_core_Node* node_msg) {
163
+ if (node != nullptr) {
164
+ if (node->id != nullptr) {
165
+ envoy_api_v2_core_Node_set_id(node_msg, upb_strview_makez(node->id));
166
+ }
167
+ if (node->cluster != nullptr) {
168
+ envoy_api_v2_core_Node_set_cluster(node_msg,
169
+ upb_strview_makez(node->cluster));
170
+ }
171
+ if (!node->metadata.empty()) {
172
+ google_protobuf_Struct* metadata =
173
+ envoy_api_v2_core_Node_mutable_metadata(node_msg, arena);
174
+ PopulateMetadata(arena, metadata, node->metadata);
175
+ }
176
+ if (node->locality_region != nullptr || node->locality_zone != nullptr ||
177
+ node->locality_subzone != nullptr) {
178
+ envoy_api_v2_core_Locality* locality =
179
+ envoy_api_v2_core_Node_mutable_locality(node_msg, arena);
180
+ if (node->locality_region != nullptr) {
181
+ envoy_api_v2_core_Locality_set_region(
182
+ locality, upb_strview_makez(node->locality_region));
183
+ }
184
+ if (node->locality_zone != nullptr) {
185
+ envoy_api_v2_core_Locality_set_zone(
186
+ locality, upb_strview_makez(node->locality_zone));
187
+ }
188
+ if (node->locality_subzone != nullptr) {
189
+ envoy_api_v2_core_Locality_set_sub_zone(
190
+ locality, upb_strview_makez(node->locality_subzone));
191
+ }
192
+ }
193
+ }
194
+ envoy_api_v2_core_Node_set_build_version(node_msg,
195
+ upb_strview_makez(build_version));
196
+ }
197
+
198
+ } // namespace
199
+
200
+ grpc_slice XdsEdsRequestCreateAndEncode(const char* server_name,
201
+ const XdsBootstrap::Node* node,
202
+ const char* build_version) {
70
203
  upb::Arena arena;
71
204
  // Create a request.
72
205
  envoy_api_v2_DiscoveryRequest* request =
73
206
  envoy_api_v2_DiscoveryRequest_new(arena.ptr());
74
- envoy_api_v2_core_Node* node =
207
+ envoy_api_v2_core_Node* node_msg =
75
208
  envoy_api_v2_DiscoveryRequest_mutable_node(request, arena.ptr());
76
- google_protobuf_Struct* metadata =
77
- envoy_api_v2_core_Node_mutable_metadata(node, arena.ptr());
78
- google_protobuf_Struct_FieldsEntry* field =
79
- google_protobuf_Struct_add_fields(metadata, arena.ptr());
80
- google_protobuf_Struct_FieldsEntry_set_key(
81
- field, upb_strview_makez(kEndpointRequired));
82
- google_protobuf_Value* value =
83
- google_protobuf_Struct_FieldsEntry_mutable_value(field, arena.ptr());
84
- google_protobuf_Value_set_bool_value(value, true);
209
+ PopulateNode(arena.ptr(), node, build_version, node_msg);
85
210
  envoy_api_v2_DiscoveryRequest_add_resource_names(
86
- request, upb_strview_makez(service_name), arena.ptr());
211
+ request, upb_strview_makez(server_name), arena.ptr());
87
212
  envoy_api_v2_DiscoveryRequest_set_type_url(request,
88
213
  upb_strview_makez(kEdsTypeUrl));
89
214
  // Encode the request.
@@ -136,7 +261,7 @@ UniquePtr<char> StringCopy(const upb_strview& strview) {
136
261
 
137
262
  grpc_error* LocalityParse(
138
263
  const envoy_api_v2_endpoint_LocalityLbEndpoints* locality_lb_endpoints,
139
- XdsLocalityInfo* locality_info) {
264
+ XdsPriorityListUpdate::LocalityMap::Locality* output_locality) {
140
265
  // Parse LB weight.
141
266
  const google_protobuf_UInt32Value* lb_weight =
142
267
  envoy_api_v2_endpoint_LocalityLbEndpoints_load_balancing_weight(
@@ -144,13 +269,13 @@ grpc_error* LocalityParse(
144
269
  // If LB weight is not specified, it means this locality is assigned no load.
145
270
  // TODO(juanlishen): When we support CDS to configure the inter-locality
146
271
  // policy, we should change the LB weight handling.
147
- locality_info->lb_weight =
272
+ output_locality->lb_weight =
148
273
  lb_weight != nullptr ? google_protobuf_UInt32Value_value(lb_weight) : 0;
149
- if (locality_info->lb_weight == 0) return GRPC_ERROR_NONE;
274
+ if (output_locality->lb_weight == 0) return GRPC_ERROR_NONE;
150
275
  // Parse locality name.
151
276
  const envoy_api_v2_core_Locality* locality =
152
277
  envoy_api_v2_endpoint_LocalityLbEndpoints_locality(locality_lb_endpoints);
153
- locality_info->locality_name = MakeRefCounted<XdsLocalityName>(
278
+ output_locality->name = MakeRefCounted<XdsLocalityName>(
154
279
  StringCopy(envoy_api_v2_core_Locality_region(locality)),
155
280
  StringCopy(envoy_api_v2_core_Locality_zone(locality)),
156
281
  StringCopy(envoy_api_v2_core_Locality_sub_zone(locality)));
@@ -160,12 +285,12 @@ grpc_error* LocalityParse(
160
285
  envoy_api_v2_endpoint_LocalityLbEndpoints_lb_endpoints(
161
286
  locality_lb_endpoints, &size);
162
287
  for (size_t i = 0; i < size; ++i) {
163
- grpc_error* error = ServerAddressParseAndAppend(lb_endpoints[i],
164
- &locality_info->serverlist);
288
+ grpc_error* error = ServerAddressParseAndAppend(
289
+ lb_endpoints[i], &output_locality->serverlist);
165
290
  if (error != GRPC_ERROR_NONE) return error;
166
291
  }
167
292
  // Parse the priority.
168
- locality_info->priority =
293
+ output_locality->priority =
169
294
  envoy_api_v2_endpoint_LocalityLbEndpoints_priority(locality_lb_endpoints);
170
295
  return GRPC_ERROR_NONE;
171
296
  }
@@ -211,7 +336,7 @@ grpc_error* DropParseAndAppend(
211
336
  } // namespace
212
337
 
213
338
  grpc_error* XdsEdsResponseDecodeAndParse(const grpc_slice& encoded_response,
214
- XdsUpdate* update) {
339
+ EdsUpdate* update) {
215
340
  upb::Arena arena;
216
341
  // Decode the response.
217
342
  const envoy_api_v2_DiscoveryResponse* response =
@@ -253,18 +378,13 @@ grpc_error* XdsEdsResponseDecodeAndParse(const grpc_slice& encoded_response,
253
378
  envoy_api_v2_ClusterLoadAssignment_endpoints(cluster_load_assignment,
254
379
  &size);
255
380
  for (size_t i = 0; i < size; ++i) {
256
- XdsLocalityInfo locality_info;
257
- grpc_error* error = LocalityParse(endpoints[i], &locality_info);
381
+ XdsPriorityListUpdate::LocalityMap::Locality locality;
382
+ grpc_error* error = LocalityParse(endpoints[i], &locality);
258
383
  if (error != GRPC_ERROR_NONE) return error;
259
384
  // Filter out locality with weight 0.
260
- if (locality_info.lb_weight == 0) continue;
261
- update->locality_list.push_back(std::move(locality_info));
385
+ if (locality.lb_weight == 0) continue;
386
+ update->priority_list_update.Add(locality);
262
387
  }
263
- // The locality list is sorted here into deterministic order so that it's
264
- // easier to check if two locality lists contain the same set of localities.
265
- std::sort(update->locality_list.data(),
266
- update->locality_list.data() + update->locality_list.size(),
267
- XdsLocalityInfo::Less());
268
388
  // Get the drop config.
269
389
  update->drop_config = MakeRefCounted<XdsDropConfig>();
270
390
  const envoy_api_v2_ClusterLoadAssignment_Policy* policy =
@@ -296,11 +416,18 @@ grpc_slice LrsRequestEncode(
296
416
 
297
417
  } // namespace
298
418
 
299
- grpc_slice XdsLrsRequestCreateAndEncode(const char* server_name) {
419
+ grpc_slice XdsLrsRequestCreateAndEncode(const char* server_name,
420
+ const XdsBootstrap::Node* node,
421
+ const char* build_version) {
300
422
  upb::Arena arena;
301
423
  // Create a request.
302
424
  envoy_service_load_stats_v2_LoadStatsRequest* request =
303
425
  envoy_service_load_stats_v2_LoadStatsRequest_new(arena.ptr());
426
+ // Populate node.
427
+ envoy_api_v2_core_Node* node_msg =
428
+ envoy_service_load_stats_v2_LoadStatsRequest_mutable_node(request,
429
+ arena.ptr());
430
+ PopulateNode(arena.ptr(), node, build_version, node_msg);
304
431
  // Add cluster stats. There is only one because we only use one server name in
305
432
  // one channel.
306
433
  envoy_api_v2_endpoint_ClusterStats* cluster_stats =
@@ -314,18 +441,11 @@ grpc_slice XdsLrsRequestCreateAndEncode(const char* server_name) {
314
441
 
315
442
  namespace {
316
443
 
317
- void LocalityStatsPopulate(envoy_api_v2_endpoint_UpstreamLocalityStats* output,
318
- #if GRPC_USE_CPP_STD_LIB
319
- // TODO(veblush): Clean up this
320
- // This is to address the difference between
321
- // std::map and Map. #else block will be gone
322
- // once using stdlib is enabled by default.
323
- Pair<const RefCountedPtr<XdsLocalityName>,
324
- #else
325
- Pair<RefCountedPtr<XdsLocalityName>,
326
- #endif
327
- XdsClientStats::LocalityStats::Snapshot>& input,
328
- upb_arena* arena) {
444
+ void LocalityStatsPopulate(
445
+ envoy_api_v2_endpoint_UpstreamLocalityStats* output,
446
+ std::pair<const RefCountedPtr<XdsLocalityName>,
447
+ XdsClientStats::LocalityStats::Snapshot>& input,
448
+ upb_arena* arena) {
329
449
  // Set sub_zone.
330
450
  envoy_api_v2_core_Locality* locality =
331
451
  envoy_api_v2_endpoint_UpstreamLocalityStats_mutable_locality(output,
@@ -414,8 +534,8 @@ grpc_slice XdsLrsRequestCreateAndEncode(const char* server_name,
414
534
  }
415
535
 
416
536
  grpc_error* XdsLrsResponseDecodeAndParse(const grpc_slice& encoded_response,
417
- grpc_millis* load_reporting_interval,
418
- const char* expected_server_name) {
537
+ UniquePtr<char>* cluster_name,
538
+ grpc_millis* load_reporting_interval) {
419
539
  upb::Arena arena;
420
540
  // Decode the response.
421
541
  const envoy_service_load_stats_v2_LoadStatsResponse* decoded_response =
@@ -435,11 +555,8 @@ grpc_error* XdsLrsResponseDecodeAndParse(const grpc_slice& encoded_response,
435
555
  return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
436
556
  "The number of clusters (server names) is not 1.");
437
557
  }
438
- // Check the cluster name in the response
439
- if (strncmp(expected_server_name, clusters[0].data, clusters[0].size) != 0) {
440
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
441
- "Unexpected cluster (server name).");
442
- }
558
+ // Get the cluster name for reporting loads.
559
+ *cluster_name = StringCopy(clusters[0]);
443
560
  // Get the load report interval.
444
561
  const google_protobuf_Duration* load_reporting_interval_duration =
445
562
  envoy_service_load_stats_v2_LoadStatsResponse_load_reporting_interval(