grpc 1.37.1 → 1.38.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 (544) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +64 -58
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/channel_args.h +28 -0
  5. data/include/grpc/event_engine/event_engine.h +336 -0
  6. data/include/grpc/event_engine/port.h +39 -0
  7. data/include/grpc/event_engine/slice_allocator.h +81 -0
  8. data/include/grpc/grpc.h +2 -2
  9. data/include/grpc/grpc_security_constants.h +14 -0
  10. data/include/grpc/impl/codegen/grpc_types.h +11 -0
  11. data/include/grpc/impl/codegen/port_platform.h +5 -0
  12. data/include/grpc/module.modulemap +14 -14
  13. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  14. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  15. data/src/core/ext/filters/client_channel/client_channel.cc +628 -3101
  16. data/src/core/ext/filters/client_channel/client_channel.h +489 -55
  17. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  20. data/src/core/ext/filters/client_channel/connector.h +1 -1
  21. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
  22. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  23. data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
  24. data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
  26. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
  34. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
  35. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +36 -30
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +84 -61
  41. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  42. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  43. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver.h +2 -2
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -15
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -9
  55. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
  56. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  57. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +13 -11
  58. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  59. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +43 -28
  60. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  61. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  62. data/src/core/ext/filters/client_channel/retry_filter.cc +2188 -0
  63. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  64. data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
  65. data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
  66. data/src/core/ext/filters/client_channel/server_address.cc +1 -1
  67. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  68. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  69. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  70. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  71. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  72. data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
  73. data/src/core/ext/filters/client_channel/subchannel.h +7 -6
  74. data/src/core/ext/filters/client_idle/client_idle_filter.cc +16 -15
  75. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  76. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
  77. data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
  78. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  79. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
  80. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  81. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  82. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  83. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  84. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  85. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  86. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  87. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
  88. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  89. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  90. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
  91. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  92. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
  93. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
  94. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  95. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  96. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -2
  97. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  98. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -116
  99. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  100. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  101. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  102. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
  103. data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
  104. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  105. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
  106. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  107. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  108. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  109. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  110. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  111. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
  112. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  113. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  114. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  115. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
  116. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
  117. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  118. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  119. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  120. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  121. data/src/core/ext/transport/chttp2/transport/internal.h +31 -27
  122. data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
  123. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  124. data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
  125. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  126. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  127. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  128. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  129. data/src/core/ext/xds/xds_api.cc +101 -93
  130. data/src/core/ext/xds/xds_api.h +6 -6
  131. data/src/core/ext/xds/xds_bootstrap.cc +97 -159
  132. data/src/core/ext/xds/xds_bootstrap.h +19 -24
  133. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  134. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  135. data/src/core/ext/xds/xds_channel_args.h +5 -2
  136. data/src/core/ext/xds/xds_client.cc +310 -178
  137. data/src/core/ext/xds/xds_client.h +41 -27
  138. data/src/core/ext/xds/xds_client_stats.h +3 -2
  139. data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
  140. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  141. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  142. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +3 -20
  143. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +6 -11
  144. data/src/core/lib/channel/channel_stack.cc +10 -9
  145. data/src/core/lib/channel/channel_stack.h +10 -9
  146. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  147. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  148. data/src/core/lib/channel/channelz.cc +21 -13
  149. data/src/core/lib/channel/connected_channel.cc +4 -4
  150. data/src/core/lib/channel/handshaker.cc +7 -6
  151. data/src/core/lib/channel/handshaker.h +5 -5
  152. data/src/core/lib/event_engine/slice_allocator.cc +59 -0
  153. data/src/core/lib/event_engine/sockaddr.cc +38 -0
  154. data/src/core/lib/gprpp/ref_counted.h +28 -14
  155. data/src/core/lib/gprpp/status_helper.cc +407 -0
  156. data/src/core/lib/gprpp/status_helper.h +180 -0
  157. data/src/core/lib/http/httpcli.cc +11 -11
  158. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  159. data/src/core/lib/http/parser.cc +16 -16
  160. data/src/core/lib/http/parser.h +4 -4
  161. data/src/core/lib/iomgr/buffer_list.cc +7 -9
  162. data/src/core/lib/iomgr/buffer_list.h +4 -5
  163. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  164. data/src/core/lib/iomgr/call_combiner.h +12 -14
  165. data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
  166. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  167. data/src/core/lib/iomgr/closure.h +7 -6
  168. data/src/core/lib/iomgr/combiner.cc +14 -12
  169. data/src/core/lib/iomgr/combiner.h +2 -2
  170. data/src/core/lib/iomgr/endpoint.cc +1 -1
  171. data/src/core/lib/iomgr/endpoint.h +2 -2
  172. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  173. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  174. data/src/core/lib/iomgr/error.cc +167 -61
  175. data/src/core/lib/iomgr/error.h +217 -106
  176. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  177. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  178. data/src/core/lib/iomgr/error_internal.h +5 -1
  179. data/src/core/lib/iomgr/ev_apple.cc +5 -5
  180. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  181. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  182. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  183. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  184. data/src/core/lib/iomgr/ev_posix.h +9 -9
  185. data/src/core/lib/iomgr/exec_ctx.cc +4 -4
  186. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  187. data/src/core/lib/iomgr/executor.cc +8 -8
  188. data/src/core/lib/iomgr/executor.h +2 -2
  189. data/src/core/lib/iomgr/iomgr.cc +1 -1
  190. data/src/core/lib/iomgr/iomgr.h +1 -1
  191. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  192. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  193. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  194. data/src/core/lib/iomgr/iomgr_posix.cc +1 -1
  195. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  196. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  197. data/src/core/lib/iomgr/load_file.cc +4 -4
  198. data/src/core/lib/iomgr/load_file.h +2 -2
  199. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  200. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  201. data/src/core/lib/iomgr/pollset.cc +5 -5
  202. data/src/core/lib/iomgr/pollset.h +9 -9
  203. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  204. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  205. data/src/core/lib/iomgr/port.h +1 -1
  206. data/src/core/lib/iomgr/python_util.h +1 -1
  207. data/src/core/lib/iomgr/resolve_address.cc +3 -3
  208. data/src/core/lib/iomgr/resolve_address.h +6 -6
  209. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  210. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  211. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  212. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  213. data/src/core/lib/iomgr/resource_quota.cc +11 -10
  214. data/src/core/lib/iomgr/socket_utils_common_posix.cc +22 -20
  215. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  216. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  217. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  218. data/src/core/lib/iomgr/tcp_client_posix.cc +15 -17
  219. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  220. data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
  221. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  222. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  223. data/src/core/lib/iomgr/tcp_posix.cc +36 -34
  224. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  225. data/src/core/lib/iomgr/tcp_server.h +12 -11
  226. data/src/core/lib/iomgr/tcp_server_custom.cc +23 -21
  227. data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
  228. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  229. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
  230. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  231. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  232. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  233. data/src/core/lib/iomgr/tcp_uv.cc +25 -23
  234. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  235. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  236. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  237. data/src/core/lib/iomgr/timer_custom.h +1 -1
  238. data/src/core/lib/iomgr/timer_generic.cc +6 -6
  239. data/src/core/lib/iomgr/udp_server.cc +21 -20
  240. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  241. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  242. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  243. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  244. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  245. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  246. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  247. data/src/core/lib/iomgr/work_serializer.h +17 -1
  248. data/src/core/lib/json/json.h +1 -1
  249. data/src/core/lib/json/json_reader.cc +4 -4
  250. data/src/core/lib/matchers/matchers.cc +39 -39
  251. data/src/core/lib/matchers/matchers.h +28 -28
  252. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  253. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  254. data/src/core/lib/security/credentials/credentials.h +2 -2
  255. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  256. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  257. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  258. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  259. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  260. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  261. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  262. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  263. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  264. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  265. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  266. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  267. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -9
  268. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  269. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  270. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  271. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  272. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  273. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  274. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  275. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  276. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  277. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  278. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  279. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  280. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
  281. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  282. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  283. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  284. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  285. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  286. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  287. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  288. data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -4
  289. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  290. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  291. data/src/core/lib/security/security_connector/ssl_utils.cc +22 -4
  292. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  293. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
  294. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  295. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  296. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  297. data/src/core/lib/security/transport/security_handshaker.cc +33 -32
  298. data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
  299. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  300. data/src/core/lib/security/transport/tsi_error.h +2 -1
  301. data/src/core/lib/security/util/json_util.cc +2 -2
  302. data/src/core/lib/security/util/json_util.h +1 -1
  303. data/src/core/lib/surface/call.cc +46 -45
  304. data/src/core/lib/surface/call.h +2 -2
  305. data/src/core/lib/surface/channel.cc +6 -6
  306. data/src/core/lib/surface/channel.h +3 -2
  307. data/src/core/lib/surface/channel_ping.cc +1 -1
  308. data/src/core/lib/surface/completion_queue.cc +46 -47
  309. data/src/core/lib/surface/completion_queue.h +2 -1
  310. data/src/core/lib/surface/lame_client.cc +11 -11
  311. data/src/core/lib/surface/lame_client.h +1 -1
  312. data/src/core/lib/surface/server.cc +28 -22
  313. data/src/core/lib/surface/server.h +16 -15
  314. data/src/core/lib/surface/validate_metadata.cc +7 -7
  315. data/src/core/lib/surface/validate_metadata.h +3 -2
  316. data/src/core/lib/surface/version.cc +4 -2
  317. data/src/core/lib/transport/byte_stream.cc +5 -5
  318. data/src/core/lib/transport/byte_stream.h +8 -8
  319. data/src/core/lib/transport/connectivity_state.cc +1 -1
  320. data/src/core/lib/transport/error_utils.cc +19 -8
  321. data/src/core/lib/transport/error_utils.h +11 -5
  322. data/src/core/lib/transport/metadata_batch.cc +37 -37
  323. data/src/core/lib/transport/metadata_batch.h +19 -18
  324. data/src/core/lib/transport/transport.cc +4 -3
  325. data/src/core/lib/transport/transport.h +4 -4
  326. data/src/core/lib/transport/transport_op_string.cc +5 -5
  327. data/src/core/tsi/alts/crypt/gsec.h +4 -0
  328. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
  329. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  330. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  331. data/src/core/tsi/ssl_transport_security.cc +32 -14
  332. data/src/core/tsi/ssl_transport_security.h +3 -4
  333. data/src/ruby/bin/math_services_pb.rb +1 -1
  334. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  335. data/src/ruby/lib/grpc/version.rb +1 -1
  336. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  337. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  338. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  339. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  340. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  341. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  342. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  343. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  344. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  345. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  346. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  347. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  348. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  349. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  350. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  351. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  352. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  353. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  354. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  355. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  356. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  357. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  358. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  359. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  360. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  361. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  362. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  363. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  364. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  365. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  366. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  367. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  368. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  369. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  370. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  371. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  372. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  373. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  374. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  375. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  376. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  377. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  378. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  379. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  380. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  381. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  382. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  383. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  384. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  385. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  386. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  387. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  388. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  389. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  390. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  391. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  392. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  393. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  394. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  395. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  396. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  397. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  398. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  399. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  400. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  401. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  402. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  403. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  404. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  405. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  406. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  407. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  408. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  409. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  410. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  411. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  412. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  413. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  414. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  415. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  416. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  417. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  418. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  419. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  420. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  421. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  422. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  423. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  424. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  425. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  426. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  427. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  428. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  429. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  430. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  431. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  432. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  433. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  434. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  435. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  436. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  437. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  438. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  439. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  440. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  441. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  442. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  443. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  444. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  445. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  446. data/third_party/boringssl-with-bazel/err_data.c +477 -461
  447. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  448. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -1
  449. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  450. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  451. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  452. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  453. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  454. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  455. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  456. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  457. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  458. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  459. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  460. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
  461. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  462. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  463. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
  464. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  465. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  466. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  467. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  468. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  469. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +43 -46
  470. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
  471. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  472. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  473. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  474. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  475. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  476. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  477. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  478. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  479. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  480. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
  481. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
  482. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
  483. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +103 -42
  484. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +58 -37
  485. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  486. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  487. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  488. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +1 -1
  489. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  490. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  491. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
  499. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  501. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  502. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  503. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  504. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  505. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  506. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  507. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
  508. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  509. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -0
  510. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
  511. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  512. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  513. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -0
  514. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  515. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -38
  516. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  517. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  518. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
  519. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  520. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  521. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +185 -17
  522. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  523. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +416 -121
  524. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -0
  525. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
  526. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
  527. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
  528. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +43 -12
  529. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +149 -8
  530. data/third_party/boringssl-with-bazel/src/ssl/internal.h +220 -46
  531. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
  532. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  533. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  534. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +74 -15
  535. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +98 -64
  536. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
  537. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +205 -100
  538. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  539. metadata +68 -45
  540. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  541. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  542. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  543. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
@@ -1,76 +1,510 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
1
+ //
2
+ // Copyright 2015 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
18
16
 
19
17
  #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_H
20
18
  #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_H
21
19
 
22
20
  #include <grpc/support/port_platform.h>
23
21
 
24
- #include "src/core/ext/filters/client_channel/client_channel_channelz.h"
22
+ #include <map>
23
+ #include <memory>
24
+ #include <set>
25
+ #include <string>
26
+
27
+ #include "absl/status/status.h"
28
+ #include "absl/types/optional.h"
29
+
30
+ #include <grpc/support/log.h>
31
+
25
32
  #include "src/core/ext/filters/client_channel/client_channel_factory.h"
33
+ #include "src/core/ext/filters/client_channel/config_selector.h"
34
+ #include "src/core/ext/filters/client_channel/dynamic_filters.h"
35
+ #include "src/core/ext/filters/client_channel/lb_policy.h"
26
36
  #include "src/core/ext/filters/client_channel/resolver.h"
27
- #include "src/core/lib/channel/channel_stack.h"
37
+ #include "src/core/ext/filters/client_channel/resolver_result_parsing.h"
38
+ #include "src/core/ext/filters/client_channel/retry_throttle.h"
39
+ #include "src/core/ext/filters/client_channel/service_config.h"
40
+ #include "src/core/ext/filters/client_channel/subchannel.h"
41
+ #include "src/core/ext/filters/client_channel/subchannel_pool_interface.h"
42
+ #include "src/core/lib/gprpp/sync.h"
43
+ #include "src/core/lib/iomgr/error.h"
44
+ #include "src/core/lib/iomgr/polling_entity.h"
45
+ #include "src/core/lib/iomgr/work_serializer.h"
46
+ #include "src/core/lib/surface/channel.h"
47
+ #include "src/core/lib/transport/connectivity_state.h"
48
+
49
+ //
50
+ // Client channel filter
51
+ //
52
+
53
+ // A client channel is a channel that begins disconnected, and can connect
54
+ // to some endpoint on demand. If that endpoint disconnects, it will be
55
+ // connected to again later.
56
+ //
57
+ // Calls on a disconnected client channel are queued until a connection is
58
+ // established.
28
59
 
29
60
  // Channel arg key for server URI string.
30
61
  #define GRPC_ARG_SERVER_URI "grpc.server_uri"
31
62
 
32
- /* A client channel is a channel that begins disconnected, and can connect
33
- to some endpoint on demand. If that endpoint disconnects, it will be
34
- connected to again later.
63
+ // Channel arg containing a pointer to the ClientChannel object.
64
+ #define GRPC_ARG_CLIENT_CHANNEL "grpc.internal.client_channel"
65
+
66
+ // Channel arg containing a pointer to the ServiceConfig object.
67
+ #define GRPC_ARG_SERVICE_CONFIG_OBJ "grpc.internal.service_config_obj"
68
+
69
+ // Max number of batches that can be pending on a call at any given
70
+ // time. This includes one batch for each of the following ops:
71
+ // recv_initial_metadata
72
+ // send_initial_metadata
73
+ // recv_message
74
+ // send_message
75
+ // recv_trailing_metadata
76
+ // send_trailing_metadata
77
+ #define MAX_PENDING_BATCHES 6
78
+
79
+ namespace grpc_core {
80
+
81
+ class ClientChannel {
82
+ public:
83
+ static const grpc_channel_filter kFilterVtable;
84
+
85
+ class LoadBalancedCall;
86
+
87
+ // Returns the ClientChannel object from channel, or null if channel
88
+ // is not a client channel.
89
+ static ClientChannel* GetFromChannel(grpc_channel* channel);
90
+
91
+ grpc_connectivity_state CheckConnectivityState(bool try_to_connect);
92
+
93
+ // Starts a one-time connectivity state watch. When the channel's state
94
+ // becomes different from *state, sets *state to the new state and
95
+ // schedules on_complete. The watcher_timer_init callback is invoked as
96
+ // soon as the watch is actually started (i.e., after hopping into the
97
+ // client channel combiner). I/O will be serviced via pollent.
98
+ //
99
+ // This is intended to be used when starting a watch from outside of C-core
100
+ // via grpc_channel_watch_connectivity_state(). It should not be used
101
+ // by other callers.
102
+ void AddExternalConnectivityWatcher(grpc_polling_entity pollent,
103
+ grpc_connectivity_state* state,
104
+ grpc_closure* on_complete,
105
+ grpc_closure* watcher_timer_init) {
106
+ new ExternalConnectivityWatcher(this, pollent, state, on_complete,
107
+ watcher_timer_init);
108
+ }
109
+
110
+ // Cancels a pending external watcher previously added by
111
+ // AddExternalConnectivityWatcher().
112
+ void CancelExternalConnectivityWatcher(grpc_closure* on_complete) {
113
+ ExternalConnectivityWatcher::RemoveWatcherFromExternalWatchersMap(
114
+ this, on_complete, /*cancel=*/true);
115
+ }
116
+
117
+ int NumExternalConnectivityWatchers() const {
118
+ MutexLock lock(&external_watchers_mu_);
119
+ return static_cast<int>(external_watchers_.size());
120
+ }
121
+
122
+ // Starts and stops a connectivity watch. The watcher will be initially
123
+ // notified as soon as the state changes from initial_state and then on
124
+ // every subsequent state change until either the watch is stopped or
125
+ // it is notified that the state has changed to SHUTDOWN.
126
+ //
127
+ // This is intended to be used when starting watches from code inside of
128
+ // C-core (e.g., for a nested control plane channel for things like xds).
129
+ void AddConnectivityWatcher(
130
+ grpc_connectivity_state initial_state,
131
+ OrphanablePtr<AsyncConnectivityStateWatcherInterface> watcher);
132
+ void RemoveConnectivityWatcher(
133
+ AsyncConnectivityStateWatcherInterface* watcher);
134
+
135
+ RefCountedPtr<LoadBalancedCall> CreateLoadBalancedCall(
136
+ const grpc_call_element_args& args, grpc_polling_entity* pollent,
137
+ grpc_closure* on_call_destruction_complete);
138
+
139
+ private:
140
+ class CallData;
141
+ class ResolverResultHandler;
142
+ class SubchannelWrapper;
143
+ class ClientChannelControlHelper;
144
+ class ConnectivityWatcherAdder;
145
+ class ConnectivityWatcherRemover;
146
+
147
+ // Represents a pending connectivity callback from an external caller
148
+ // via grpc_client_channel_watch_connectivity_state().
149
+ class ExternalConnectivityWatcher : public ConnectivityStateWatcherInterface {
150
+ public:
151
+ ExternalConnectivityWatcher(ClientChannel* chand,
152
+ grpc_polling_entity pollent,
153
+ grpc_connectivity_state* state,
154
+ grpc_closure* on_complete,
155
+ grpc_closure* watcher_timer_init);
156
+
157
+ ~ExternalConnectivityWatcher() override;
158
+
159
+ // Removes the watcher from the external_watchers_ map.
160
+ static void RemoveWatcherFromExternalWatchersMap(ClientChannel* chand,
161
+ grpc_closure* on_complete,
162
+ bool cancel);
163
+
164
+ void Notify(grpc_connectivity_state state,
165
+ const absl::Status& /* status */) override;
166
+
167
+ void Cancel();
168
+
169
+ private:
170
+ // Adds the watcher to state_tracker_. Consumes the ref that is passed to it
171
+ // from Start().
172
+ void AddWatcherLocked()
173
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_);
174
+ void RemoveWatcherLocked()
175
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_);
176
+
177
+ ClientChannel* chand_;
178
+ grpc_polling_entity pollent_;
179
+ grpc_connectivity_state initial_state_;
180
+ grpc_connectivity_state* state_;
181
+ grpc_closure* on_complete_;
182
+ grpc_closure* watcher_timer_init_;
183
+ Atomic<bool> done_{false};
184
+ };
185
+
186
+ struct ResolverQueuedCall {
187
+ grpc_call_element* elem;
188
+ ResolverQueuedCall* next = nullptr;
189
+ };
190
+ struct LbQueuedCall {
191
+ LoadBalancedCall* lb_call;
192
+ LbQueuedCall* next = nullptr;
193
+ };
194
+
195
+ ClientChannel(grpc_channel_element_args* args, grpc_error_handle* error);
196
+ ~ClientChannel();
197
+
198
+ // Filter vtable functions.
199
+ static grpc_error_handle Init(grpc_channel_element* elem,
200
+ grpc_channel_element_args* args);
201
+ static void Destroy(grpc_channel_element* elem);
202
+ static void StartTransportOp(grpc_channel_element* elem,
203
+ grpc_transport_op* op);
204
+ static void GetChannelInfo(grpc_channel_element* elem,
205
+ const grpc_channel_info* info);
35
206
 
36
- Calls on a disconnected client channel are queued until a connection is
37
- established. */
207
+ // Note: Does NOT return a new ref.
208
+ grpc_error_handle disconnect_error() const {
209
+ return disconnect_error_.Load(MemoryOrder::ACQUIRE);
210
+ }
38
211
 
39
- extern const grpc_channel_filter grpc_client_channel_filter;
212
+ // Note: All methods with "Locked" suffix must be invoked from within
213
+ // work_serializer_.
40
214
 
41
- grpc_connectivity_state grpc_client_channel_check_connectivity_state(
42
- grpc_channel_element* elem, int try_to_connect);
215
+ void OnResolverResultChangedLocked(Resolver::Result result)
216
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_);
217
+ void OnResolverErrorLocked(grpc_error_handle error)
218
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_);
43
219
 
44
- int grpc_client_channel_num_external_connectivity_watchers(
45
- grpc_channel_element* elem);
220
+ void CreateOrUpdateLbPolicyLocked(
221
+ RefCountedPtr<LoadBalancingPolicy::Config> lb_policy_config,
222
+ Resolver::Result result) ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_);
223
+ OrphanablePtr<LoadBalancingPolicy> CreateLbPolicyLocked(
224
+ const grpc_channel_args& args)
225
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_);
226
+
227
+ void UpdateStateAndPickerLocked(
228
+ grpc_connectivity_state state, const absl::Status& status,
229
+ const char* reason,
230
+ std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker)
231
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_);
232
+
233
+ void UpdateServiceConfigInControlPlaneLocked(
234
+ RefCountedPtr<ServiceConfig> service_config,
235
+ RefCountedPtr<ConfigSelector> config_selector,
236
+ const internal::ClientChannelGlobalParsedConfig* parsed_service_config,
237
+ const char* lb_policy_name)
238
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_);
239
+
240
+ void UpdateServiceConfigInDataPlaneLocked()
241
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_);
242
+
243
+ void CreateResolverLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_);
244
+ void DestroyResolverAndLbPolicyLocked()
245
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_);
246
+
247
+ grpc_error_handle DoPingLocked(grpc_transport_op* op)
248
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_);
249
+
250
+ void StartTransportOpLocked(grpc_transport_op* op)
251
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_);
252
+
253
+ void TryToConnectLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_);
254
+
255
+ // These methods all require holding resolution_mu_.
256
+ void AddResolverQueuedCall(ResolverQueuedCall* call,
257
+ grpc_polling_entity* pollent)
258
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(resolution_mu_);
259
+ void RemoveResolverQueuedCall(ResolverQueuedCall* to_remove,
260
+ grpc_polling_entity* pollent)
261
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(resolution_mu_);
262
+
263
+ // These methods all require holding data_plane_mu_.
264
+ void AddLbQueuedCall(LbQueuedCall* call, grpc_polling_entity* pollent)
265
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(data_plane_mu_);
266
+ void RemoveLbQueuedCall(LbQueuedCall* to_remove, grpc_polling_entity* pollent)
267
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(data_plane_mu_);
268
+ RefCountedPtr<ConnectedSubchannel> GetConnectedSubchannelInDataPlane(
269
+ SubchannelInterface* subchannel) const
270
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(data_plane_mu_);
271
+
272
+ //
273
+ // Fields set at construction and never modified.
274
+ //
275
+ const bool deadline_checking_enabled_;
276
+ const bool enable_retries_;
277
+ grpc_channel_stack* owning_stack_;
278
+ ClientChannelFactory* client_channel_factory_;
279
+ const grpc_channel_args* channel_args_;
280
+ RefCountedPtr<ServiceConfig> default_service_config_;
281
+ std::string server_name_;
282
+ UniquePtr<char> target_uri_;
283
+ channelz::ChannelNode* channelz_node_;
284
+ grpc_pollset_set* interested_parties_;
285
+
286
+ //
287
+ // Fields related to name resolution. Guarded by resolution_mu_.
288
+ //
289
+ mutable Mutex resolution_mu_;
290
+ // Linked list of calls queued waiting for resolver result.
291
+ ResolverQueuedCall* resolver_queued_calls_ ABSL_GUARDED_BY(resolution_mu_) =
292
+ nullptr;
293
+ // Data from service config.
294
+ grpc_error_handle resolver_transient_failure_error_
295
+ ABSL_GUARDED_BY(resolution_mu_) = GRPC_ERROR_NONE;
296
+ bool received_service_config_data_ ABSL_GUARDED_BY(resolution_mu_) = false;
297
+ RefCountedPtr<ServiceConfig> service_config_ ABSL_GUARDED_BY(resolution_mu_);
298
+ RefCountedPtr<ConfigSelector> config_selector_
299
+ ABSL_GUARDED_BY(resolution_mu_);
300
+ RefCountedPtr<DynamicFilters> dynamic_filters_
301
+ ABSL_GUARDED_BY(resolution_mu_);
302
+
303
+ //
304
+ // Fields used in the data plane. Guarded by data_plane_mu_.
305
+ //
306
+ mutable Mutex data_plane_mu_;
307
+ std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker_
308
+ ABSL_GUARDED_BY(data_plane_mu_);
309
+ // Linked list of calls queued waiting for LB pick.
310
+ LbQueuedCall* lb_queued_calls_ ABSL_GUARDED_BY(data_plane_mu_) = nullptr;
311
+
312
+ //
313
+ // Fields used in the control plane. Guarded by work_serializer.
314
+ //
315
+ std::shared_ptr<WorkSerializer> work_serializer_;
316
+ ConnectivityStateTracker state_tracker_ ABSL_GUARDED_BY(work_serializer_);
317
+ OrphanablePtr<Resolver> resolver_ ABSL_GUARDED_BY(work_serializer_);
318
+ bool previous_resolution_contained_addresses_
319
+ ABSL_GUARDED_BY(work_serializer_) = false;
320
+ RefCountedPtr<ServiceConfig> saved_service_config_
321
+ ABSL_GUARDED_BY(work_serializer_);
322
+ RefCountedPtr<ConfigSelector> saved_config_selector_
323
+ ABSL_GUARDED_BY(work_serializer_);
324
+ absl::optional<std::string> health_check_service_name_
325
+ ABSL_GUARDED_BY(work_serializer_);
326
+ OrphanablePtr<LoadBalancingPolicy> lb_policy_
327
+ ABSL_GUARDED_BY(work_serializer_);
328
+ RefCountedPtr<SubchannelPoolInterface> subchannel_pool_
329
+ ABSL_GUARDED_BY(work_serializer_);
330
+ // The number of SubchannelWrapper instances referencing a given Subchannel.
331
+ std::map<Subchannel*, int> subchannel_refcount_map_
332
+ ABSL_GUARDED_BY(work_serializer_);
333
+ // The set of SubchannelWrappers that currently exist.
334
+ // No need to hold a ref, since the map is updated in the control-plane
335
+ // work_serializer when the SubchannelWrappers are created and destroyed.
336
+ std::set<SubchannelWrapper*> subchannel_wrappers_
337
+ ABSL_GUARDED_BY(work_serializer_);
338
+ // Pending ConnectedSubchannel updates for each SubchannelWrapper.
339
+ // Updates are queued here in the control plane work_serializer and then
340
+ // applied in the data plane mutex when the picker is updated.
341
+ std::map<RefCountedPtr<SubchannelWrapper>, RefCountedPtr<ConnectedSubchannel>>
342
+ pending_subchannel_updates_ ABSL_GUARDED_BY(work_serializer_);
343
+ int keepalive_time_ ABSL_GUARDED_BY(work_serializer_) = -1;
344
+
345
+ //
346
+ // Fields accessed from both data plane mutex and control plane
347
+ // work_serializer.
348
+ //
349
+ Atomic<grpc_error_handle> disconnect_error_;
350
+
351
+ //
352
+ // Fields guarded by a mutex, since they need to be accessed
353
+ // synchronously via get_channel_info().
354
+ //
355
+ Mutex info_mu_;
356
+ UniquePtr<char> info_lb_policy_name_ ABSL_GUARDED_BY(info_mu_);
357
+ UniquePtr<char> info_service_config_json_ ABSL_GUARDED_BY(info_mu_);
358
+
359
+ //
360
+ // Fields guarded by a mutex, since they need to be accessed
361
+ // synchronously via grpc_channel_num_external_connectivity_watchers().
362
+ //
363
+ mutable Mutex external_watchers_mu_;
364
+ std::map<grpc_closure*, RefCountedPtr<ExternalConnectivityWatcher>>
365
+ external_watchers_ ABSL_GUARDED_BY(external_watchers_mu_);
366
+ };
46
367
 
47
- // Starts a one-time connectivity state watch. When the channel's state
48
- // becomes different from *state, sets *state to the new state and
49
- // schedules on_complete. The watcher_timer_init callback is invoked as
50
- // soon as the watch is actually started (i.e., after hopping into the
51
- // client channel combiner). I/O will be serviced via pollent.
52
368
  //
53
- // This is intended to be used when starting a watch from outside of C-core
54
- // via grpc_channel_watch_connectivity_state(). It should not be used
55
- // by other callers.
56
- void grpc_client_channel_watch_connectivity_state(
57
- grpc_channel_element* elem, grpc_polling_entity pollent,
58
- grpc_connectivity_state* state, grpc_closure* on_complete,
59
- grpc_closure* watcher_timer_init);
60
-
61
- // Starts and stops a connectivity watch. The watcher will be initially
62
- // notified as soon as the state changes from initial_state and then on
63
- // every subsequent state change until either the watch is stopped or
64
- // it is notified that the state has changed to SHUTDOWN.
369
+ // ClientChannel::LoadBalancedCall
65
370
  //
66
- // This is intended to be used when starting watches from code inside of
67
- // C-core (e.g., for a nested control plane channel for things like xds).
68
- void grpc_client_channel_start_connectivity_watch(
69
- grpc_channel_element* elem, grpc_connectivity_state initial_state,
70
- grpc_core::OrphanablePtr<grpc_core::AsyncConnectivityStateWatcherInterface>
71
- watcher);
72
- void grpc_client_channel_stop_connectivity_watch(
73
- grpc_channel_element* elem,
74
- grpc_core::AsyncConnectivityStateWatcherInterface* watcher);
371
+
372
+ // This object is ref-counted, but it cannot inherit from RefCounted<>,
373
+ // because it is allocated on the arena and can't free its memory when
374
+ // its refcount goes to zero. So instead, it manually implements the
375
+ // same API as RefCounted<>, so that it can be used with RefCountedPtr<>.
376
+ class ClientChannel::LoadBalancedCall
377
+ : public RefCounted<LoadBalancedCall, PolymorphicRefCount, kUnrefCallDtor> {
378
+ public:
379
+ // If on_call_destruction_complete is non-null, then it will be
380
+ // invoked once the LoadBalancedCall is completely destroyed.
381
+ // If it is null, then the caller is responsible for checking whether
382
+ // the LB call has a subchannel call and ensuring that the
383
+ // on_call_destruction_complete closure passed down from the surface
384
+ // is not invoked until after the subchannel call stack is destroyed.
385
+ LoadBalancedCall(ClientChannel* chand, const grpc_call_element_args& args,
386
+ grpc_polling_entity* pollent,
387
+ grpc_closure* on_call_destruction_complete);
388
+ ~LoadBalancedCall() override;
389
+
390
+ void StartTransportStreamOpBatch(grpc_transport_stream_op_batch* batch);
391
+
392
+ // Invoked by channel for queued LB picks when the picker is updated.
393
+ static void PickSubchannel(void* arg, grpc_error_handle error);
394
+ // Helper function for performing an LB pick while holding the data plane
395
+ // mutex. Returns true if the pick is complete, in which case the caller
396
+ // must invoke PickDone() or AsyncPickDone() with the returned error.
397
+ bool PickSubchannelLocked(grpc_error_handle* error)
398
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_);
399
+ // Schedules a callback to process the completed pick. The callback
400
+ // will not run until after this method returns.
401
+ void AsyncPickDone(grpc_error_handle error);
402
+
403
+ RefCountedPtr<SubchannelCall> subchannel_call() const {
404
+ return subchannel_call_;
405
+ }
406
+
407
+ private:
408
+ class LbQueuedCallCanceller;
409
+ class Metadata;
410
+ class LbCallState;
411
+
412
+ // Returns the index into pending_batches_ to be used for batch.
413
+ static size_t GetBatchIndex(grpc_transport_stream_op_batch* batch);
414
+ void PendingBatchesAdd(grpc_transport_stream_op_batch* batch);
415
+ static void FailPendingBatchInCallCombiner(void* arg,
416
+ grpc_error_handle error);
417
+ // A predicate type and some useful implementations for PendingBatchesFail().
418
+ typedef bool (*YieldCallCombinerPredicate)(
419
+ const CallCombinerClosureList& closures);
420
+ static bool YieldCallCombiner(const CallCombinerClosureList& /*closures*/) {
421
+ return true;
422
+ }
423
+ static bool NoYieldCallCombiner(const CallCombinerClosureList& /*closures*/) {
424
+ return false;
425
+ }
426
+ static bool YieldCallCombinerIfPendingBatchesFound(
427
+ const CallCombinerClosureList& closures) {
428
+ return closures.size() > 0;
429
+ }
430
+ // Fails all pending batches.
431
+ // If yield_call_combiner_predicate returns true, assumes responsibility for
432
+ // yielding the call combiner.
433
+ void PendingBatchesFail(
434
+ grpc_error_handle error,
435
+ YieldCallCombinerPredicate yield_call_combiner_predicate);
436
+ static void ResumePendingBatchInCallCombiner(void* arg,
437
+ grpc_error_handle ignored);
438
+ // Resumes all pending batches on subchannel_call_.
439
+ void PendingBatchesResume();
440
+
441
+ static void RecvTrailingMetadataReadyForLoadBalancingPolicy(
442
+ void* arg, grpc_error_handle error);
443
+ void InjectRecvTrailingMetadataReadyForLoadBalancingPolicy(
444
+ grpc_transport_stream_op_batch* batch);
445
+
446
+ void CreateSubchannelCall();
447
+ // Invoked when a pick is completed, on both success or failure.
448
+ static void PickDone(void* arg, grpc_error_handle error);
449
+ // Removes the call from the channel's list of queued picks if present.
450
+ void MaybeRemoveCallFromLbQueuedCallsLocked()
451
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_);
452
+ // Adds the call to the channel's list of queued picks if not already present.
453
+ void MaybeAddCallToLbQueuedCallsLocked()
454
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_);
455
+
456
+ ClientChannel* chand_;
457
+
458
+ // TODO(roth): Instead of duplicating these fields in every filter
459
+ // that uses any one of them, we should store them in the call
460
+ // context. This will save per-call memory overhead.
461
+ grpc_slice path_; // Request path.
462
+ gpr_cycle_counter call_start_time_;
463
+ grpc_millis deadline_;
464
+ Arena* arena_;
465
+ grpc_call_stack* owning_call_;
466
+ CallCombiner* call_combiner_;
467
+ grpc_call_context_element* call_context_;
468
+ grpc_polling_entity* pollent_;
469
+ grpc_closure* on_call_destruction_complete_;
470
+
471
+ // Set when we get a cancel_stream op.
472
+ grpc_error_handle cancel_error_ = GRPC_ERROR_NONE;
473
+
474
+ // Set when we fail inside the LB call.
475
+ grpc_error_handle failure_error_ = GRPC_ERROR_NONE;
476
+
477
+ grpc_closure pick_closure_;
478
+
479
+ // Accessed while holding ClientChannel::data_plane_mu_.
480
+ ClientChannel::LbQueuedCall queued_call_
481
+ ABSL_GUARDED_BY(&ClientChannel::data_plane_mu_);
482
+ bool queued_pending_lb_pick_ ABSL_GUARDED_BY(&ClientChannel::data_plane_mu_) =
483
+ false;
484
+ LbQueuedCallCanceller* lb_call_canceller_
485
+ ABSL_GUARDED_BY(&ClientChannel::data_plane_mu_) = nullptr;
486
+
487
+ RefCountedPtr<ConnectedSubchannel> connected_subchannel_;
488
+ const LoadBalancingPolicy::BackendMetricData* backend_metric_data_ = nullptr;
489
+ std::function<void(grpc_error_handle, LoadBalancingPolicy::MetadataInterface*,
490
+ LoadBalancingPolicy::CallState*)>
491
+ lb_recv_trailing_metadata_ready_;
492
+
493
+ RefCountedPtr<SubchannelCall> subchannel_call_;
494
+
495
+ // For intercepting recv_trailing_metadata_ready for the LB policy.
496
+ grpc_metadata_batch* recv_trailing_metadata_ = nullptr;
497
+ grpc_closure recv_trailing_metadata_ready_;
498
+ grpc_closure* original_recv_trailing_metadata_ready_ = nullptr;
499
+
500
+ // Batches are added to this list when received from above.
501
+ // They are removed when we are done handling the batch (i.e., when
502
+ // either we have invoked all of the batch's callbacks or we have
503
+ // passed the batch down to the subchannel call and are not
504
+ // intercepting any of its callbacks).
505
+ grpc_transport_stream_op_batch* pending_batches_[MAX_PENDING_BATCHES] = {};
506
+ };
507
+
508
+ } // namespace grpc_core
75
509
 
76
510
  #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_H