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
@@ -18,19 +18,20 @@
18
18
 
19
19
  #include <grpc/impl/codegen/port_platform.h>
20
20
 
21
+ #include <algorithm>
22
+ #include <cstring>
23
+
21
24
  #include "src/core/lib/channel/channel_trace.h"
22
25
  #include "src/core/lib/channel/channelz.h"
23
26
  #include "src/core/lib/channel/channelz_registry.h"
24
27
  #include "src/core/lib/gpr/useful.h"
25
28
  #include "src/core/lib/gprpp/memory.h"
26
- #include "src/core/lib/gprpp/mutex_lock.h"
29
+ #include "src/core/lib/gprpp/sync.h"
27
30
 
28
31
  #include <grpc/support/alloc.h>
29
32
  #include <grpc/support/log.h>
30
33
  #include <grpc/support/sync.h>
31
34
 
32
- #include <cstring>
33
-
34
35
  namespace grpc_core {
35
36
  namespace channelz {
36
37
  namespace {
@@ -51,102 +52,58 @@ ChannelzRegistry* ChannelzRegistry::Default() {
51
52
  return g_channelz_registry;
52
53
  }
53
54
 
54
- ChannelzRegistry::ChannelzRegistry() { gpr_mu_init(&mu_); }
55
-
56
- ChannelzRegistry::~ChannelzRegistry() { gpr_mu_destroy(&mu_); }
57
-
58
55
  void ChannelzRegistry::InternalRegister(BaseNode* node) {
59
56
  MutexLock lock(&mu_);
60
- entities_.push_back(node);
61
57
  node->uuid_ = ++uuid_generator_;
62
- }
63
-
64
- void ChannelzRegistry::MaybePerformCompactionLocked() {
65
- constexpr double kEmptinessTheshold = 1 / 3;
66
- double emptiness_ratio =
67
- double(num_empty_slots_) / double(entities_.capacity());
68
- if (emptiness_ratio > kEmptinessTheshold) {
69
- int front = 0;
70
- for (size_t i = 0; i < entities_.size(); ++i) {
71
- if (entities_[i] != nullptr) {
72
- entities_[front++] = entities_[i];
73
- }
74
- }
75
- for (int i = 0; i < num_empty_slots_; ++i) {
76
- entities_.pop_back();
77
- }
78
- num_empty_slots_ = 0;
79
- }
80
- }
81
-
82
- int ChannelzRegistry::FindByUuidLocked(intptr_t target_uuid,
83
- bool direct_hit_needed) {
84
- int left = 0;
85
- int right = int(entities_.size() - 1);
86
- while (left <= right) {
87
- int true_middle = left + (right - left) / 2;
88
- int first_non_null = true_middle;
89
- while (first_non_null < right && entities_[first_non_null] == nullptr) {
90
- first_non_null++;
91
- }
92
- if (entities_[first_non_null] == nullptr) {
93
- right = true_middle - 1;
94
- continue;
95
- }
96
- intptr_t uuid = entities_[first_non_null]->uuid();
97
- if (uuid == target_uuid) {
98
- return int(first_non_null);
99
- }
100
- if (uuid < target_uuid) {
101
- left = first_non_null + 1;
102
- } else {
103
- right = true_middle - 1;
104
- }
105
- }
106
- return direct_hit_needed ? -1 : left;
58
+ node_map_[node->uuid_] = node;
107
59
  }
108
60
 
109
61
  void ChannelzRegistry::InternalUnregister(intptr_t uuid) {
110
62
  GPR_ASSERT(uuid >= 1);
111
63
  MutexLock lock(&mu_);
112
64
  GPR_ASSERT(uuid <= uuid_generator_);
113
- int idx = FindByUuidLocked(uuid, true);
114
- GPR_ASSERT(idx >= 0);
115
- entities_[idx] = nullptr;
116
- num_empty_slots_++;
117
- MaybePerformCompactionLocked();
65
+ node_map_.erase(uuid);
118
66
  }
119
67
 
120
- BaseNode* ChannelzRegistry::InternalGet(intptr_t uuid) {
68
+ RefCountedPtr<BaseNode> ChannelzRegistry::InternalGet(intptr_t uuid) {
121
69
  MutexLock lock(&mu_);
122
70
  if (uuid < 1 || uuid > uuid_generator_) {
123
71
  return nullptr;
124
72
  }
125
- int idx = FindByUuidLocked(uuid, true);
126
- return idx < 0 ? nullptr : entities_[idx];
73
+ auto it = node_map_.find(uuid);
74
+ if (it == node_map_.end()) return nullptr;
75
+ // Found node. Return only if its refcount is not zero (i.e., when we
76
+ // know that there is no other thread about to destroy it).
77
+ BaseNode* node = it->second;
78
+ if (!node->RefIfNonZero()) return nullptr;
79
+ return RefCountedPtr<BaseNode>(node);
127
80
  }
128
81
 
129
82
  char* ChannelzRegistry::InternalGetTopChannels(intptr_t start_channel_id) {
130
- MutexLock lock(&mu_);
131
83
  grpc_json* top_level_json = grpc_json_create(GRPC_JSON_OBJECT);
132
84
  grpc_json* json = top_level_json;
133
85
  grpc_json* json_iterator = nullptr;
134
- InlinedVector<BaseNode*, 10> top_level_channels;
135
- bool reached_pagination_limit = false;
136
- int start_idx = GPR_MAX(FindByUuidLocked(start_channel_id, false), 0);
137
- for (size_t i = start_idx; i < entities_.size(); ++i) {
138
- if (entities_[i] != nullptr &&
139
- entities_[i]->type() ==
140
- grpc_core::channelz::BaseNode::EntityType::kTopLevelChannel &&
141
- entities_[i]->uuid() >= start_channel_id) {
142
- // check if we are over pagination limit to determine if we need to set
143
- // the "end" element. If we don't go through this block, we know that
144
- // when the loop terminates, we have <= to kPaginationLimit.
145
- if (top_level_channels.size() == kPaginationLimit) {
146
- reached_pagination_limit = true;
147
- break;
86
+ InlinedVector<RefCountedPtr<BaseNode>, 10> top_level_channels;
87
+ RefCountedPtr<BaseNode> node_after_pagination_limit;
88
+ {
89
+ MutexLock lock(&mu_);
90
+ for (auto it = node_map_.lower_bound(start_channel_id);
91
+ it != node_map_.end(); ++it) {
92
+ BaseNode* node = it->second;
93
+ if (node->type() == BaseNode::EntityType::kTopLevelChannel &&
94
+ node->RefIfNonZero()) {
95
+ // Check if we are over pagination limit to determine if we need to set
96
+ // the "end" element. If we don't go through this block, we know that
97
+ // when the loop terminates, we have <= to kPaginationLimit.
98
+ // Note that because we have already increased this node's
99
+ // refcount, we need to decrease it, but we can't unref while
100
+ // holding the lock, because this may lead to a deadlock.
101
+ if (top_level_channels.size() == kPaginationLimit) {
102
+ node_after_pagination_limit.reset(node);
103
+ break;
104
+ }
105
+ top_level_channels.emplace_back(node);
148
106
  }
149
- top_level_channels.push_back(entities_[i]);
150
107
  }
151
108
  }
152
109
  if (!top_level_channels.empty()) {
@@ -159,7 +116,7 @@ char* ChannelzRegistry::InternalGetTopChannels(intptr_t start_channel_id) {
159
116
  grpc_json_link_child(array_parent, channel_json, json_iterator);
160
117
  }
161
118
  }
162
- if (!reached_pagination_limit) {
119
+ if (node_after_pagination_limit == nullptr) {
163
120
  grpc_json_create_child(nullptr, json, "end", nullptr, GRPC_JSON_TRUE,
164
121
  false);
165
122
  }
@@ -169,26 +126,30 @@ char* ChannelzRegistry::InternalGetTopChannels(intptr_t start_channel_id) {
169
126
  }
170
127
 
171
128
  char* ChannelzRegistry::InternalGetServers(intptr_t start_server_id) {
172
- MutexLock lock(&mu_);
173
129
  grpc_json* top_level_json = grpc_json_create(GRPC_JSON_OBJECT);
174
130
  grpc_json* json = top_level_json;
175
131
  grpc_json* json_iterator = nullptr;
176
- InlinedVector<BaseNode*, 10> servers;
177
- bool reached_pagination_limit = false;
178
- int start_idx = GPR_MAX(FindByUuidLocked(start_server_id, false), 0);
179
- for (size_t i = start_idx; i < entities_.size(); ++i) {
180
- if (entities_[i] != nullptr &&
181
- entities_[i]->type() ==
182
- grpc_core::channelz::BaseNode::EntityType::kServer &&
183
- entities_[i]->uuid() >= start_server_id) {
184
- // check if we are over pagination limit to determine if we need to set
185
- // the "end" element. If we don't go through this block, we know that
186
- // when the loop terminates, we have <= to kPaginationLimit.
187
- if (servers.size() == kPaginationLimit) {
188
- reached_pagination_limit = true;
189
- break;
132
+ InlinedVector<RefCountedPtr<BaseNode>, 10> servers;
133
+ RefCountedPtr<BaseNode> node_after_pagination_limit;
134
+ {
135
+ MutexLock lock(&mu_);
136
+ for (auto it = node_map_.lower_bound(start_server_id);
137
+ it != node_map_.end(); ++it) {
138
+ BaseNode* node = it->second;
139
+ if (node->type() == BaseNode::EntityType::kServer &&
140
+ node->RefIfNonZero()) {
141
+ // Check if we are over pagination limit to determine if we need to set
142
+ // the "end" element. If we don't go through this block, we know that
143
+ // when the loop terminates, we have <= to kPaginationLimit.
144
+ // Note that because we have already increased this node's
145
+ // refcount, we need to decrease it, but we can't unref while
146
+ // holding the lock, because this may lead to a deadlock.
147
+ if (servers.size() == kPaginationLimit) {
148
+ node_after_pagination_limit.reset(node);
149
+ break;
150
+ }
151
+ servers.emplace_back(node);
190
152
  }
191
- servers.push_back(entities_[i]);
192
153
  }
193
154
  }
194
155
  if (!servers.empty()) {
@@ -201,7 +162,7 @@ char* ChannelzRegistry::InternalGetServers(intptr_t start_server_id) {
201
162
  grpc_json_link_child(array_parent, server_json, json_iterator);
202
163
  }
203
164
  }
204
- if (!reached_pagination_limit) {
165
+ if (node_after_pagination_limit == nullptr) {
205
166
  grpc_json_create_child(nullptr, json, "end", nullptr, GRPC_JSON_TRUE,
206
167
  false);
207
168
  }
@@ -211,14 +172,21 @@ char* ChannelzRegistry::InternalGetServers(intptr_t start_server_id) {
211
172
  }
212
173
 
213
174
  void ChannelzRegistry::InternalLogAllEntities() {
214
- MutexLock lock(&mu_);
215
- for (size_t i = 0; i < entities_.size(); ++i) {
216
- if (entities_[i] != nullptr) {
217
- char* json = entities_[i]->RenderJsonString();
218
- gpr_log(GPR_INFO, "%s", json);
219
- gpr_free(json);
175
+ InlinedVector<RefCountedPtr<BaseNode>, 10> nodes;
176
+ {
177
+ MutexLock lock(&mu_);
178
+ for (auto& p : node_map_) {
179
+ BaseNode* node = p.second;
180
+ if (node->RefIfNonZero()) {
181
+ nodes.emplace_back(node);
182
+ }
220
183
  }
221
184
  }
185
+ for (size_t i = 0; i < nodes.size(); ++i) {
186
+ char* json = nodes[i]->RenderJsonString();
187
+ gpr_log(GPR_INFO, "%s", json);
188
+ gpr_free(json);
189
+ }
222
190
  }
223
191
 
224
192
  } // namespace channelz
@@ -234,7 +202,7 @@ char* grpc_channelz_get_servers(intptr_t start_server_id) {
234
202
  }
235
203
 
236
204
  char* grpc_channelz_get_server(intptr_t server_id) {
237
- grpc_core::channelz::BaseNode* server_node =
205
+ grpc_core::RefCountedPtr<grpc_core::channelz::BaseNode> server_node =
238
206
  grpc_core::channelz::ChannelzRegistry::Get(server_id);
239
207
  if (server_node == nullptr ||
240
208
  server_node->type() !=
@@ -254,7 +222,7 @@ char* grpc_channelz_get_server(intptr_t server_id) {
254
222
  char* grpc_channelz_get_server_sockets(intptr_t server_id,
255
223
  intptr_t start_socket_id,
256
224
  intptr_t max_results) {
257
- grpc_core::channelz::BaseNode* base_node =
225
+ grpc_core::RefCountedPtr<grpc_core::channelz::BaseNode> base_node =
258
226
  grpc_core::channelz::ChannelzRegistry::Get(server_id);
259
227
  if (base_node == nullptr ||
260
228
  base_node->type() != grpc_core::channelz::BaseNode::EntityType::kServer) {
@@ -263,12 +231,12 @@ char* grpc_channelz_get_server_sockets(intptr_t server_id,
263
231
  // This cast is ok since we have just checked to make sure base_node is
264
232
  // actually a server node
265
233
  grpc_core::channelz::ServerNode* server_node =
266
- static_cast<grpc_core::channelz::ServerNode*>(base_node);
234
+ static_cast<grpc_core::channelz::ServerNode*>(base_node.get());
267
235
  return server_node->RenderServerSockets(start_socket_id, max_results);
268
236
  }
269
237
 
270
238
  char* grpc_channelz_get_channel(intptr_t channel_id) {
271
- grpc_core::channelz::BaseNode* channel_node =
239
+ grpc_core::RefCountedPtr<grpc_core::channelz::BaseNode> channel_node =
272
240
  grpc_core::channelz::ChannelzRegistry::Get(channel_id);
273
241
  if (channel_node == nullptr ||
274
242
  (channel_node->type() !=
@@ -288,7 +256,7 @@ char* grpc_channelz_get_channel(intptr_t channel_id) {
288
256
  }
289
257
 
290
258
  char* grpc_channelz_get_subchannel(intptr_t subchannel_id) {
291
- grpc_core::channelz::BaseNode* subchannel_node =
259
+ grpc_core::RefCountedPtr<grpc_core::channelz::BaseNode> subchannel_node =
292
260
  grpc_core::channelz::ChannelzRegistry::Get(subchannel_id);
293
261
  if (subchannel_node == nullptr ||
294
262
  subchannel_node->type() !=
@@ -306,7 +274,7 @@ char* grpc_channelz_get_subchannel(intptr_t subchannel_id) {
306
274
  }
307
275
 
308
276
  char* grpc_channelz_get_socket(intptr_t socket_id) {
309
- grpc_core::channelz::BaseNode* socket_node =
277
+ grpc_core::RefCountedPtr<grpc_core::channelz::BaseNode> socket_node =
310
278
  grpc_core::channelz::ChannelzRegistry::Get(socket_id);
311
279
  if (socket_node == nullptr ||
312
280
  socket_node->type() !=
@@ -21,19 +21,16 @@
21
21
 
22
22
  #include <grpc/impl/codegen/port_platform.h>
23
23
 
24
+ #include <stdint.h>
25
+
24
26
  #include "src/core/lib/channel/channel_trace.h"
25
27
  #include "src/core/lib/channel/channelz.h"
26
- #include "src/core/lib/gprpp/inlined_vector.h"
27
-
28
- #include <stdint.h>
28
+ #include "src/core/lib/gprpp/map.h"
29
+ #include "src/core/lib/gprpp/sync.h"
29
30
 
30
31
  namespace grpc_core {
31
32
  namespace channelz {
32
33
 
33
- namespace testing {
34
- class ChannelzRegistryPeer;
35
- }
36
-
37
34
  // singleton registry object to track all objects that are needed to support
38
35
  // channelz bookkeeping. All objects share globally distributed uuids.
39
36
  class ChannelzRegistry {
@@ -48,7 +45,9 @@ class ChannelzRegistry {
48
45
  return Default()->InternalRegister(node);
49
46
  }
50
47
  static void Unregister(intptr_t uuid) { Default()->InternalUnregister(uuid); }
51
- static BaseNode* Get(intptr_t uuid) { return Default()->InternalGet(uuid); }
48
+ static RefCountedPtr<BaseNode> Get(intptr_t uuid) {
49
+ return Default()->InternalGet(uuid);
50
+ }
52
51
 
53
52
  // Returns the allocated JSON string that represents the proto
54
53
  // GetTopChannelsResponse as per channelz.proto.
@@ -67,13 +66,6 @@ class ChannelzRegistry {
67
66
  static void LogAllEntities() { Default()->InternalLogAllEntities(); }
68
67
 
69
68
  private:
70
- GPRC_ALLOW_CLASS_TO_USE_NON_PUBLIC_NEW
71
- GPRC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE
72
- friend class testing::ChannelzRegistryPeer;
73
-
74
- ChannelzRegistry();
75
- ~ChannelzRegistry();
76
-
77
69
  // Returned the singleton instance of ChannelzRegistry;
78
70
  static ChannelzRegistry* Default();
79
71
 
@@ -86,27 +78,17 @@ class ChannelzRegistry {
86
78
 
87
79
  // if object with uuid has previously been registered as the correct type,
88
80
  // returns the void* associated with that uuid. Else returns nullptr.
89
- BaseNode* InternalGet(intptr_t uuid);
81
+ RefCountedPtr<BaseNode> InternalGet(intptr_t uuid);
90
82
 
91
83
  char* InternalGetTopChannels(intptr_t start_channel_id);
92
84
  char* InternalGetServers(intptr_t start_server_id);
93
85
 
94
- // If entities_ has over a certain threshold of empty slots, it will
95
- // compact the vector and move all used slots to the front.
96
- void MaybePerformCompactionLocked();
97
-
98
- // Performs binary search on entities_ to find the index with that uuid.
99
- // If direct_hit_needed, then will return -1 in case of absence.
100
- // Else, will return idx of the first uuid higher than the target.
101
- int FindByUuidLocked(intptr_t uuid, bool direct_hit_needed);
102
-
103
86
  void InternalLogAllEntities();
104
87
 
105
88
  // protects members
106
- gpr_mu mu_;
107
- InlinedVector<BaseNode*, 20> entities_;
89
+ Mutex mu_;
90
+ Map<intptr_t, BaseNode*> node_map_;
108
91
  intptr_t uuid_generator_ = 0;
109
- int num_empty_slots_ = 0;
110
92
  };
111
93
 
112
94
  } // namespace channelz
@@ -41,12 +41,12 @@ typedef struct connected_channel_channel_data {
41
41
  typedef struct {
42
42
  grpc_closure closure;
43
43
  grpc_closure* original_closure;
44
- grpc_call_combiner* call_combiner;
44
+ grpc_core::CallCombiner* call_combiner;
45
45
  const char* reason;
46
46
  } callback_state;
47
47
 
48
48
  typedef struct connected_channel_call_data {
49
- grpc_call_combiner* call_combiner;
49
+ grpc_core::CallCombiner* call_combiner;
50
50
  // Closures used for returning results on the call combiner.
51
51
  callback_state on_complete[6]; // Max number of pending batches.
52
52
  callback_state recv_initial_metadata_ready;
@@ -35,8 +35,8 @@ typedef enum {
35
35
  /// Reserved for traffic_class_context.
36
36
  GRPC_CONTEXT_TRAFFIC,
37
37
 
38
- /// Value is a \a grpc_grpclb_client_stats.
39
- GRPC_GRPCLB_CLIENT_STATS,
38
+ /// Holds a pointer to ServiceConfig::CallData associated with this call.
39
+ GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA,
40
40
 
41
41
  GRPC_CONTEXT_COUNT
42
42
  } grpc_context_index;