grpc 1.18.0 → 1.22.0

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

Potentially problematic release.


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

Files changed (428) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +4731 -7404
  3. data/etc/roots.pem +146 -0
  4. data/include/grpc/grpc.h +11 -6
  5. data/include/grpc/grpc_security.h +297 -4
  6. data/include/grpc/grpc_security_constants.h +1 -1
  7. data/include/grpc/impl/codegen/byte_buffer.h +13 -0
  8. data/include/grpc/impl/codegen/gpr_types.h +1 -1
  9. data/include/grpc/impl/codegen/grpc_types.h +30 -7
  10. data/include/grpc/impl/codegen/port_platform.h +88 -7
  11. data/include/grpc/impl/codegen/slice.h +2 -22
  12. data/include/grpc/impl/codegen/status.h +2 -1
  13. data/include/grpc/impl/codegen/sync_posix.h +18 -0
  14. data/include/grpc/slice.h +3 -3
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +21 -16
  16. data/src/core/ext/filters/client_channel/backup_poller.h +8 -2
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +3 -1
  18. data/src/core/ext/filters/client_channel/client_channel.cc +2435 -1557
  19. data/src/core/ext/filters/client_channel/client_channel.h +2 -10
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -89
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +8 -33
  22. data/src/core/ext/filters/client_channel/client_channel_factory.cc +22 -34
  23. data/src/core/ext/filters/client_channel/client_channel_factory.h +19 -38
  24. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -11
  25. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +179 -0
  26. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +68 -0
  27. data/src/core/ext/filters/client_channel/health/health_check_client.cc +59 -55
  28. data/src/core/ext/filters/client_channel/health/health_check_client.h +20 -9
  29. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +146 -157
  30. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +29 -32
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +844 -859
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +3 -1
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +2 -6
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +6 -2
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +14 -12
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +16 -12
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +3 -3
  39. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +185 -312
  40. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +143 -375
  41. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +192 -245
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +1554 -955
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc +0 -43
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +14 -10
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +2 -2
  46. data/src/core/ext/filters/client_channel/lb_policy.cc +115 -22
  47. data/src/core/ext/filters/client_channel/lb_policy.h +260 -129
  48. data/src/core/ext/filters/client_channel/lb_policy_factory.h +5 -2
  49. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +107 -4
  50. data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -3
  51. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +96 -0
  52. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +56 -0
  53. data/src/core/ext/filters/client_channel/parse_address.cc +24 -5
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +121 -122
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +84 -2
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +179 -0
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +24 -10
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +111 -47
  60. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +7 -13
  61. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +39 -0
  63. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +0 -6
  64. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -64
  65. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +28 -0
  66. data/src/core/{lib/iomgr/network_status_tracker.cc → ext/filters/client_channel/resolver/dns/dns_resolver_selection.h} +8 -15
  67. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +36 -82
  68. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +111 -72
  69. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +13 -8
  70. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +28 -63
  71. data/src/core/ext/filters/client_channel/resolver.cc +54 -1
  72. data/src/core/ext/filters/client_channel/resolver.h +52 -23
  73. data/src/core/ext/filters/client_channel/resolver_factory.h +3 -1
  74. data/src/core/ext/filters/client_channel/resolver_registry.cc +5 -2
  75. data/src/core/ext/filters/client_channel/resolver_registry.h +5 -4
  76. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +368 -241
  77. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +58 -76
  78. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +543 -0
  79. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +139 -0
  80. data/src/core/ext/filters/client_channel/server_address.cc +4 -54
  81. data/src/core/ext/filters/client_channel/server_address.h +1 -13
  82. data/src/core/ext/filters/client_channel/service_config.cc +329 -0
  83. data/src/core/ext/filters/client_channel/service_config.h +205 -0
  84. data/src/core/ext/filters/client_channel/subchannel.cc +803 -838
  85. data/src/core/ext/filters/client_channel/subchannel.h +295 -128
  86. data/src/core/ext/filters/client_channel/subchannel_interface.h +113 -0
  87. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +97 -0
  88. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +94 -0
  89. data/src/core/ext/filters/deadline/deadline_filter.cc +3 -4
  90. data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
  91. data/src/core/ext/filters/http/client/http_client_filter.cc +7 -5
  92. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  93. data/src/core/ext/filters/http/client_authority_filter.cc +6 -3
  94. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +4 -3
  95. data/src/core/ext/filters/http/server/http_server_filter.cc +18 -12
  96. data/src/core/ext/filters/max_age/max_age_filter.cc +5 -2
  97. data/src/core/ext/filters/message_size/message_size_filter.cc +119 -77
  98. data/src/core/ext/filters/message_size/message_size_filter.h +33 -0
  99. data/src/core/ext/transport/chttp2/alpn/alpn.h +1 -1
  100. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +13 -12
  101. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +45 -47
  102. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +134 -143
  103. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +68 -21
  104. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -4
  105. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +4 -4
  106. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +7 -6
  107. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +4 -3
  108. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +9 -7
  109. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +156 -94
  110. data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -2
  111. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
  112. data/src/core/ext/transport/chttp2/transport/frame_data.cc +33 -37
  113. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  114. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +6 -5
  115. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -2
  116. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -4
  117. data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -1
  118. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +8 -6
  119. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -1
  120. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -4
  121. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
  122. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -6
  123. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +1 -1
  124. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +74 -55
  125. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +33 -11
  126. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -2
  127. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +7 -14
  128. data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -1
  129. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +9 -5
  130. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +9 -3
  131. data/src/core/ext/transport/chttp2/transport/internal.h +43 -30
  132. data/src/core/ext/transport/chttp2/transport/parsing.cc +52 -70
  133. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
  134. data/src/core/ext/transport/chttp2/transport/writing.cc +70 -33
  135. data/src/core/ext/transport/inproc/inproc_transport.cc +26 -18
  136. data/src/core/lib/channel/channel_args.cc +2 -101
  137. data/src/core/lib/channel/channel_args.h +3 -37
  138. data/src/core/lib/channel/channel_stack.h +10 -6
  139. data/src/core/lib/channel/channel_trace.cc +4 -4
  140. data/src/core/lib/channel/channel_trace.h +4 -4
  141. data/src/core/lib/channel/channelz.cc +168 -38
  142. data/src/core/lib/channel/channelz.h +40 -44
  143. data/src/core/lib/channel/channelz_registry.cc +75 -107
  144. data/src/core/lib/channel/channelz_registry.h +10 -28
  145. data/src/core/lib/channel/connected_channel.cc +2 -2
  146. data/src/core/lib/channel/context.h +2 -2
  147. data/src/core/lib/channel/handshaker.cc +151 -218
  148. data/src/core/lib/channel/handshaker.h +110 -101
  149. data/src/core/lib/channel/handshaker_factory.h +11 -19
  150. data/src/core/lib/channel/handshaker_registry.cc +67 -51
  151. data/src/core/lib/channel/handshaker_registry.h +21 -16
  152. data/src/core/lib/compression/algorithm_metadata.h +3 -3
  153. data/src/core/lib/compression/compression.cc +14 -9
  154. data/src/core/lib/compression/compression_args.cc +127 -0
  155. data/src/core/lib/compression/compression_args.h +55 -0
  156. data/src/core/lib/compression/compression_internal.cc +16 -12
  157. data/src/core/lib/compression/compression_internal.h +1 -1
  158. data/src/core/lib/compression/stream_compression.cc +3 -2
  159. data/src/core/lib/compression/stream_compression.h +2 -2
  160. data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
  161. data/src/core/lib/debug/trace.cc +13 -7
  162. data/src/core/lib/debug/trace.h +14 -1
  163. data/src/core/lib/gpr/arena.h +13 -9
  164. data/src/core/lib/gpr/cpu_posix.cc +5 -3
  165. data/src/core/lib/gpr/env.h +3 -6
  166. data/src/core/lib/gpr/env_linux.cc +6 -1
  167. data/src/core/lib/gpr/env_posix.cc +5 -0
  168. data/src/core/lib/gpr/env_windows.cc +7 -5
  169. data/src/core/lib/gpr/log.cc +9 -13
  170. data/src/core/lib/gpr/log_posix.cc +2 -1
  171. data/src/core/lib/gpr/string.cc +20 -7
  172. data/src/core/lib/gpr/string.h +10 -3
  173. data/src/core/lib/gpr/sync_posix.cc +65 -4
  174. data/src/core/lib/gpr/time.cc +8 -0
  175. data/src/core/lib/gpr/time_posix.cc +21 -2
  176. data/src/core/lib/gprpp/arena.cc +103 -0
  177. data/src/core/lib/gprpp/arena.h +121 -0
  178. data/src/core/lib/gprpp/atomic.h +75 -5
  179. data/src/core/lib/gprpp/fork.cc +13 -32
  180. data/src/core/lib/gprpp/fork.h +5 -1
  181. data/src/core/lib/gprpp/global_config.h +96 -0
  182. data/src/core/lib/gprpp/global_config_custom.h +29 -0
  183. data/src/core/lib/gprpp/global_config_env.cc +135 -0
  184. data/src/core/lib/gprpp/global_config_env.h +131 -0
  185. data/src/core/lib/gprpp/global_config_generic.h +44 -0
  186. data/src/core/lib/gprpp/inlined_vector.h +8 -0
  187. data/src/core/lib/gprpp/map.h +436 -0
  188. data/src/core/lib/gprpp/memory.h +2 -2
  189. data/src/core/lib/gprpp/optional.h +48 -0
  190. data/src/core/lib/gprpp/orphanable.h +6 -5
  191. data/src/core/lib/gprpp/{mutex_lock.h → pair.h} +15 -19
  192. data/src/core/lib/gprpp/ref_counted.h +36 -17
  193. data/src/core/lib/gprpp/sync.h +126 -0
  194. data/src/core/lib/gprpp/thd.h +42 -7
  195. data/src/core/lib/gprpp/thd_posix.cc +31 -13
  196. data/src/core/lib/gprpp/thd_windows.cc +47 -34
  197. data/src/core/lib/http/httpcli.cc +6 -5
  198. data/src/core/lib/http/httpcli_security_connector.cc +13 -15
  199. data/src/core/lib/http/parser.cc +3 -2
  200. data/src/core/lib/http/parser.h +2 -1
  201. data/src/core/lib/iomgr/buffer_list.cc +182 -24
  202. data/src/core/lib/iomgr/buffer_list.h +72 -10
  203. data/src/core/lib/iomgr/call_combiner.cc +84 -90
  204. data/src/core/lib/iomgr/call_combiner.h +75 -82
  205. data/src/core/lib/iomgr/cfstream_handle.cc +203 -0
  206. data/src/core/lib/iomgr/cfstream_handle.h +86 -0
  207. data/src/core/lib/iomgr/combiner.cc +11 -3
  208. data/src/core/lib/iomgr/combiner.h +1 -1
  209. data/src/core/lib/iomgr/endpoint.cc +2 -2
  210. data/src/core/lib/iomgr/endpoint.h +3 -2
  211. data/src/core/lib/iomgr/endpoint_cfstream.cc +375 -0
  212. data/src/core/lib/iomgr/endpoint_cfstream.h +49 -0
  213. data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
  214. data/src/core/lib/iomgr/error.cc +21 -17
  215. data/src/core/lib/iomgr/error.h +36 -6
  216. data/src/core/lib/iomgr/error_cfstream.cc +52 -0
  217. data/src/core/lib/iomgr/error_cfstream.h +31 -0
  218. data/src/core/lib/iomgr/error_internal.h +1 -1
  219. data/src/core/lib/iomgr/ev_epoll1_linux.cc +44 -28
  220. data/src/core/lib/iomgr/ev_epollex_linux.cc +173 -194
  221. data/src/core/lib/iomgr/ev_poll_posix.cc +16 -487
  222. data/src/core/lib/iomgr/ev_posix.cc +29 -19
  223. data/src/core/lib/iomgr/ev_posix.h +19 -3
  224. data/src/core/lib/iomgr/ev_windows.cc +2 -2
  225. data/src/core/lib/iomgr/exec_ctx.cc +1 -0
  226. data/src/core/lib/iomgr/exec_ctx.h +137 -8
  227. data/src/core/lib/iomgr/executor.cc +147 -95
  228. data/src/core/lib/iomgr/executor.h +55 -49
  229. data/src/core/lib/iomgr/fork_posix.cc +6 -5
  230. data/src/core/lib/{gprpp/atomic_with_std.h → iomgr/grpc_if_nametoindex.h} +8 -13
  231. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +42 -0
  232. data/src/core/lib/iomgr/{network_status_tracker.h → grpc_if_nametoindex_unsupported.cc} +15 -9
  233. data/src/core/lib/iomgr/internal_errqueue.cc +3 -5
  234. data/src/core/lib/iomgr/internal_errqueue.h +105 -3
  235. data/src/core/lib/iomgr/iomgr.cc +20 -13
  236. data/src/core/lib/iomgr/iomgr.h +15 -0
  237. data/src/core/lib/iomgr/iomgr_custom.cc +17 -3
  238. data/src/core/lib/iomgr/iomgr_custom.h +2 -0
  239. data/src/core/lib/iomgr/iomgr_internal.cc +10 -0
  240. data/src/core/lib/iomgr/iomgr_internal.h +12 -0
  241. data/src/core/lib/iomgr/iomgr_posix.cc +19 -2
  242. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +93 -0
  243. data/src/core/lib/iomgr/iomgr_windows.cc +18 -2
  244. data/src/core/lib/iomgr/lockfree_event.cc +4 -4
  245. data/src/core/lib/iomgr/port.h +35 -0
  246. data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
  247. data/src/core/lib/iomgr/resolve_address_windows.cc +2 -1
  248. data/src/core/lib/iomgr/resource_quota.cc +40 -37
  249. data/src/core/lib/iomgr/socket_utils_common_posix.cc +6 -2
  250. data/src/core/lib/iomgr/socket_windows.cc +19 -0
  251. data/src/core/lib/iomgr/socket_windows.h +8 -0
  252. data/src/core/lib/iomgr/tcp_client_cfstream.cc +216 -0
  253. data/src/core/lib/iomgr/tcp_client_custom.cc +2 -2
  254. data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
  255. data/src/core/lib/iomgr/tcp_client_windows.cc +7 -5
  256. data/src/core/lib/iomgr/tcp_custom.cc +10 -14
  257. data/src/core/lib/iomgr/tcp_posix.cc +256 -140
  258. data/src/core/lib/iomgr/tcp_server.cc +5 -0
  259. data/src/core/lib/iomgr/tcp_server.h +24 -0
  260. data/src/core/lib/iomgr/tcp_server_custom.cc +14 -12
  261. data/src/core/lib/iomgr/tcp_server_posix.cc +86 -12
  262. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
  263. data/src/core/lib/iomgr/tcp_server_windows.cc +13 -11
  264. data/src/core/lib/iomgr/tcp_uv.cc +5 -7
  265. data/src/core/lib/iomgr/tcp_windows.cc +8 -14
  266. data/src/core/lib/iomgr/timer.h +2 -1
  267. data/src/core/lib/iomgr/timer_generic.cc +16 -16
  268. data/src/core/lib/iomgr/timer_manager.cc +20 -11
  269. data/src/core/lib/iomgr/udp_server.cc +8 -6
  270. data/src/core/lib/iomgr/wakeup_fd_posix.cc +1 -19
  271. data/src/core/lib/json/json.cc +1 -4
  272. data/src/core/lib/profiling/basic_timers.cc +10 -4
  273. data/src/core/lib/security/context/security_context.cc +6 -7
  274. data/src/core/lib/security/context/security_context.h +3 -4
  275. data/src/core/lib/security/credentials/alts/alts_credentials.cc +1 -1
  276. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
  277. data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -0
  278. data/src/core/lib/security/credentials/credentials.h +9 -1
  279. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +15 -3
  280. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -0
  281. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  282. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +2 -1
  283. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +10 -6
  284. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -1
  285. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +3 -3
  286. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +9 -8
  287. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -2
  288. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -2
  289. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +192 -0
  290. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +210 -0
  291. data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +129 -0
  292. data/src/core/lib/security/credentials/tls/spiffe_credentials.h +62 -0
  293. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -8
  294. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -12
  295. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +7 -5
  296. data/src/core/lib/security/security_connector/local/local_security_connector.cc +10 -8
  297. data/src/core/lib/security/security_connector/security_connector.cc +0 -1
  298. data/src/core/lib/security/security_connector/security_connector.h +3 -3
  299. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +39 -38
  300. data/src/core/lib/security/security_connector/ssl_utils.cc +164 -26
  301. data/src/core/lib/security/security_connector/ssl_utils.h +70 -1
  302. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +426 -0
  303. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +122 -0
  304. data/src/core/lib/security/transport/auth_filters.h +5 -2
  305. data/src/core/lib/security/transport/client_auth_filter.cc +55 -50
  306. data/src/core/lib/security/transport/secure_endpoint.cc +6 -6
  307. data/src/core/lib/security/transport/security_handshaker.cc +271 -303
  308. data/src/core/lib/security/transport/security_handshaker.h +11 -2
  309. data/src/core/lib/security/transport/server_auth_filter.cc +3 -3
  310. data/src/core/lib/slice/b64.h +2 -2
  311. data/src/core/lib/slice/percent_encoding.cc +3 -3
  312. data/src/core/lib/slice/percent_encoding.h +3 -3
  313. data/src/core/lib/slice/slice.cc +174 -122
  314. data/src/core/lib/slice/slice_buffer.cc +54 -21
  315. data/src/core/lib/slice/slice_hash_table.h +4 -4
  316. data/src/core/lib/slice/slice_intern.cc +49 -107
  317. data/src/core/lib/slice/slice_internal.h +264 -3
  318. data/src/core/lib/slice/slice_string_helpers.cc +10 -1
  319. data/src/core/lib/slice/slice_string_helpers.h +3 -1
  320. data/src/core/lib/slice/slice_utils.h +50 -0
  321. data/src/core/lib/slice/slice_weak_hash_table.h +6 -6
  322. data/src/core/lib/surface/api_trace.h +1 -1
  323. data/src/core/lib/surface/byte_buffer_reader.cc +17 -0
  324. data/src/core/lib/surface/call.cc +67 -46
  325. data/src/core/lib/surface/call.h +7 -2
  326. data/src/core/lib/surface/call_details.cc +0 -1
  327. data/src/core/lib/surface/channel.cc +89 -97
  328. data/src/core/lib/surface/channel.h +60 -6
  329. data/src/core/lib/surface/channel_init.h +5 -0
  330. data/src/core/lib/surface/completion_queue.cc +221 -216
  331. data/src/core/lib/surface/completion_queue.h +2 -1
  332. data/src/core/lib/surface/init.cc +82 -33
  333. data/src/core/lib/surface/init.h +1 -0
  334. data/src/core/lib/surface/init_secure.cc +1 -1
  335. data/src/core/lib/surface/lame_client.cc +5 -7
  336. data/src/core/lib/surface/server.cc +42 -47
  337. data/src/core/lib/surface/validate_metadata.cc +14 -8
  338. data/src/core/lib/surface/validate_metadata.h +13 -2
  339. data/src/core/lib/surface/version.cc +1 -1
  340. data/src/core/lib/transport/bdp_estimator.cc +3 -3
  341. data/src/core/lib/transport/bdp_estimator.h +2 -2
  342. data/src/core/lib/transport/connectivity_state.cc +10 -40
  343. data/src/core/lib/transport/connectivity_state.h +0 -8
  344. data/src/core/lib/transport/error_utils.cc +12 -0
  345. data/src/core/lib/transport/metadata.cc +258 -267
  346. data/src/core/lib/transport/metadata.h +227 -16
  347. data/src/core/lib/transport/metadata_batch.cc +1 -1
  348. data/src/core/lib/transport/metadata_batch.h +1 -1
  349. data/src/core/lib/transport/static_metadata.cc +477 -399
  350. data/src/core/lib/transport/static_metadata.h +273 -182
  351. data/src/core/lib/transport/status_metadata.cc +3 -3
  352. data/src/core/lib/transport/timeout_encoding.cc +1 -1
  353. data/src/core/lib/transport/timeout_encoding.h +1 -1
  354. data/src/core/lib/transport/transport.cc +39 -72
  355. data/src/core/lib/transport/transport.h +59 -24
  356. data/src/core/lib/transport/transport_impl.h +1 -1
  357. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
  358. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  359. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -1
  360. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +4 -3
  361. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
  362. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +1 -1
  363. data/src/core/tsi/fake_transport_security.cc +4 -4
  364. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +1 -1
  365. data/src/core/tsi/ssl_transport_security.cc +12 -10
  366. data/src/core/tsi/ssl_transport_security.h +24 -4
  367. data/src/ruby/bin/math_pb.rb +18 -16
  368. data/src/ruby/ext/grpc/extconf.rb +12 -4
  369. data/src/ruby/ext/grpc/rb_call_credentials.c +8 -5
  370. data/src/ruby/ext/grpc/rb_channel.c +14 -10
  371. data/src/ruby/ext/grpc/rb_channel_credentials.c +8 -4
  372. data/src/ruby/ext/grpc/rb_compression_options.c +9 -7
  373. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  374. data/src/ruby/ext/grpc/rb_grpc.c +23 -24
  375. data/src/ruby/ext/grpc/rb_grpc.h +4 -2
  376. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +24 -0
  377. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -0
  378. data/src/ruby/ext/grpc/rb_server.c +8 -4
  379. data/src/ruby/lib/grpc/errors.rb +22 -3
  380. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  381. data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -2
  382. data/src/ruby/lib/grpc/version.rb +1 -1
  383. data/src/ruby/pb/README.md +1 -1
  384. data/src/ruby/pb/grpc/health/v1/health_pb.rb +13 -10
  385. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +18 -0
  386. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +3 -1
  387. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +58 -56
  388. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -0
  389. data/src/ruby/spec/errors_spec.rb +141 -0
  390. data/third_party/cares/cares/ares.h +12 -0
  391. data/third_party/cares/cares/ares_create_query.c +5 -1
  392. data/third_party/cares/cares/ares_data.c +74 -73
  393. data/third_party/cares/cares/ares_destroy.c +6 -1
  394. data/third_party/cares/cares/ares_gethostbyaddr.c +5 -5
  395. data/third_party/cares/cares/ares_gethostbyname.c +15 -4
  396. data/third_party/cares/cares/ares_getnameinfo.c +11 -0
  397. data/third_party/cares/cares/ares_init.c +274 -173
  398. data/third_party/cares/cares/ares_library_init.c +21 -3
  399. data/third_party/cares/cares/ares_options.c +6 -2
  400. data/third_party/cares/cares/ares_parse_naptr_reply.c +7 -6
  401. data/third_party/cares/cares/ares_parse_ptr_reply.c +4 -2
  402. data/third_party/cares/cares/ares_platform.c +7 -0
  403. data/third_party/cares/cares/ares_private.h +19 -11
  404. data/third_party/cares/cares/ares_process.c +27 -2
  405. data/third_party/cares/cares/ares_rules.h +1 -1
  406. data/third_party/cares/cares/ares_search.c +7 -0
  407. data/third_party/cares/cares/ares_send.c +6 -0
  408. data/third_party/cares/cares/ares_strsplit.c +174 -0
  409. data/third_party/cares/cares/ares_strsplit.h +43 -0
  410. data/third_party/cares/cares/ares_version.h +4 -4
  411. data/third_party/cares/cares/config-win32.h +1 -1
  412. data/third_party/cares/cares/inet_ntop.c +2 -3
  413. data/third_party/cares/config_darwin/ares_config.h +3 -0
  414. data/third_party/cares/config_freebsd/ares_config.h +3 -0
  415. data/third_party/cares/config_linux/ares_config.h +3 -0
  416. data/third_party/cares/config_openbsd/ares_config.h +3 -0
  417. metadata +83 -48
  418. data/src/core/ext/filters/client_channel/request_routing.cc +0 -936
  419. data/src/core/ext/filters/client_channel/request_routing.h +0 -177
  420. data/src/core/ext/filters/client_channel/subchannel_index.cc +0 -248
  421. data/src/core/ext/filters/client_channel/subchannel_index.h +0 -76
  422. data/src/core/lib/channel/handshaker_factory.cc +0 -42
  423. data/src/core/lib/gpr/arena.cc +0 -192
  424. data/src/core/lib/gprpp/atomic_with_atm.h +0 -57
  425. data/src/core/lib/iomgr/wakeup_fd_cv.cc +0 -107
  426. data/src/core/lib/iomgr/wakeup_fd_cv.h +0 -69
  427. data/src/core/lib/transport/service_config.cc +0 -106
  428. data/src/core/lib/transport/service_config.h +0 -249
@@ -33,6 +33,7 @@
33
33
  #include "src/core/lib/channel/channel_args.h"
34
34
  #include "src/core/lib/channel/channel_trace.h"
35
35
  #include "src/core/lib/channel/channelz.h"
36
+ #include "src/core/lib/channel/channelz_registry.h"
36
37
  #include "src/core/lib/debug/stats.h"
37
38
  #include "src/core/lib/gpr/string.h"
38
39
  #include "src/core/lib/gprpp/manual_constructor.h"
@@ -59,23 +60,6 @@ typedef struct registered_call {
59
60
  struct registered_call* next;
60
61
  } registered_call;
61
62
 
62
- struct grpc_channel {
63
- int is_client;
64
- grpc_compression_options compression_options;
65
-
66
- gpr_atm call_size_estimate;
67
- grpc_resource_user* resource_user;
68
-
69
- gpr_mu registered_call_mu;
70
- registered_call* registered_calls;
71
-
72
- grpc_core::RefCountedPtr<grpc_core::channelz::ChannelNode> channelz_channel;
73
-
74
- char* target;
75
- };
76
-
77
- #define CHANNEL_STACK_FROM_CHANNEL(c) ((grpc_channel_stack*)((c) + 1))
78
-
79
63
  static void destroy_channel(void* arg, grpc_error* error);
80
64
 
81
65
  grpc_channel* grpc_channel_create_with_builder(
@@ -103,18 +87,9 @@ grpc_channel* grpc_channel_create_with_builder(
103
87
  grpc_channel_args_destroy(args);
104
88
  return channel;
105
89
  }
106
-
107
90
  channel->target = target;
108
91
  channel->resource_user = resource_user;
109
92
  channel->is_client = grpc_channel_stack_type_is_client(channel_stack_type);
110
- bool channelz_enabled = GRPC_ENABLE_CHANNELZ_DEFAULT;
111
- size_t channel_tracer_max_memory =
112
- GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT;
113
- bool internal_channel = false;
114
- // this creates the default ChannelNode. Different types of channels may
115
- // override this to ensure a correct ChannelNode is created.
116
- grpc_core::channelz::ChannelNodeCreationFunc channel_node_create_func =
117
- grpc_core::channelz::ChannelNode::MakeChannelNode;
118
93
  gpr_mu_init(&channel->registered_call_mu);
119
94
  channel->registered_calls = nullptr;
120
95
 
@@ -146,40 +121,16 @@ grpc_channel* grpc_channel_create_with_builder(
146
121
  channel->compression_options.enabled_algorithms_bitset =
147
122
  static_cast<uint32_t>(args->args[i].value.integer) |
148
123
  0x1; /* always support no compression */
149
- } else if (0 == strcmp(args->args[i].key,
150
- GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE)) {
151
- const grpc_integer_options options = {
152
- GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT, 0, INT_MAX};
153
- channel_tracer_max_memory =
154
- (size_t)grpc_channel_arg_get_integer(&args->args[i], options);
155
- } else if (0 == strcmp(args->args[i].key, GRPC_ARG_ENABLE_CHANNELZ)) {
156
- // channelz will not be enabled by default until all concerns in
157
- // https://github.com/grpc/grpc/issues/15986 are addressed.
158
- channelz_enabled = grpc_channel_arg_get_bool(
159
- &args->args[i], GRPC_ENABLE_CHANNELZ_DEFAULT);
160
- } else if (0 == strcmp(args->args[i].key,
161
- GRPC_ARG_CHANNELZ_CHANNEL_NODE_CREATION_FUNC)) {
124
+ } else if (0 == strcmp(args->args[i].key, GRPC_ARG_CHANNELZ_CHANNEL_NODE)) {
162
125
  GPR_ASSERT(args->args[i].type == GRPC_ARG_POINTER);
163
126
  GPR_ASSERT(args->args[i].value.pointer.p != nullptr);
164
- channel_node_create_func =
165
- reinterpret_cast<grpc_core::channelz::ChannelNodeCreationFunc>(
166
- args->args[i].value.pointer.p);
167
- } else if (0 == strcmp(args->args[i].key,
168
- GRPC_ARG_CHANNELZ_CHANNEL_IS_INTERNAL_CHANNEL)) {
169
- internal_channel = grpc_channel_arg_get_bool(&args->args[i], false);
127
+ channel->channelz_node = static_cast<grpc_core::channelz::ChannelNode*>(
128
+ args->args[i].value.pointer.p)
129
+ ->Ref();
170
130
  }
171
131
  }
172
132
 
173
133
  grpc_channel_args_destroy(args);
174
- // we only need to do the channelz bookkeeping for clients here. The channelz
175
- // bookkeeping for server channels occurs in src/core/lib/surface/server.cc
176
- if (channelz_enabled && channel->is_client) {
177
- channel->channelz_channel = channel_node_create_func(
178
- channel, channel_tracer_max_memory, !internal_channel);
179
- channel->channelz_channel->AddTraceEvent(
180
- grpc_core::channelz::ChannelTrace::Severity::Info,
181
- grpc_slice_from_static_string("Channel created"));
182
- }
183
134
  return channel;
184
135
  }
185
136
 
@@ -214,11 +165,71 @@ static grpc_channel_args* build_channel_args(
214
165
  return grpc_channel_args_copy_and_add(input_args, new_args, num_new_args);
215
166
  }
216
167
 
217
- grpc_core::channelz::ChannelNode* grpc_channel_get_channelz_node(
218
- grpc_channel* channel) {
219
- return channel->channelz_channel.get();
168
+ namespace {
169
+
170
+ void* channelz_node_copy(void* p) {
171
+ grpc_core::channelz::ChannelNode* node =
172
+ static_cast<grpc_core::channelz::ChannelNode*>(p);
173
+ node->Ref().release();
174
+ return p;
175
+ }
176
+ void channelz_node_destroy(void* p) {
177
+ grpc_core::channelz::ChannelNode* node =
178
+ static_cast<grpc_core::channelz::ChannelNode*>(p);
179
+ node->Unref();
180
+ }
181
+ int channelz_node_cmp(void* p1, void* p2) { return GPR_ICMP(p1, p2); }
182
+ const grpc_arg_pointer_vtable channelz_node_arg_vtable = {
183
+ channelz_node_copy, channelz_node_destroy, channelz_node_cmp};
184
+
185
+ void CreateChannelzNode(grpc_channel_stack_builder* builder) {
186
+ const grpc_channel_args* args =
187
+ grpc_channel_stack_builder_get_channel_arguments(builder);
188
+ // Check whether channelz is enabled.
189
+ const bool channelz_enabled = grpc_channel_arg_get_bool(
190
+ grpc_channel_args_find(args, GRPC_ARG_ENABLE_CHANNELZ),
191
+ GRPC_ENABLE_CHANNELZ_DEFAULT);
192
+ if (!channelz_enabled) return;
193
+ // Get parameters needed to create the channelz node.
194
+ const size_t channel_tracer_max_memory = grpc_channel_arg_get_integer(
195
+ grpc_channel_args_find(args,
196
+ GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE),
197
+ {GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT, 0, INT_MAX});
198
+ const intptr_t channelz_parent_uuid =
199
+ grpc_core::channelz::GetParentUuidFromArgs(*args);
200
+ // Create the channelz node.
201
+ grpc_core::RefCountedPtr<grpc_core::channelz::ChannelNode> channelz_node =
202
+ grpc_core::MakeRefCounted<grpc_core::channelz::ChannelNode>(
203
+ grpc_core::UniquePtr<char>(
204
+ gpr_strdup(grpc_channel_stack_builder_get_target(builder))),
205
+ channel_tracer_max_memory, channelz_parent_uuid);
206
+ channelz_node->AddTraceEvent(
207
+ grpc_core::channelz::ChannelTrace::Severity::Info,
208
+ grpc_slice_from_static_string("Channel created"));
209
+ // Update parent channel node, if any.
210
+ if (channelz_parent_uuid > 0) {
211
+ grpc_core::RefCountedPtr<grpc_core::channelz::BaseNode> parent_node =
212
+ grpc_core::channelz::ChannelzRegistry::Get(channelz_parent_uuid);
213
+ if (parent_node != nullptr) {
214
+ grpc_core::channelz::ChannelNode* parent =
215
+ static_cast<grpc_core::channelz::ChannelNode*>(parent_node.get());
216
+ parent->AddChildChannel(channelz_node->uuid());
217
+ }
218
+ }
219
+ // Add channelz node to channel args.
220
+ // We remove the arg for the parent uuid, since we no longer need it.
221
+ grpc_arg new_arg = grpc_channel_arg_pointer_create(
222
+ const_cast<char*>(GRPC_ARG_CHANNELZ_CHANNEL_NODE), channelz_node.get(),
223
+ &channelz_node_arg_vtable);
224
+ const char* args_to_remove[] = {GRPC_ARG_CHANNELZ_PARENT_UUID};
225
+ grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
226
+ args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), &new_arg, 1);
227
+ grpc_channel_stack_builder_set_channel_arguments(builder, new_args);
228
+ grpc_channel_args_destroy(new_args);
220
229
  }
221
230
 
231
+ } // namespace
232
+
222
233
  grpc_channel* grpc_channel_create(const char* target,
223
234
  const grpc_channel_args* input_args,
224
235
  grpc_channel_stack_type channel_stack_type,
@@ -241,9 +252,12 @@ grpc_channel* grpc_channel_create(const char* target,
241
252
  }
242
253
  return nullptr;
243
254
  }
244
- grpc_channel* channel =
245
- grpc_channel_create_with_builder(builder, channel_stack_type);
246
- return channel;
255
+ // We only need to do this for clients here. For servers, this will be
256
+ // done in src/core/lib/surface/server.cc.
257
+ if (grpc_channel_stack_type_is_client(channel_stack_type)) {
258
+ CreateChannelzNode(builder);
259
+ }
260
+ return grpc_channel_create_with_builder(builder, channel_stack_type);
247
261
  }
248
262
 
249
263
  size_t grpc_channel_get_call_size_estimate(grpc_channel* channel) {
@@ -421,29 +435,23 @@ grpc_call* grpc_channel_create_registered_call(
421
435
  return call;
422
436
  }
423
437
 
424
- #ifndef NDEBUG
425
- #define REF_REASON reason
426
- #define REF_ARG , const char* reason
427
- #else
428
- #define REF_REASON ""
429
- #define REF_ARG
430
- #endif
431
- void grpc_channel_internal_ref(grpc_channel* c REF_ARG) {
432
- GRPC_CHANNEL_STACK_REF(CHANNEL_STACK_FROM_CHANNEL(c), REF_REASON);
433
- }
434
-
435
- void grpc_channel_internal_unref(grpc_channel* c REF_ARG) {
436
- GRPC_CHANNEL_STACK_UNREF(CHANNEL_STACK_FROM_CHANNEL(c), REF_REASON);
437
- }
438
-
439
438
  static void destroy_channel(void* arg, grpc_error* error) {
440
439
  grpc_channel* channel = static_cast<grpc_channel*>(arg);
441
- if (channel->channelz_channel != nullptr) {
442
- channel->channelz_channel->AddTraceEvent(
440
+ if (channel->channelz_node != nullptr) {
441
+ if (channel->channelz_node->parent_uuid() > 0) {
442
+ grpc_core::RefCountedPtr<grpc_core::channelz::BaseNode> parent_node =
443
+ grpc_core::channelz::ChannelzRegistry::Get(
444
+ channel->channelz_node->parent_uuid());
445
+ if (parent_node != nullptr) {
446
+ grpc_core::channelz::ChannelNode* parent =
447
+ static_cast<grpc_core::channelz::ChannelNode*>(parent_node.get());
448
+ parent->RemoveChildChannel(channel->channelz_node->uuid());
449
+ }
450
+ }
451
+ channel->channelz_node->AddTraceEvent(
443
452
  grpc_core::channelz::ChannelTrace::Severity::Info,
444
453
  grpc_slice_from_static_string("Channel destroyed"));
445
- channel->channelz_channel->MarkChannelDestroyed();
446
- channel->channelz_channel.reset();
454
+ channel->channelz_node.reset();
447
455
  }
448
456
  grpc_channel_stack_destroy(CHANNEL_STACK_FROM_CHANNEL(channel));
449
457
  while (channel->registered_calls) {
@@ -475,25 +483,9 @@ void grpc_channel_destroy(grpc_channel* channel) {
475
483
  GRPC_CHANNEL_INTERNAL_UNREF(channel, "channel");
476
484
  }
477
485
 
478
- grpc_channel_stack* grpc_channel_get_channel_stack(grpc_channel* channel) {
479
- return CHANNEL_STACK_FROM_CHANNEL(channel);
480
- }
481
-
482
- grpc_compression_options grpc_channel_compression_options(
483
- const grpc_channel* channel) {
484
- return channel->compression_options;
485
- }
486
-
487
- grpc_mdelem grpc_channel_get_reffed_status_elem(grpc_channel* channel, int i) {
486
+ grpc_mdelem grpc_channel_get_reffed_status_elem_slowpath(grpc_channel* channel,
487
+ int i) {
488
488
  char tmp[GPR_LTOA_MIN_BUFSIZE];
489
- switch (i) {
490
- case 0:
491
- return GRPC_MDELEM_GRPC_STATUS_0;
492
- case 1:
493
- return GRPC_MDELEM_GRPC_STATUS_1;
494
- case 2:
495
- return GRPC_MDELEM_GRPC_STATUS_2;
496
- }
497
489
  gpr_ltoa(i, tmp);
498
490
  return grpc_mdelem_from_slices(GRPC_MDSTR_GRPC_STATUS,
499
491
  grpc_slice_from_copied_string(tmp));
@@ -59,22 +59,76 @@ grpc_core::channelz::ChannelNode* grpc_channel_get_channelz_node(
59
59
  status_code.
60
60
 
61
61
  The returned elem is owned by the caller. */
62
- grpc_mdelem grpc_channel_get_reffed_status_elem(grpc_channel* channel,
63
- int status_code);
62
+ grpc_mdelem grpc_channel_get_reffed_status_elem_slowpath(grpc_channel* channel,
63
+ int status_code);
64
+ inline grpc_mdelem grpc_channel_get_reffed_status_elem(grpc_channel* channel,
65
+ int status_code) {
66
+ switch (status_code) {
67
+ case 0:
68
+ return GRPC_MDELEM_GRPC_STATUS_0;
69
+ case 1:
70
+ return GRPC_MDELEM_GRPC_STATUS_1;
71
+ case 2:
72
+ return GRPC_MDELEM_GRPC_STATUS_2;
73
+ }
74
+ return grpc_channel_get_reffed_status_elem_slowpath(channel, status_code);
75
+ }
64
76
 
65
77
  size_t grpc_channel_get_call_size_estimate(grpc_channel* channel);
66
78
  void grpc_channel_update_call_size_estimate(grpc_channel* channel, size_t size);
67
79
 
80
+ struct registered_call;
81
+ struct grpc_channel {
82
+ int is_client;
83
+ grpc_compression_options compression_options;
84
+
85
+ gpr_atm call_size_estimate;
86
+ grpc_resource_user* resource_user;
87
+
88
+ gpr_mu registered_call_mu;
89
+ registered_call* registered_calls;
90
+
91
+ grpc_core::RefCountedPtr<grpc_core::channelz::ChannelNode> channelz_node;
92
+
93
+ char* target;
94
+ };
95
+ #define CHANNEL_STACK_FROM_CHANNEL(c) ((grpc_channel_stack*)((c) + 1))
96
+
97
+ inline grpc_compression_options grpc_channel_compression_options(
98
+ const grpc_channel* channel) {
99
+ return channel->compression_options;
100
+ }
101
+
102
+ inline grpc_channel_stack* grpc_channel_get_channel_stack(
103
+ grpc_channel* channel) {
104
+ return CHANNEL_STACK_FROM_CHANNEL(channel);
105
+ }
106
+
107
+ inline grpc_core::channelz::ChannelNode* grpc_channel_get_channelz_node(
108
+ grpc_channel* channel) {
109
+ return channel->channelz_node.get();
110
+ }
111
+
68
112
  #ifndef NDEBUG
69
- void grpc_channel_internal_ref(grpc_channel* channel, const char* reason);
70
- void grpc_channel_internal_unref(grpc_channel* channel, const char* reason);
113
+ inline void grpc_channel_internal_ref(grpc_channel* channel,
114
+ const char* reason) {
115
+ GRPC_CHANNEL_STACK_REF(CHANNEL_STACK_FROM_CHANNEL(channel), reason);
116
+ }
117
+ inline void grpc_channel_internal_unref(grpc_channel* channel,
118
+ const char* reason) {
119
+ GRPC_CHANNEL_STACK_UNREF(CHANNEL_STACK_FROM_CHANNEL(channel), reason);
120
+ }
71
121
  #define GRPC_CHANNEL_INTERNAL_REF(channel, reason) \
72
122
  grpc_channel_internal_ref(channel, reason)
73
123
  #define GRPC_CHANNEL_INTERNAL_UNREF(channel, reason) \
74
124
  grpc_channel_internal_unref(channel, reason)
75
125
  #else
76
- void grpc_channel_internal_ref(grpc_channel* channel);
77
- void grpc_channel_internal_unref(grpc_channel* channel);
126
+ inline void grpc_channel_internal_ref(grpc_channel* channel) {
127
+ GRPC_CHANNEL_STACK_REF(CHANNEL_STACK_FROM_CHANNEL(channel), "unused");
128
+ }
129
+ inline void grpc_channel_internal_unref(grpc_channel* channel) {
130
+ GRPC_CHANNEL_STACK_UNREF(CHANNEL_STACK_FROM_CHANNEL(channel), "unused");
131
+ }
78
132
  #define GRPC_CHANNEL_INTERNAL_REF(channel, reason) \
79
133
  grpc_channel_internal_ref(channel)
80
134
  #define GRPC_CHANNEL_INTERNAL_UNREF(channel, reason) \
@@ -45,6 +45,11 @@ void grpc_channel_init_init(void);
45
45
  /// registration order (in the case of a tie).
46
46
  /// Stages are registered against one of the pre-determined channel stack
47
47
  /// types.
48
+ /// If the channel stack type is GRPC_CLIENT_SUBCHANNEL, the caller should
49
+ /// ensure that subchannels with different filter lists will always have
50
+ /// different channel args. This requires setting a channel arg in case the
51
+ /// registration function relies on some condition other than channel args to
52
+ /// decide whether to add a filter or not.
48
53
  void grpc_channel_init_register_stage(grpc_channel_stack_type type,
49
54
  int priority,
50
55
  grpc_channel_init_stage stage_fn,