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
@@ -46,11 +46,35 @@ grpc_connectivity_state grpc_client_channel_check_connectivity_state(
46
46
  int grpc_client_channel_num_external_connectivity_watchers(
47
47
  grpc_channel_element* elem);
48
48
 
49
+ // Starts a one-time connectivity state watch. When the channel's state
50
+ // becomes different from *state, sets *state to the new state and
51
+ // schedules on_complete. The watcher_timer_init callback is invoked as
52
+ // soon as the watch is actually started (i.e., after hopping into the
53
+ // client channel combiner). I/O will be serviced via pollent.
54
+ //
55
+ // This is intended to be used when starting a watch from outside of C-core
56
+ // via grpc_channel_watch_connectivity_state(). It should not be used
57
+ // by other callers.
49
58
  void grpc_client_channel_watch_connectivity_state(
50
59
  grpc_channel_element* elem, grpc_polling_entity pollent,
51
60
  grpc_connectivity_state* state, grpc_closure* on_complete,
52
61
  grpc_closure* watcher_timer_init);
53
62
 
63
+ // Starts and stops a connectivity watch. The watcher will be initially
64
+ // notified as soon as the state changes from initial_state and then on
65
+ // every subsequent state change until either the watch is stopped or
66
+ // it is notified that the state has changed to SHUTDOWN.
67
+ //
68
+ // This is intended to be used when starting watches from code inside of
69
+ // C-core (e.g., for a nested control plane channel for things like xds).
70
+ void grpc_client_channel_start_connectivity_watch(
71
+ grpc_channel_element* elem, grpc_connectivity_state initial_state,
72
+ grpc_core::OrphanablePtr<grpc_core::AsyncConnectivityStateWatcherInterface>
73
+ watcher);
74
+ void grpc_client_channel_stop_connectivity_watch(
75
+ grpc_channel_element* elem,
76
+ grpc_core::AsyncConnectivityStateWatcherInterface* watcher);
77
+
54
78
  /* Debug helper: pull the subchannel call from a call stack element */
55
79
  grpc_core::RefCountedPtr<grpc_core::SubchannelCall>
56
80
  grpc_client_channel_get_subchannel_call(grpc_call_element* elem);
@@ -53,9 +53,8 @@ void SubchannelNode::PopulateConnectivityState(grpc_json* json) {
53
53
  connectivity_state_.Load(MemoryOrder::RELAXED);
54
54
  json = grpc_json_create_child(nullptr, json, "state", nullptr,
55
55
  GRPC_JSON_OBJECT, false);
56
- grpc_json_create_child(nullptr, json, "state",
57
- grpc_connectivity_state_name(state), GRPC_JSON_STRING,
58
- false);
56
+ grpc_json_create_child(nullptr, json, "state", ConnectivityStateName(state),
57
+ GRPC_JSON_STRING, false);
59
58
  }
60
59
 
61
60
  grpc_json* SubchannelNode::RenderJson() {
@@ -24,7 +24,6 @@
24
24
  #include <grpc/impl/codegen/grpc_types.h>
25
25
 
26
26
  #include "src/core/ext/filters/client_channel/subchannel.h"
27
- #include "src/core/lib/gprpp/abstract.h"
28
27
 
29
28
  namespace grpc_core {
30
29
 
@@ -33,8 +32,7 @@ class ClientChannelFactory {
33
32
  virtual ~ClientChannelFactory() = default;
34
33
 
35
34
  // Creates a subchannel with the specified args.
36
- virtual Subchannel* CreateSubchannel(const grpc_channel_args* args)
37
- GRPC_ABSTRACT;
35
+ virtual Subchannel* CreateSubchannel(const grpc_channel_args* args) = 0;
38
36
 
39
37
  // Returns a channel arg containing the specified factory.
40
38
  static grpc_arg CreateChannelArg(ClientChannelFactory* factory);
@@ -42,8 +40,6 @@ class ClientChannelFactory {
42
40
  // Returns the factory from args, or null if not found.
43
41
  static ClientChannelFactory* GetFromChannelArgs(
44
42
  const grpc_channel_args* args);
45
-
46
- GRPC_ABSTRACT_BASE_CLASS
47
43
  };
48
44
 
49
45
  } // namespace grpc_core
@@ -47,12 +47,14 @@ HealthCheckClient::HealthCheckClient(
47
47
  const char* service_name,
48
48
  RefCountedPtr<ConnectedSubchannel> connected_subchannel,
49
49
  grpc_pollset_set* interested_parties,
50
- RefCountedPtr<channelz::SubchannelNode> channelz_node)
50
+ RefCountedPtr<channelz::SubchannelNode> channelz_node,
51
+ RefCountedPtr<ConnectivityStateWatcherInterface> watcher)
51
52
  : InternallyRefCounted<HealthCheckClient>(&grpc_health_check_client_trace),
52
53
  service_name_(service_name),
53
54
  connected_subchannel_(std::move(connected_subchannel)),
54
55
  interested_parties_(interested_parties),
55
56
  channelz_node_(std::move(channelz_node)),
57
+ watcher_(std::move(watcher)),
56
58
  retry_backoff_(
57
59
  BackOff::Options()
58
60
  .set_initial_backoff(
@@ -73,43 +75,21 @@ HealthCheckClient::~HealthCheckClient() {
73
75
  if (GRPC_TRACE_FLAG_ENABLED(grpc_health_check_client_trace)) {
74
76
  gpr_log(GPR_INFO, "destroying HealthCheckClient %p", this);
75
77
  }
76
- GRPC_ERROR_UNREF(error_);
77
- }
78
-
79
- void HealthCheckClient::NotifyOnHealthChange(grpc_connectivity_state* state,
80
- grpc_closure* closure) {
81
- MutexLock lock(&mu_);
82
- GPR_ASSERT(notify_state_ == nullptr);
83
- if (*state != state_) {
84
- *state = state_;
85
- GRPC_CLOSURE_SCHED(closure, GRPC_ERROR_REF(error_));
86
- return;
87
- }
88
- notify_state_ = state;
89
- on_health_changed_ = closure;
90
78
  }
91
79
 
92
80
  void HealthCheckClient::SetHealthStatus(grpc_connectivity_state state,
93
- grpc_error* error) {
81
+ const char* reason) {
94
82
  MutexLock lock(&mu_);
95
- SetHealthStatusLocked(state, error);
83
+ SetHealthStatusLocked(state, reason);
96
84
  }
97
85
 
98
86
  void HealthCheckClient::SetHealthStatusLocked(grpc_connectivity_state state,
99
- grpc_error* error) {
87
+ const char* reason) {
100
88
  if (GRPC_TRACE_FLAG_ENABLED(grpc_health_check_client_trace)) {
101
- gpr_log(GPR_INFO, "HealthCheckClient %p: setting state=%d error=%s", this,
102
- state, grpc_error_string(error));
103
- }
104
- if (notify_state_ != nullptr && *notify_state_ != state) {
105
- *notify_state_ = state;
106
- notify_state_ = nullptr;
107
- GRPC_CLOSURE_SCHED(on_health_changed_, GRPC_ERROR_REF(error));
108
- on_health_changed_ = nullptr;
89
+ gpr_log(GPR_INFO, "HealthCheckClient %p: setting state=%s reason=%s", this,
90
+ ConnectivityStateName(state), reason);
109
91
  }
110
- state_ = state;
111
- GRPC_ERROR_UNREF(error_);
112
- error_ = error;
92
+ if (watcher_ != nullptr) watcher_->Notify(state);
113
93
  }
114
94
 
115
95
  void HealthCheckClient::Orphan() {
@@ -118,13 +98,8 @@ void HealthCheckClient::Orphan() {
118
98
  }
119
99
  {
120
100
  MutexLock lock(&mu_);
121
- if (on_health_changed_ != nullptr) {
122
- *notify_state_ = GRPC_CHANNEL_SHUTDOWN;
123
- notify_state_ = nullptr;
124
- GRPC_CLOSURE_SCHED(on_health_changed_, GRPC_ERROR_NONE);
125
- on_health_changed_ = nullptr;
126
- }
127
101
  shutting_down_ = true;
102
+ watcher_.reset();
128
103
  call_state_.reset();
129
104
  if (retry_timer_callback_pending_) {
130
105
  grpc_timer_cancel(&retry_timer_);
@@ -141,7 +116,7 @@ void HealthCheckClient::StartCall() {
141
116
  void HealthCheckClient::StartCallLocked() {
142
117
  if (shutting_down_) return;
143
118
  GPR_ASSERT(call_state_ == nullptr);
144
- SetHealthStatusLocked(GRPC_CHANNEL_CONNECTING, GRPC_ERROR_NONE);
119
+ SetHealthStatusLocked(GRPC_CHANNEL_CONNECTING, "starting health watch");
145
120
  call_state_ = MakeOrphanable<CallState>(Ref(), interested_parties_);
146
121
  if (GRPC_TRACE_FLAG_ENABLED(grpc_health_check_client_trace)) {
147
122
  gpr_log(GPR_INFO, "HealthCheckClient %p: created CallState %p", this,
@@ -152,10 +127,8 @@ void HealthCheckClient::StartCallLocked() {
152
127
 
153
128
  void HealthCheckClient::StartRetryTimer() {
154
129
  MutexLock lock(&mu_);
155
- SetHealthStatusLocked(
156
- GRPC_CHANNEL_TRANSIENT_FAILURE,
157
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(
158
- "health check call failed; will retry after backoff"));
130
+ SetHealthStatusLocked(GRPC_CHANNEL_TRANSIENT_FAILURE,
131
+ "health check call failed; will retry after backoff");
159
132
  grpc_millis next_try = retry_backoff_.NextAttemptTime();
160
133
  if (GRPC_TRACE_FLAG_ENABLED(grpc_health_check_client_trace)) {
161
134
  gpr_log(GPR_INFO, "HealthCheckClient %p: health check call lost...", this);
@@ -489,10 +462,10 @@ void HealthCheckClient::CallState::DoneReadingRecvMessage(grpc_error* error) {
489
462
  const bool healthy = DecodeResponse(&recv_message_buffer_, &error);
490
463
  const grpc_connectivity_state state =
491
464
  healthy ? GRPC_CHANNEL_READY : GRPC_CHANNEL_TRANSIENT_FAILURE;
492
- if (error == GRPC_ERROR_NONE && !healthy) {
493
- error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("backend unhealthy");
494
- }
495
- health_check_client_->SetHealthStatus(state, error);
465
+ const char* reason = error == GRPC_ERROR_NONE && !healthy
466
+ ? "backend unhealthy"
467
+ : grpc_error_string(error);
468
+ health_check_client_->SetHealthStatus(state, reason);
496
469
  seen_response_.Store(true, MemoryOrder::RELEASE);
497
470
  grpc_slice_buffer_destroy_internal(&recv_message_buffer_);
498
471
  // Start another recv_message batch.
@@ -603,7 +576,7 @@ void HealthCheckClient::CallState::RecvTrailingMetadataReady(
603
576
  grpc_slice_from_static_string(kErrorMessage));
604
577
  }
605
578
  self->health_check_client_->SetHealthStatus(GRPC_CHANNEL_READY,
606
- GRPC_ERROR_NONE);
579
+ kErrorMessage);
607
580
  retry = false;
608
581
  }
609
582
  self->CallEnded(retry);
@@ -47,16 +47,11 @@ class HealthCheckClient : public InternallyRefCounted<HealthCheckClient> {
47
47
  HealthCheckClient(const char* service_name,
48
48
  RefCountedPtr<ConnectedSubchannel> connected_subchannel,
49
49
  grpc_pollset_set* interested_parties,
50
- RefCountedPtr<channelz::SubchannelNode> channelz_node);
50
+ RefCountedPtr<channelz::SubchannelNode> channelz_node,
51
+ RefCountedPtr<ConnectivityStateWatcherInterface> watcher);
51
52
 
52
53
  ~HealthCheckClient();
53
54
 
54
- // When the health state changes from *state, sets *state to the new
55
- // value and schedules closure.
56
- // Only one closure can be outstanding at a time.
57
- void NotifyOnHealthChange(grpc_connectivity_state* state,
58
- grpc_closure* closure);
59
-
60
55
  void Orphan() override;
61
56
 
62
57
  private:
@@ -151,9 +146,9 @@ class HealthCheckClient : public InternallyRefCounted<HealthCheckClient> {
151
146
  void StartRetryTimer();
152
147
  static void OnRetryTimer(void* arg, grpc_error* error);
153
148
 
154
- void SetHealthStatus(grpc_connectivity_state state, grpc_error* error);
149
+ void SetHealthStatus(grpc_connectivity_state state, const char* reason);
155
150
  void SetHealthStatusLocked(grpc_connectivity_state state,
156
- grpc_error* error); // Requires holding mu_.
151
+ const char* reason); // Requires holding mu_.
157
152
 
158
153
  const char* service_name_; // Do not own.
159
154
  RefCountedPtr<ConnectedSubchannel> connected_subchannel_;
@@ -161,10 +156,7 @@ class HealthCheckClient : public InternallyRefCounted<HealthCheckClient> {
161
156
  RefCountedPtr<channelz::SubchannelNode> channelz_node_;
162
157
 
163
158
  Mutex mu_;
164
- grpc_connectivity_state state_ = GRPC_CHANNEL_CONNECTING;
165
- grpc_error* error_ = GRPC_ERROR_NONE;
166
- grpc_connectivity_state* notify_state_ = nullptr;
167
- grpc_closure* on_health_changed_ = nullptr;
159
+ RefCountedPtr<ConnectivityStateWatcherInterface> watcher_;
168
160
  bool shutting_down_ = false;
169
161
 
170
162
  // The data associated with the current health check call. It holds a ref
@@ -356,5 +356,5 @@ void grpc_http_connect_register_handshaker_factory() {
356
356
  using namespace grpc_core;
357
357
  HandshakerRegistry::RegisterHandshakerFactory(
358
358
  true /* at_start */, HANDSHAKER_CLIENT,
359
- UniquePtr<HandshakerFactory>(New<HttpConnectHandshakerFactory>()));
359
+ MakeUnique<HttpConnectHandshakerFactory>());
360
360
  }
@@ -105,9 +105,8 @@ LoadBalancingPolicy::PickResult LoadBalancingPolicy::QueuePicker::Pick(
105
105
  if (!exit_idle_called_) {
106
106
  exit_idle_called_ = true;
107
107
  parent_->Ref().release(); // ref held by closure.
108
- GRPC_CLOSURE_SCHED(
109
- GRPC_CLOSURE_CREATE(&CallExitIdle, parent_.get(),
110
- grpc_combiner_scheduler(parent_->combiner())),
108
+ parent_->combiner()->Run(
109
+ GRPC_CLOSURE_CREATE(&CallExitIdle, parent_.get(), nullptr),
111
110
  GRPC_ERROR_NONE);
112
111
  }
113
112
  PickResult result;
@@ -21,10 +21,11 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <iterator>
25
+
24
26
  #include "src/core/ext/filters/client_channel/server_address.h"
25
27
  #include "src/core/ext/filters/client_channel/service_config.h"
26
28
  #include "src/core/ext/filters/client_channel/subchannel_interface.h"
27
- #include "src/core/lib/gprpp/abstract.h"
28
29
  #include "src/core/lib/gprpp/map.h"
29
30
  #include "src/core/lib/gprpp/orphanable.h"
30
31
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
@@ -109,23 +110,42 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
109
110
  /// automatically freed when the call is complete.
110
111
  /// It is more efficient to use this than to allocate memory directly
111
112
  /// for allocations that need to be made on a per-call basis.
112
- virtual void* Alloc(size_t size) GRPC_ABSTRACT;
113
+ virtual void* Alloc(size_t size) = 0;
113
114
 
114
115
  /// Returns the backend metric data returned by the server for the call,
115
116
  /// or null if no backend metric data was returned.
116
- virtual const BackendMetricData* GetBackendMetricData() GRPC_ABSTRACT;
117
-
118
- GRPC_ABSTRACT_BASE_CLASS
117
+ virtual const BackendMetricData* GetBackendMetricData() = 0;
119
118
  };
120
119
 
121
120
  /// Interface for accessing metadata.
122
121
  /// Implemented by the client channel and used by the SubchannelPicker.
123
122
  class MetadataInterface {
124
123
  public:
125
- // Implementations whose iterators fit in intptr_t may internally
126
- // cast this directly to their iterator type. Otherwise, they may
127
- // dynamically allocate their iterators and store the address here.
128
- typedef intptr_t Iterator;
124
+ class iterator
125
+ : public std::iterator<std::input_iterator_tag,
126
+ std::pair<StringView, StringView>, // value_type
127
+ std::ptrdiff_t, // difference_type
128
+ std::pair<StringView, StringView>*, // pointer
129
+ std::pair<StringView, StringView>& // reference
130
+ > {
131
+ public:
132
+ iterator(const MetadataInterface* md, intptr_t handle)
133
+ : md_(md), handle_(handle) {}
134
+ iterator& operator++() {
135
+ handle_ = md_->IteratorHandleNext(handle_);
136
+ return *this;
137
+ }
138
+ bool operator==(iterator other) const {
139
+ return md_ == other.md_ && handle_ == other.handle_;
140
+ }
141
+ bool operator!=(iterator other) const { return !(*this == other); }
142
+ value_type operator*() const { return md_->IteratorHandleGet(handle_); }
143
+
144
+ private:
145
+ friend class MetadataInterface;
146
+ const MetadataInterface* md_;
147
+ intptr_t handle_;
148
+ };
129
149
 
130
150
  virtual ~MetadataInterface() = default;
131
151
 
@@ -134,20 +154,25 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
134
154
  /// Implementations must ensure that the key and value remain alive
135
155
  /// until the call ends. If desired, they may be allocated via
136
156
  /// CallState::Alloc().
137
- virtual void Add(StringView key, StringView value) GRPC_ABSTRACT;
157
+ virtual void Add(StringView key, StringView value) = 0;
138
158
 
139
159
  /// Iteration interface.
140
- virtual Iterator Begin() const GRPC_ABSTRACT;
141
- virtual bool IsEnd(Iterator it) const GRPC_ABSTRACT;
142
- virtual void Next(Iterator* it) const GRPC_ABSTRACT;
143
- virtual StringView Key(Iterator it) const GRPC_ABSTRACT;
144
- virtual StringView Value(Iterator it) const GRPC_ABSTRACT;
160
+ virtual iterator begin() const = 0;
161
+ virtual iterator end() const = 0;
162
+
163
+ /// Removes the element pointed to by \a it.
164
+ /// Returns an iterator pointing to the next element.
165
+ virtual iterator erase(iterator it) = 0;
166
+
167
+ protected:
168
+ intptr_t GetIteratorHandle(const iterator& it) const { return it.handle_; }
145
169
 
146
- /// Removes the element pointed to by \a it, which is modified to
147
- /// point to the next element.
148
- virtual void Erase(Iterator* it) GRPC_ABSTRACT;
170
+ private:
171
+ friend class iterator;
149
172
 
150
- GRPC_ABSTRACT_BASE_CLASS
173
+ virtual intptr_t IteratorHandleNext(intptr_t handle) const = 0;
174
+ virtual std::pair<StringView /*key*/, StringView /*value */>
175
+ IteratorHandleGet(intptr_t handle) const = 0;
151
176
  };
152
177
 
153
178
  /// Arguments used when picking a subchannel for a call.
@@ -194,20 +219,14 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
194
219
 
195
220
  /// Used only if type is PICK_COMPLETE.
196
221
  /// Callback set by LB policy to be notified of trailing metadata.
197
- /// The user_data argument will be set to the
198
- /// recv_trailing_metadata_ready_user_data field.
199
- /// recv_trailing_metadata will be set to the metadata, which may be
200
- /// modified by the callback. The callback does not take ownership,
201
- /// however, so any data that needs to be used after returning must
202
- /// be copied.
203
- /// call_state can be used to obtain backend metric data.
204
- // TODO(roth): Replace grpc_error with something better before we allow
205
- // people outside of gRPC team to use this API.
206
- void (*recv_trailing_metadata_ready)(
207
- void* user_data, grpc_error* error,
208
- MetadataInterface* recv_trailing_metadata,
209
- CallState* call_state) = nullptr;
210
- void* recv_trailing_metadata_ready_user_data = nullptr;
222
+ /// If set by LB policy, the client channel will invoke the callback
223
+ /// when trailing metadata is returned.
224
+ /// The metadata may be modified by the callback. However, the callback
225
+ /// does not take ownership, so any data that needs to be used after
226
+ /// returning must be copied.
227
+ /// The call state can be used to obtain backend metric data.
228
+ std::function<void(grpc_error*, MetadataInterface*, CallState*)>
229
+ recv_trailing_metadata_ready;
211
230
  };
212
231
 
213
232
  /// A subchannel picker is the object used to pick the subchannel to
@@ -229,9 +248,7 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
229
248
  SubchannelPicker() = default;
230
249
  virtual ~SubchannelPicker() = default;
231
250
 
232
- virtual PickResult Pick(PickArgs args) GRPC_ABSTRACT;
233
-
234
- GRPC_ABSTRACT_BASE_CLASS
251
+ virtual PickResult Pick(PickArgs args) = 0;
235
252
  };
236
253
 
237
254
  /// A proxy object implemented by the client channel and used by the
@@ -246,22 +263,19 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
246
263
 
247
264
  /// Creates a new subchannel with the specified channel args.
248
265
  virtual RefCountedPtr<SubchannelInterface> CreateSubchannel(
249
- const grpc_channel_args& args) GRPC_ABSTRACT;
266
+ const grpc_channel_args& args) = 0;
250
267
 
251
268
  /// Sets the connectivity state and returns a new picker to be used
252
269
  /// by the client channel.
253
270
  virtual void UpdateState(grpc_connectivity_state state,
254
- UniquePtr<SubchannelPicker>) GRPC_ABSTRACT;
271
+ UniquePtr<SubchannelPicker>) = 0;
255
272
 
256
273
  /// Requests that the resolver re-resolve.
257
- virtual void RequestReresolution() GRPC_ABSTRACT;
274
+ virtual void RequestReresolution() = 0;
258
275
 
259
276
  /// Adds a trace message associated with the channel.
260
277
  enum TraceSeverity { TRACE_INFO, TRACE_WARNING, TRACE_ERROR };
261
- virtual void AddTraceEvent(TraceSeverity severity,
262
- StringView message) GRPC_ABSTRACT;
263
-
264
- GRPC_ABSTRACT_BASE_CLASS
278
+ virtual void AddTraceEvent(TraceSeverity severity, StringView message) = 0;
265
279
  };
266
280
 
267
281
  /// Interface for configuration data used by an LB policy implementation.
@@ -272,9 +286,7 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
272
286
  virtual ~Config() = default;
273
287
 
274
288
  // Returns the load balancing policy name
275
- virtual const char* name() const GRPC_ABSTRACT;
276
-
277
- GRPC_ABSTRACT_BASE_CLASS
289
+ virtual const char* name() const = 0;
278
290
  };
279
291
 
280
292
  /// Data passed to the UpdateLocked() method when new addresses and
@@ -301,7 +313,7 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
301
313
  // TODO(roth): Once we have a C++-like interface for combiners, this
302
314
  // API should change to take a smart pointer that does pass ownership
303
315
  // of a reference.
304
- grpc_combiner* combiner = nullptr;
316
+ Combiner* combiner = nullptr;
305
317
  /// Channel control helper.
306
318
  /// Note: LB policies MUST NOT call any method on the helper from
307
319
  /// their constructor.
@@ -319,12 +331,12 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
319
331
  LoadBalancingPolicy& operator=(const LoadBalancingPolicy&) = delete;
320
332
 
321
333
  /// Returns the name of the LB policy.
322
- virtual const char* name() const GRPC_ABSTRACT;
334
+ virtual const char* name() const = 0;
323
335
 
324
336
  /// Updates the policy with new data from the resolver. Will be invoked
325
337
  /// immediately after LB policy is constructed, and then again whenever
326
338
  /// the resolver returns a new result.
327
- virtual void UpdateLocked(UpdateArgs) GRPC_ABSTRACT; // NOLINT
339
+ virtual void UpdateLocked(UpdateArgs) = 0; // NOLINT
328
340
 
329
341
  /// Tries to enter a READY connectivity state.
330
342
  /// This is a no-op by default, since most LB policies never go into
@@ -332,7 +344,7 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
332
344
  virtual void ExitIdleLocked() {}
333
345
 
334
346
  /// Resets connection backoff.
335
- virtual void ResetBackoffLocked() GRPC_ABSTRACT;
347
+ virtual void ResetBackoffLocked() = 0;
336
348
 
337
349
  grpc_pollset_set* interested_parties() const { return interested_parties_; }
338
350
 
@@ -370,10 +382,8 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
370
382
  grpc_error* error_;
371
383
  };
372
384
 
373
- GRPC_ABSTRACT_BASE_CLASS
374
-
375
385
  protected:
376
- grpc_combiner* combiner() const { return combiner_; }
386
+ Combiner* combiner() const { return combiner_; }
377
387
 
378
388
  // Note: LB policies MUST NOT call any method on the helper from their
379
389
  // constructor.
@@ -382,11 +392,11 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
382
392
  }
383
393
 
384
394
  /// Shuts down the policy.
385
- virtual void ShutdownLocked() GRPC_ABSTRACT;
395
+ virtual void ShutdownLocked() = 0;
386
396
 
387
397
  private:
388
398
  /// Combiner under which LB policy actions take place.
389
- grpc_combiner* combiner_;
399
+ Combiner* combiner_;
390
400
  /// Owned pointer to interested parties in load balancing decisions.
391
401
  grpc_pollset_set* interested_parties_;
392
402
  /// Channel control helper.