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
@@ -25,7 +25,9 @@
25
25
  #include "src/core/lib/gprpp/thd.h"
26
26
  #include "src/core/lib/iomgr/closure.h"
27
27
 
28
- typedef struct {
28
+ namespace grpc_core {
29
+
30
+ struct ThreadState {
29
31
  gpr_mu mu;
30
32
  size_t id; // For debugging purposes
31
33
  const char* name; // Thread state name
@@ -35,24 +37,32 @@ typedef struct {
35
37
  bool shutdown;
36
38
  bool queued_long_job;
37
39
  grpc_core::Thread thd;
38
- } ThreadState;
40
+ };
39
41
 
40
- typedef enum {
41
- GRPC_EXECUTOR_SHORT = 0,
42
- GRPC_EXECUTOR_LONG,
43
- GRPC_NUM_EXECUTOR_JOB_TYPES // Add new values above this
44
- } GrpcExecutorJobType;
42
+ enum class ExecutorType {
43
+ DEFAULT = 0,
44
+ RESOLVER,
45
+
46
+ NUM_EXECUTORS // Add new values above this
47
+ };
45
48
 
46
- class GrpcExecutor {
49
+ enum class ExecutorJobType {
50
+ SHORT = 0,
51
+ LONG,
52
+ NUM_JOB_TYPES // Add new values above this
53
+ };
54
+
55
+ class Executor {
47
56
  public:
48
- GrpcExecutor(const char* executor_name);
57
+ Executor(const char* executor_name);
49
58
 
50
59
  void Init();
51
60
 
52
61
  /** Is the executor multi-threaded? */
53
62
  bool IsThreaded() const;
54
63
 
55
- /* Enable/disable threading - must be called after Init and Shutdown() */
64
+ /* Enable/disable threading - must be called after Init and Shutdown(). Never
65
+ * call SetThreading(false) in the middle of an application */
56
66
  void SetThreading(bool threading);
57
67
 
58
68
  /** Shutdown the executor, running all pending work as part of the call */
@@ -62,55 +72,51 @@ class GrpcExecutor {
62
72
  * a short job (i.e expected to not block and complete quickly) */
63
73
  void Enqueue(grpc_closure* closure, grpc_error* error, bool is_short);
64
74
 
65
- private:
66
- static size_t RunClosures(const char* executor_name, grpc_closure_list list);
67
- static void ThreadMain(void* arg);
75
+ // TODO(sreek): Currently we have two executors (available globally): The
76
+ // default executor and the resolver executor.
77
+ //
78
+ // Some of the functions below operate on the DEFAULT executor only while some
79
+ // operate of ALL the executors. This is a bit confusing and should be cleaned
80
+ // up in future (where we make all the following functions take ExecutorType
81
+ // and/or JobType)
68
82
 
69
- const char* name_;
70
- ThreadState* thd_state_;
71
- size_t max_threads_;
72
- gpr_atm num_threads_;
73
- gpr_spinlock adding_thread_lock_;
74
- };
75
-
76
- // == Global executor functions ==
83
+ // Initialize ALL the executors
84
+ static void InitAll();
77
85
 
78
- typedef enum {
79
- GRPC_DEFAULT_EXECUTOR = 0,
80
- GRPC_RESOLVER_EXECUTOR,
86
+ // Shutdown ALL the executors
87
+ static void ShutdownAll();
81
88
 
82
- GRPC_NUM_EXECUTORS // Add new values above this
83
- } GrpcExecutorType;
89
+ // Set the threading mode for ALL the executors
90
+ static void SetThreadingAll(bool enable);
84
91
 
85
- // TODO(sreek): Currently we have two executors (available globally): The
86
- // default executor and the resolver executor.
87
- //
88
- // Some of the functions below operate on the DEFAULT executor only while some
89
- // operate of ALL the executors. This is a bit confusing and should be cleaned
90
- // up in future (where we make all the following functions take executor_type
91
- // and/or job_type)
92
+ // Set the threading mode for ALL the executors
93
+ static void SetThreadingDefault(bool enable);
92
94
 
93
- // Initialize ALL the executors
94
- void grpc_executor_init();
95
+ // Get the DEFAULT executor scheduler for the given job_type
96
+ static grpc_closure_scheduler* Scheduler(ExecutorJobType job_type);
95
97
 
96
- // Shutdown ALL the executors
97
- void grpc_executor_shutdown();
98
+ // Get the executor scheduler for a given executor_type and a job_type
99
+ static grpc_closure_scheduler* Scheduler(ExecutorType executor_type,
100
+ ExecutorJobType job_type);
98
101
 
99
- // Set the threading mode for ALL the executors
100
- void grpc_executor_set_threading(bool enable);
102
+ // Return if a given executor is running in threaded mode (i.e if
103
+ // SetThreading(true) was called previously on that executor)
104
+ static bool IsThreaded(ExecutorType executor_type);
101
105
 
102
- // Get the DEFAULT executor scheduler for the given job_type
103
- grpc_closure_scheduler* grpc_executor_scheduler(GrpcExecutorJobType job_type);
106
+ // Return if the DEFAULT executor is threaded
107
+ static bool IsThreadedDefault();
104
108
 
105
- // Get the executor scheduler for a given executor_type and a job_type
106
- grpc_closure_scheduler* grpc_executor_scheduler(GrpcExecutorType executor_type,
107
- GrpcExecutorJobType job_type);
109
+ private:
110
+ static size_t RunClosures(const char* executor_name, grpc_closure_list list);
111
+ static void ThreadMain(void* arg);
108
112
 
109
- // Return if a given executor is running in threaded mode (i.e if
110
- // grpc_executor_set_threading(true) was called previously on that executor)
111
- bool grpc_executor_is_threaded(GrpcExecutorType executor_type);
113
+ const char* name_;
114
+ ThreadState* thd_state_;
115
+ size_t max_threads_;
116
+ gpr_atm num_threads_;
117
+ gpr_spinlock adding_thread_lock_;
118
+ };
112
119
 
113
- // Return if the DEFAULT executor is threaded
114
- bool grpc_executor_is_threaded();
120
+ } // namespace grpc_core
115
121
 
116
122
  #endif /* GRPC_CORE_LIB_IOMGR_EXECUTOR_H */
@@ -28,7 +28,6 @@
28
28
  #include <grpc/grpc.h>
29
29
  #include <grpc/support/log.h>
30
30
 
31
- #include "src/core/lib/gpr/env.h"
32
31
  #include "src/core/lib/gprpp/fork.h"
33
32
  #include "src/core/lib/gprpp/thd.h"
34
33
  #include "src/core/lib/iomgr/ev_posix.h"
@@ -47,11 +46,13 @@ bool registered_handlers = false;
47
46
  } // namespace
48
47
 
49
48
  void grpc_prefork() {
50
- grpc_core::ExecCtx exec_ctx;
51
49
  skipped_handler = true;
50
+ // This may be called after core shuts down, so verify initialized before
51
+ // instantiating an ExecCtx.
52
52
  if (!grpc_is_initialized()) {
53
53
  return;
54
54
  }
55
+ grpc_core::ExecCtx exec_ctx;
55
56
  if (!grpc_core::Fork::Enabled()) {
56
57
  gpr_log(GPR_ERROR,
57
58
  "Fork support not enabled; try running with the "
@@ -71,7 +72,7 @@ void grpc_prefork() {
71
72
  return;
72
73
  }
73
74
  grpc_timer_manager_set_threading(false);
74
- grpc_executor_set_threading(false);
75
+ grpc_core::Executor::SetThreadingAll(false);
75
76
  grpc_core::ExecCtx::Get()->Flush();
76
77
  grpc_core::Fork::AwaitThreads();
77
78
  skipped_handler = false;
@@ -82,7 +83,7 @@ void grpc_postfork_parent() {
82
83
  grpc_core::Fork::AllowExecCtx();
83
84
  grpc_core::ExecCtx exec_ctx;
84
85
  grpc_timer_manager_set_threading(true);
85
- grpc_executor_set_threading(true);
86
+ grpc_core::Executor::SetThreadingAll(true);
86
87
  }
87
88
  }
88
89
 
@@ -96,7 +97,7 @@ void grpc_postfork_child() {
96
97
  reset_polling_engine();
97
98
  }
98
99
  grpc_timer_manager_set_threading(true);
99
- grpc_executor_set_threading(true);
100
+ grpc_core::Executor::SetThreadingAll(true);
100
101
  }
101
102
  }
102
103
 
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  *
3
- * Copyright 2017 gRPC authors.
3
+ * Copyright 2015 gRPC authors.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
6
6
  * you may not use this file except in compliance with the License.
@@ -16,20 +16,15 @@
16
16
  *
17
17
  */
18
18
 
19
- #ifndef GRPC_CORE_LIB_GPRPP_ATOMIC_WITH_STD_H
20
- #define GRPC_CORE_LIB_GPRPP_ATOMIC_WITH_STD_H
19
+ #ifndef GRPC_CORE_LIB_IOMGR_GRPC_IF_NAMETOINDEX_H
20
+ #define GRPC_CORE_LIB_IOMGR_GRPC_IF_NAMETOINDEX_H
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <atomic>
24
+ #include <stddef.h>
25
25
 
26
- namespace grpc_core {
26
+ /* Returns the interface index corresponding to the interface "name" provided.
27
+ * Returns non-zero upon success, and zero upon failure. */
28
+ uint32_t grpc_if_nametoindex(char* name);
27
29
 
28
- template <class T>
29
- using atomic = std::atomic<T>;
30
-
31
- typedef std::memory_order memory_order;
32
-
33
- } // namespace grpc_core
34
-
35
- #endif /* GRPC_CORE_LIB_GPRPP_ATOMIC_WITH_STD_H */
30
+ #endif /* GRPC_CORE_LIB_IOMGR_GRPC_IF_NAMETOINDEX_H */
@@ -0,0 +1,42 @@
1
+ /*
2
+ *
3
+ * Copyright 2016 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
+ */
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include "src/core/lib/iomgr/port.h"
22
+
23
+ #if GRPC_IF_NAMETOINDEX == 1 && defined(GRPC_POSIX_SOCKET_IF_NAMETOINDEX)
24
+
25
+ #include "src/core/lib/iomgr/grpc_if_nametoindex.h"
26
+
27
+ #include <errno.h>
28
+ #include <net/if.h>
29
+
30
+ #include <grpc/support/log.h>
31
+
32
+ uint32_t grpc_if_nametoindex(char* name) {
33
+ uint32_t out = if_nametoindex(name);
34
+ if (out == 0) {
35
+ gpr_log(GPR_DEBUG, "if_nametoindex failed for name %s. errno %d", name,
36
+ errno);
37
+ }
38
+ return out;
39
+ }
40
+
41
+ #endif /* GRPC_IF_NAMETOINDEX == 1 && \
42
+ defined(GRPC_POSIX_SOCKET_IF_NAMETOINDEX) */
@@ -16,17 +16,23 @@
16
16
  *
17
17
  */
18
18
 
19
- #ifndef GRPC_CORE_LIB_IOMGR_NETWORK_STATUS_TRACKER_H
20
- #define GRPC_CORE_LIB_IOMGR_NETWORK_STATUS_TRACKER_H
21
19
  #include <grpc/support/port_platform.h>
22
20
 
23
- #include "src/core/lib/iomgr/endpoint.h"
21
+ #include "src/core/lib/iomgr/port.h"
24
22
 
25
- void grpc_network_status_init(void);
26
- void grpc_network_status_shutdown(void);
23
+ #if GRPC_IF_NAMETOINDEX == 0 || !defined(GRPC_POSIX_SOCKET_IF_NAMETOINDEX)
27
24
 
28
- void grpc_network_status_register_endpoint(grpc_endpoint* ep);
29
- void grpc_network_status_unregister_endpoint(grpc_endpoint* ep);
30
- void grpc_network_status_shutdown_all_endpoints();
25
+ #include "src/core/lib/iomgr/grpc_if_nametoindex.h"
31
26
 
32
- #endif /* GRPC_CORE_LIB_IOMGR_NETWORK_STATUS_TRACKER_H */
27
+ #include <grpc/support/log.h>
28
+
29
+ uint32_t grpc_if_nametoindex(char* name) {
30
+ gpr_log(GPR_DEBUG,
31
+ "Not attempting to convert interface name %s to index for current "
32
+ "platform.",
33
+ name);
34
+ return 0;
35
+ }
36
+
37
+ #endif /* GRPC_IF_NAMETOINDEX == 0 || \
38
+ !defined(GRPC_POSIX_SOCKET_IF_NAMETOINDEX) */
@@ -36,10 +36,9 @@ static bool errqueue_supported = false;
36
36
  bool kernel_supports_errqueue() { return errqueue_supported; }
37
37
 
38
38
  void grpc_errqueue_init() {
39
- /* Both-compile time and run-time linux kernel versions should be atleast 4.0.0
39
+ /* Both-compile time and run-time linux kernel versions should be at least 4.0.0
40
40
  */
41
- #ifdef LINUX_VERSION_CODE
42
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)
41
+ #ifdef GRPC_LINUX_ERRQUEUE
43
42
  struct utsname buffer;
44
43
  if (uname(&buffer) != 0) {
45
44
  gpr_log(GPR_ERROR, "uname: %s", strerror(errno));
@@ -55,8 +54,7 @@ void grpc_errqueue_init() {
55
54
  } else {
56
55
  gpr_log(GPR_DEBUG, "ERRQUEUE support not enabled");
57
56
  }
58
- #endif /* LINUX_VERSION_CODE <= KERNEL_VERSION(4, 0, 0) */
59
- #endif /* LINUX_VERSION_CODE */
57
+ #endif /* GRPC_LINUX_ERRQUEUE */
60
58
  }
61
59
  } /* namespace grpc_core */
62
60
 
@@ -37,6 +37,7 @@
37
37
  #ifdef GRPC_LINUX_ERRQUEUE
38
38
  #include <linux/errqueue.h>
39
39
  #include <linux/net_tstamp.h>
40
+ #include <linux/netlink.h>
40
41
  #include <sys/socket.h>
41
42
  #endif /* GRPC_LINUX_ERRQUEUE */
42
43
 
@@ -56,6 +57,12 @@ constexpr int SCM_TSTAMP_SND = 0;
56
57
  constexpr int SCM_TSTAMP_SCHED = 1;
57
58
  /* The timestamp type for when data acknowledged by peer. */
58
59
  constexpr int SCM_TSTAMP_ACK = 2;
60
+
61
+ /* Control message type containing OPT_STATS */
62
+ #ifndef SCM_TIMESTAMPING_OPT_STATS
63
+ #define SCM_TIMESTAMPING_OPT_STATS 54
64
+ #endif
65
+
59
66
  /* Redefine required constants from <linux/net_tstamp.h> */
60
67
  constexpr uint32_t SOF_TIMESTAMPING_TX_SOFTWARE = 1u << 1;
61
68
  constexpr uint32_t SOF_TIMESTAMPING_SOFTWARE = 1u << 4;
@@ -63,13 +70,108 @@ constexpr uint32_t SOF_TIMESTAMPING_OPT_ID = 1u << 7;
63
70
  constexpr uint32_t SOF_TIMESTAMPING_TX_SCHED = 1u << 8;
64
71
  constexpr uint32_t SOF_TIMESTAMPING_TX_ACK = 1u << 9;
65
72
  constexpr uint32_t SOF_TIMESTAMPING_OPT_TSONLY = 1u << 11;
73
+ constexpr uint32_t SOF_TIMESTAMPING_OPT_STATS = 1u << 12;
66
74
 
67
- constexpr uint32_t kTimestampingSocketOptions = SOF_TIMESTAMPING_SOFTWARE |
68
- SOF_TIMESTAMPING_OPT_ID |
69
- SOF_TIMESTAMPING_OPT_TSONLY;
75
+ constexpr uint32_t kTimestampingSocketOptions =
76
+ SOF_TIMESTAMPING_SOFTWARE | SOF_TIMESTAMPING_OPT_ID |
77
+ SOF_TIMESTAMPING_OPT_TSONLY | SOF_TIMESTAMPING_OPT_STATS;
70
78
  constexpr uint32_t kTimestampingRecordingOptions =
71
79
  SOF_TIMESTAMPING_TX_SCHED | SOF_TIMESTAMPING_TX_SOFTWARE |
72
80
  SOF_TIMESTAMPING_TX_ACK;
81
+
82
+ /* Netlink attribute types used for TCP opt stats. */
83
+ enum TCPOptStats {
84
+ TCP_NLA_PAD,
85
+ TCP_NLA_BUSY, /* Time (usec) busy sending data. */
86
+ TCP_NLA_RWND_LIMITED, /* Time (usec) limited by receive window. */
87
+ TCP_NLA_SNDBUF_LIMITED, /* Time (usec) limited by send buffer. */
88
+ TCP_NLA_DATA_SEGS_OUT, /* Data pkts sent including retransmission. */
89
+ TCP_NLA_TOTAL_RETRANS, /* Data pkts retransmitted. */
90
+ TCP_NLA_PACING_RATE, /* Pacing rate in Bps. */
91
+ TCP_NLA_DELIVERY_RATE, /* Delivery rate in Bps. */
92
+ TCP_NLA_SND_CWND, /* Sending congestion window. */
93
+ TCP_NLA_REORDERING, /* Reordering metric. */
94
+ TCP_NLA_MIN_RTT, /* minimum RTT. */
95
+ TCP_NLA_RECUR_RETRANS, /* Recurring retransmits for the current pkt. */
96
+ TCP_NLA_DELIVERY_RATE_APP_LMT, /* Delivery rate application limited? */
97
+ TCP_NLA_SNDQ_SIZE, /* Data (bytes) pending in send queue */
98
+ TCP_NLA_CA_STATE, /* ca_state of socket */
99
+ TCP_NLA_SND_SSTHRESH, /* Slow start size threshold */
100
+ TCP_NLA_DELIVERED, /* Data pkts delivered incl. out-of-order */
101
+ TCP_NLA_DELIVERED_CE, /* Like above but only ones w/ CE marks */
102
+ TCP_NLA_BYTES_SENT, /* Data bytes sent including retransmission */
103
+ TCP_NLA_BYTES_RETRANS, /* Data bytes retransmitted */
104
+ TCP_NLA_DSACK_DUPS, /* DSACK blocks received */
105
+ TCP_NLA_REORD_SEEN, /* reordering events seen */
106
+ TCP_NLA_SRTT, /* smoothed RTT in usecs */
107
+ };
108
+
109
+ /* tcp_info from from linux/tcp.h */
110
+ struct tcp_info {
111
+ uint8_t tcpi_state;
112
+ uint8_t tcpi_ca_state;
113
+ uint8_t tcpi_retransmits;
114
+ uint8_t tcpi_probes;
115
+ uint8_t tcpi_backoff;
116
+ uint8_t tcpi_options;
117
+ uint8_t tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;
118
+ uint8_t tcpi_delivery_rate_app_limited : 1;
119
+ uint32_t tcpi_rto;
120
+ uint32_t tcpi_ato;
121
+ uint32_t tcpi_snd_mss;
122
+ uint32_t tcpi_rcv_mss;
123
+ uint32_t tcpi_unacked;
124
+ uint32_t tcpi_sacked;
125
+ uint32_t tcpi_lost;
126
+ uint32_t tcpi_retrans;
127
+ uint32_t tcpi_fackets;
128
+ /* Times. */
129
+ uint32_t tcpi_last_data_sent;
130
+ uint32_t tcpi_last_ack_sent; /* Not remembered, sorry. */
131
+ uint32_t tcpi_last_data_recv;
132
+ uint32_t tcpi_last_ack_recv;
133
+ /* Metrics. */
134
+ uint32_t tcpi_pmtu;
135
+ uint32_t tcpi_rcv_ssthresh;
136
+ uint32_t tcpi_rtt;
137
+ uint32_t tcpi_rttvar;
138
+ uint32_t tcpi_snd_ssthresh;
139
+ uint32_t tcpi_snd_cwnd;
140
+ uint32_t tcpi_advmss;
141
+ uint32_t tcpi_reordering;
142
+ uint32_t tcpi_rcv_rtt;
143
+ uint32_t tcpi_rcv_space;
144
+ uint32_t tcpi_total_retrans;
145
+ uint64_t tcpi_pacing_rate;
146
+ uint64_t tcpi_max_pacing_rate;
147
+ uint64_t tcpi_bytes_acked; /* RFC4898 tcpEStatsAppHCThruOctetsAcked */
148
+ uint64_t tcpi_bytes_received; /* RFC4898 tcpEStatsAppHCThruOctetsReceived */
149
+
150
+ uint32_t tcpi_segs_out; /* RFC4898 tcpEStatsPerfSegsOut */
151
+ uint32_t tcpi_segs_in; /* RFC4898 tcpEStatsPerfSegsIn */
152
+ uint32_t tcpi_notsent_bytes;
153
+ uint32_t tcpi_min_rtt;
154
+
155
+ uint32_t tcpi_data_segs_in; /* RFC4898 tcpEStatsDataSegsIn */
156
+ uint32_t tcpi_data_segs_out; /* RFC4898 tcpEStatsDataSegsOut */
157
+
158
+ uint64_t tcpi_delivery_rate;
159
+ uint64_t tcpi_busy_time; /* Time (usec) busy sending data */
160
+ uint64_t tcpi_rwnd_limited; /* Time (usec) limited by receive window */
161
+ uint64_t tcpi_sndbuf_limited; /* Time (usec) limited by send buffer */
162
+
163
+ uint32_t tcpi_delivered;
164
+ uint32_t tcpi_delivered_ce;
165
+ uint64_t tcpi_bytes_sent; /* RFC4898 tcpEStatsPerfHCDataOctetsOut */
166
+ uint64_t tcpi_bytes_retrans; /* RFC4898 tcpEStatsPerfOctetsRetrans */
167
+ uint32_t tcpi_dsack_dups; /* RFC4898 tcpEStatsStackDSACKDups */
168
+ uint32_t tcpi_reord_seen; /* reordering events seen */
169
+ socklen_t length; /* Length of struct returned by kernel */
170
+ };
171
+
172
+ #ifndef TCP_INFO
173
+ #define TCP_INFO 11
174
+ #endif
73
175
  #endif /* GRPC_LINUX_ERRQUEUE */
74
176
 
75
177
  /* Returns true if kernel is capable of supporting errqueue and timestamping.
@@ -29,23 +29,27 @@
29
29
  #include <grpc/support/string_util.h>
30
30
  #include <grpc/support/sync.h>
31
31
 
32
- #include "src/core/lib/gpr/env.h"
33
32
  #include "src/core/lib/gpr/string.h"
34
33
  #include "src/core/lib/gpr/useful.h"
34
+ #include "src/core/lib/gprpp/global_config.h"
35
35
  #include "src/core/lib/gprpp/thd.h"
36
36
  #include "src/core/lib/iomgr/buffer_list.h"
37
37
  #include "src/core/lib/iomgr/exec_ctx.h"
38
38
  #include "src/core/lib/iomgr/executor.h"
39
39
  #include "src/core/lib/iomgr/internal_errqueue.h"
40
40
  #include "src/core/lib/iomgr/iomgr_internal.h"
41
- #include "src/core/lib/iomgr/network_status_tracker.h"
42
41
  #include "src/core/lib/iomgr/timer.h"
43
42
  #include "src/core/lib/iomgr/timer_manager.h"
44
43
 
44
+ GPR_GLOBAL_CONFIG_DEFINE_BOOL(grpc_abort_on_leaks, false,
45
+ "A debugging aid to cause a call to abort() when "
46
+ "gRPC objects are leaked past grpc_shutdown()");
47
+
45
48
  static gpr_mu g_mu;
46
49
  static gpr_cv g_rcv;
47
50
  static int g_shutdown;
48
51
  static grpc_iomgr_object g_root_object;
52
+ static bool g_grpc_abort_on_leaks;
49
53
 
50
54
  void grpc_iomgr_init() {
51
55
  grpc_core::ExecCtx exec_ctx;
@@ -53,13 +57,13 @@ void grpc_iomgr_init() {
53
57
  g_shutdown = 0;
54
58
  gpr_mu_init(&g_mu);
55
59
  gpr_cv_init(&g_rcv);
56
- grpc_executor_init();
57
- grpc_timer_list_init();
60
+ grpc_core::Executor::InitAll();
58
61
  g_root_object.next = g_root_object.prev = &g_root_object;
59
62
  g_root_object.name = (char*)"root";
60
- grpc_network_status_init();
61
63
  grpc_iomgr_platform_init();
64
+ grpc_timer_list_init();
62
65
  grpc_core::grpc_errqueue_init();
66
+ g_grpc_abort_on_leaks = GPR_GLOBAL_CONFIG_GET(grpc_abort_on_leaks);
63
67
  }
64
68
 
65
69
  void grpc_iomgr_start() { grpc_timer_manager_init(); }
@@ -90,7 +94,7 @@ void grpc_iomgr_shutdown() {
90
94
  {
91
95
  grpc_timer_manager_shutdown();
92
96
  grpc_iomgr_platform_flush();
93
- grpc_executor_shutdown();
97
+ grpc_core::Executor::ShutdownAll();
94
98
 
95
99
  gpr_mu_lock(&g_mu);
96
100
  g_shutdown = 1;
@@ -152,7 +156,6 @@ void grpc_iomgr_shutdown() {
152
156
  gpr_mu_unlock(&g_mu);
153
157
 
154
158
  grpc_iomgr_platform_shutdown();
155
- grpc_network_status_shutdown();
156
159
  gpr_mu_destroy(&g_mu);
157
160
  gpr_cv_destroy(&g_rcv);
158
161
  }
@@ -161,6 +164,15 @@ void grpc_iomgr_shutdown_background_closure() {
161
164
  grpc_iomgr_platform_shutdown_background_closure();
162
165
  }
163
166
 
167
+ bool grpc_iomgr_is_any_background_poller_thread() {
168
+ return grpc_iomgr_platform_is_any_background_poller_thread();
169
+ }
170
+
171
+ bool grpc_iomgr_add_closure_to_background_poller(grpc_closure* closure,
172
+ grpc_error* error) {
173
+ return grpc_iomgr_platform_add_closure_to_background_poller(closure, error);
174
+ }
175
+
164
176
  void grpc_iomgr_register_object(grpc_iomgr_object* obj, const char* name) {
165
177
  obj->name = gpr_strdup(name);
166
178
  gpr_mu_lock(&g_mu);
@@ -179,9 +191,4 @@ void grpc_iomgr_unregister_object(grpc_iomgr_object* obj) {
179
191
  gpr_free(obj->name);
180
192
  }
181
193
 
182
- bool grpc_iomgr_abort_on_leaks(void) {
183
- char* env = gpr_getenv("GRPC_ABORT_ON_LEAKS");
184
- bool should_we = gpr_is_true(env);
185
- gpr_free(env);
186
- return should_we;
187
- }
194
+ bool grpc_iomgr_abort_on_leaks(void) { return g_grpc_abort_on_leaks; }
@@ -21,6 +21,7 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include "src/core/lib/iomgr/closure.h"
24
25
  #include "src/core/lib/iomgr/port.h"
25
26
 
26
27
  #include <stdlib.h>
@@ -39,6 +40,20 @@ void grpc_iomgr_shutdown();
39
40
  * background poller. */
40
41
  void grpc_iomgr_shutdown_background_closure();
41
42
 
43
+ /* Returns true if polling engine runs in the background, false otherwise.
44
+ * Currently only 'epollbg' runs in the background.
45
+ */
46
+ bool grpc_iomgr_run_in_background();
47
+
48
+ /** Returns true if the caller is a worker thread for any background poller. */
49
+ bool grpc_iomgr_is_any_background_poller_thread();
50
+
51
+ /** Returns true if the closure is registered into the background poller. Note
52
+ * that the closure may or may not run yet when this function returns, and the
53
+ * closure should not be blocking or long-running. */
54
+ bool grpc_iomgr_add_closure_to_background_poller(grpc_closure* closure,
55
+ grpc_error* error);
56
+
42
57
  /* Exposed only for testing */
43
58
  size_t grpc_iomgr_count_objects_for_testing();
44
59
 
@@ -34,22 +34,36 @@ gpr_thd_id g_init_thread;
34
34
 
35
35
  static void iomgr_platform_init(void) {
36
36
  grpc_core::ExecCtx exec_ctx;
37
- grpc_executor_set_threading(false);
37
+ grpc_core::Executor::SetThreadingAll(false);
38
38
  g_init_thread = gpr_thd_currentid();
39
39
  grpc_pollset_global_init();
40
40
  }
41
41
  static void iomgr_platform_flush(void) {}
42
42
  static void iomgr_platform_shutdown(void) { grpc_pollset_global_shutdown(); }
43
43
  static void iomgr_platform_shutdown_background_closure(void) {}
44
+ static bool iomgr_platform_is_any_background_poller_thread(void) {
45
+ return false;
46
+ }
47
+ static bool iomgr_platform_add_closure_to_background_poller(
48
+ grpc_closure* closure, grpc_error* error) {
49
+ return false;
50
+ }
51
+
52
+ bool g_custom_iomgr_enabled = false;
44
53
 
45
54
  static grpc_iomgr_platform_vtable vtable = {
46
- iomgr_platform_init, iomgr_platform_flush, iomgr_platform_shutdown,
47
- iomgr_platform_shutdown_background_closure};
55
+ iomgr_platform_init,
56
+ iomgr_platform_flush,
57
+ iomgr_platform_shutdown,
58
+ iomgr_platform_shutdown_background_closure,
59
+ iomgr_platform_is_any_background_poller_thread,
60
+ iomgr_platform_add_closure_to_background_poller};
48
61
 
49
62
  void grpc_custom_iomgr_init(grpc_socket_vtable* socket,
50
63
  grpc_custom_resolver_vtable* resolver,
51
64
  grpc_custom_timer_vtable* timer,
52
65
  grpc_custom_poller_vtable* poller) {
66
+ g_custom_iomgr_enabled = true;
53
67
  grpc_custom_endpoint_init(socket);
54
68
  grpc_custom_timer_init(timer);
55
69
  grpc_custom_pollset_init(poller);
@@ -39,6 +39,8 @@ extern gpr_thd_id g_init_thread;
39
39
  #define GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD()
40
40
  #endif /* GRPC_CUSTOM_IOMGR_THREAD_CHECK */
41
41
 
42
+ extern bool g_custom_iomgr_enabled;
43
+
42
44
  void grpc_custom_iomgr_init(grpc_socket_vtable* socket,
43
45
  grpc_custom_resolver_vtable* resolver,
44
46
  grpc_custom_timer_vtable* timer,
@@ -45,3 +45,13 @@ void grpc_iomgr_platform_shutdown() { iomgr_platform_vtable->shutdown(); }
45
45
  void grpc_iomgr_platform_shutdown_background_closure() {
46
46
  iomgr_platform_vtable->shutdown_background_closure();
47
47
  }
48
+
49
+ bool grpc_iomgr_platform_is_any_background_poller_thread() {
50
+ return iomgr_platform_vtable->is_any_background_poller_thread();
51
+ }
52
+
53
+ bool grpc_iomgr_platform_add_closure_to_background_poller(grpc_closure* closure,
54
+ grpc_error* error) {
55
+ return iomgr_platform_vtable->add_closure_to_background_poller(closure,
56
+ error);
57
+ }
@@ -36,6 +36,9 @@ typedef struct grpc_iomgr_platform_vtable {
36
36
  void (*flush)(void);
37
37
  void (*shutdown)(void);
38
38
  void (*shutdown_background_closure)(void);
39
+ bool (*is_any_background_poller_thread)(void);
40
+ bool (*add_closure_to_background_poller)(grpc_closure* closure,
41
+ grpc_error* error);
39
42
  } grpc_iomgr_platform_vtable;
40
43
 
41
44
  void grpc_iomgr_register_object(grpc_iomgr_object* obj, const char* name);
@@ -56,6 +59,15 @@ void grpc_iomgr_platform_shutdown(void);
56
59
  /** shut down all the closures registered in the background poller */
57
60
  void grpc_iomgr_platform_shutdown_background_closure(void);
58
61
 
62
+ /** return true if the caller is a worker thread for any background poller */
63
+ bool grpc_iomgr_platform_is_any_background_poller_thread(void);
64
+
65
+ /** Return true if the closure is registered into the background poller. Note
66
+ * that the closure may or may not run yet when this function returns, and the
67
+ * closure should not be blocking or long-running. */
68
+ bool grpc_iomgr_platform_add_closure_to_background_poller(grpc_closure* closure,
69
+ grpc_error* error);
70
+
59
71
  bool grpc_iomgr_abort_on_leaks(void);
60
72
 
61
73
  #endif /* GRPC_CORE_LIB_IOMGR_IOMGR_INTERNAL_H */