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
@@ -55,9 +55,22 @@ static void iomgr_platform_shutdown_background_closure(void) {
55
55
  grpc_shutdown_background_closure();
56
56
  }
57
57
 
58
+ static bool iomgr_platform_is_any_background_poller_thread(void) {
59
+ return grpc_is_any_background_poller_thread();
60
+ }
61
+
62
+ static bool iomgr_platform_add_closure_to_background_poller(
63
+ grpc_closure* closure, grpc_error* error) {
64
+ return grpc_add_closure_to_background_poller(closure, error);
65
+ }
66
+
58
67
  static grpc_iomgr_platform_vtable vtable = {
59
- iomgr_platform_init, iomgr_platform_flush, iomgr_platform_shutdown,
60
- iomgr_platform_shutdown_background_closure};
68
+ iomgr_platform_init,
69
+ iomgr_platform_flush,
70
+ iomgr_platform_shutdown,
71
+ iomgr_platform_shutdown_background_closure,
72
+ iomgr_platform_is_any_background_poller_thread,
73
+ iomgr_platform_add_closure_to_background_poller};
61
74
 
62
75
  void grpc_set_default_iomgr_platform() {
63
76
  grpc_set_tcp_client_impl(&grpc_posix_tcp_client_vtable);
@@ -69,4 +82,8 @@ void grpc_set_default_iomgr_platform() {
69
82
  grpc_set_iomgr_platform_vtable(&vtable);
70
83
  }
71
84
 
85
+ bool grpc_iomgr_run_in_background() {
86
+ return grpc_event_engine_run_in_background();
87
+ }
88
+
72
89
  #endif /* GRPC_POSIX_SOCKET_IOMGR */
@@ -0,0 +1,93 @@
1
+ /*
2
+ *
3
+ * Copyright 2015 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include "src/core/lib/iomgr/port.h"
22
+
23
+ #ifdef GRPC_CFSTREAM_IOMGR
24
+
25
+ #include "src/core/lib/debug/trace.h"
26
+ #include "src/core/lib/iomgr/ev_posix.h"
27
+ #include "src/core/lib/iomgr/iomgr_internal.h"
28
+ #include "src/core/lib/iomgr/iomgr_posix.h"
29
+ #include "src/core/lib/iomgr/resolve_address.h"
30
+ #include "src/core/lib/iomgr/tcp_client.h"
31
+ #include "src/core/lib/iomgr/tcp_posix.h"
32
+ #include "src/core/lib/iomgr/tcp_server.h"
33
+ #include "src/core/lib/iomgr/timer.h"
34
+
35
+ static const char* grpc_cfstream_env_var = "grpc_cfstream";
36
+
37
+ extern grpc_tcp_server_vtable grpc_posix_tcp_server_vtable;
38
+ extern grpc_tcp_client_vtable grpc_posix_tcp_client_vtable;
39
+ extern grpc_tcp_client_vtable grpc_cfstream_client_vtable;
40
+ extern grpc_timer_vtable grpc_generic_timer_vtable;
41
+ extern grpc_pollset_vtable grpc_posix_pollset_vtable;
42
+ extern grpc_pollset_set_vtable grpc_posix_pollset_set_vtable;
43
+ extern grpc_address_resolver_vtable grpc_posix_resolver_vtable;
44
+
45
+ static void iomgr_platform_init(void) {
46
+ grpc_wakeup_fd_global_init();
47
+ grpc_event_engine_init();
48
+ }
49
+
50
+ static void iomgr_platform_flush(void) {}
51
+
52
+ static void iomgr_platform_shutdown(void) {
53
+ grpc_event_engine_shutdown();
54
+ grpc_wakeup_fd_global_destroy();
55
+ }
56
+
57
+ static void iomgr_platform_shutdown_background_closure(void) {
58
+ grpc_shutdown_background_closure();
59
+ }
60
+
61
+ static bool iomgr_platform_is_any_background_poller_thread(void) {
62
+ return grpc_is_any_background_poller_thread();
63
+ }
64
+
65
+ static bool iomgr_platform_add_closure_to_background_poller(
66
+ grpc_closure* closure, grpc_error* error) {
67
+ return grpc_add_closure_to_background_poller(closure, error);
68
+ }
69
+
70
+ static grpc_iomgr_platform_vtable vtable = {
71
+ iomgr_platform_init,
72
+ iomgr_platform_flush,
73
+ iomgr_platform_shutdown,
74
+ iomgr_platform_shutdown_background_closure,
75
+ iomgr_platform_is_any_background_poller_thread,
76
+ iomgr_platform_add_closure_to_background_poller};
77
+
78
+ void grpc_set_default_iomgr_platform() {
79
+ char* enable_cfstream = getenv(grpc_cfstream_env_var);
80
+ grpc_tcp_client_vtable* client_vtable = &grpc_posix_tcp_client_vtable;
81
+ if (enable_cfstream != nullptr && enable_cfstream[0] == '1') {
82
+ client_vtable = &grpc_cfstream_client_vtable;
83
+ }
84
+ grpc_set_tcp_client_impl(client_vtable);
85
+ grpc_set_tcp_server_impl(&grpc_posix_tcp_server_vtable);
86
+ grpc_set_timer_impl(&grpc_generic_timer_vtable);
87
+ grpc_set_pollset_vtable(&grpc_posix_pollset_vtable);
88
+ grpc_set_pollset_set_vtable(&grpc_posix_pollset_set_vtable);
89
+ grpc_set_resolver_impl(&grpc_posix_resolver_vtable);
90
+ grpc_set_iomgr_platform_vtable(&vtable);
91
+ }
92
+
93
+ #endif /* GRPC_CFSTREAM_IOMGR */
@@ -61,6 +61,7 @@ static void iomgr_platform_init(void) {
61
61
  winsock_init();
62
62
  grpc_iocp_init();
63
63
  grpc_pollset_global_init();
64
+ grpc_wsa_socket_flags_init();
64
65
  }
65
66
 
66
67
  static void iomgr_platform_flush(void) { grpc_iocp_flush(); }
@@ -73,9 +74,22 @@ static void iomgr_platform_shutdown(void) {
73
74
 
74
75
  static void iomgr_platform_shutdown_background_closure(void) {}
75
76
 
77
+ static bool iomgr_platform_is_any_background_poller_thread(void) {
78
+ return false;
79
+ }
80
+
81
+ static bool iomgr_platform_add_closure_to_background_poller(
82
+ grpc_closure* closure, grpc_error* error) {
83
+ return false;
84
+ }
85
+
76
86
  static grpc_iomgr_platform_vtable vtable = {
77
- iomgr_platform_init, iomgr_platform_flush, iomgr_platform_shutdown,
78
- iomgr_platform_shutdown_background_closure};
87
+ iomgr_platform_init,
88
+ iomgr_platform_flush,
89
+ iomgr_platform_shutdown,
90
+ iomgr_platform_shutdown_background_closure,
91
+ iomgr_platform_is_any_background_poller_thread,
92
+ iomgr_platform_add_closure_to_background_poller};
79
93
 
80
94
  void grpc_set_default_iomgr_platform() {
81
95
  grpc_set_tcp_client_impl(&grpc_windows_tcp_client_vtable);
@@ -87,4 +101,6 @@ void grpc_set_default_iomgr_platform() {
87
101
  grpc_set_iomgr_platform_vtable(&vtable);
88
102
  }
89
103
 
104
+ bool grpc_iomgr_run_in_background() { return false; }
105
+
90
106
  #endif /* GRPC_WINSOCK_SOCKET */
@@ -24,7 +24,7 @@
24
24
 
25
25
  #include "src/core/lib/debug/trace.h"
26
26
 
27
- extern grpc_core::TraceFlag grpc_polling_trace;
27
+ extern grpc_core::DebugOnlyTraceFlag grpc_polling_trace;
28
28
 
29
29
  /* 'state' holds the to call when the fd is readable or writable respectively.
30
30
  It can contain one of the following values:
@@ -94,7 +94,7 @@ void LockfreeEvent::NotifyOn(grpc_closure* closure) {
94
94
  * sure that the shutdown error has been initialized properly before us
95
95
  * referencing it. */
96
96
  gpr_atm curr = gpr_atm_acq_load(&state_);
97
- if (grpc_polling_trace.enabled()) {
97
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_trace)) {
98
98
  gpr_log(GPR_ERROR, "LockfreeEvent::NotifyOn: %p curr=%p closure=%p", this,
99
99
  (void*)curr, closure);
100
100
  }
@@ -160,7 +160,7 @@ bool LockfreeEvent::SetShutdown(grpc_error* shutdown_err) {
160
160
 
161
161
  while (true) {
162
162
  gpr_atm curr = gpr_atm_no_barrier_load(&state_);
163
- if (grpc_polling_trace.enabled()) {
163
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_trace)) {
164
164
  gpr_log(GPR_ERROR, "LockfreeEvent::SetShutdown: %p curr=%p err=%s",
165
165
  &state_, (void*)curr, grpc_error_string(shutdown_err));
166
166
  }
@@ -209,7 +209,7 @@ void LockfreeEvent::SetReady() {
209
209
  while (true) {
210
210
  gpr_atm curr = gpr_atm_no_barrier_load(&state_);
211
211
 
212
- if (grpc_polling_trace.enabled()) {
212
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_trace)) {
213
213
  gpr_log(GPR_ERROR, "LockfreeEvent::SetReady: %p curr=%p", &state_,
214
214
  (void*)curr);
215
215
  }
@@ -26,6 +26,11 @@
26
26
  #define GRPC_CUSTOM_SOCKET
27
27
  #endif
28
28
  #endif
29
+ /* This needs to be separate from the other conditions because it needs to
30
+ * apply to custom sockets too */
31
+ #ifdef GPR_WINDOWS
32
+ #define GRPC_ARES_RESOLVE_LOCALHOST_MANUALLY 1
33
+ #endif
29
34
  #if defined(GRPC_CUSTOM_SOCKET)
30
35
  // Do Nothing
31
36
  #elif defined(GPR_MANYLINUX1)
@@ -44,6 +49,7 @@
44
49
  #elif defined(GPR_WINDOWS)
45
50
  #define GRPC_WINSOCK_SOCKET 1
46
51
  #define GRPC_WINDOWS_SOCKETUTILS 1
52
+ #define GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER 1
47
53
  #elif defined(GPR_ANDROID)
48
54
  #define GRPC_HAVE_IPV6_RECVPKTINFO 1
49
55
  #define GRPC_HAVE_IP_PKTINFO 1
@@ -60,6 +66,9 @@
60
66
  #define GRPC_HAVE_IP_PKTINFO 1
61
67
  #define GRPC_HAVE_MSG_NOSIGNAL 1
62
68
  #define GRPC_HAVE_UNIX_SOCKET 1
69
+ /* Linux has TCP_INQ support since 4.18, but it is safe to set
70
+ the socket option on older kernels. */
71
+ #define GRPC_HAVE_TCP_INQ 1
63
72
  #ifdef LINUX_VERSION_CODE
64
73
  #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)
65
74
  #define GRPC_LINUX_ERRQUEUE 1
@@ -85,6 +94,15 @@
85
94
  #ifdef LINUX_VERSION_CODE
86
95
  #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)
87
96
  #define GRPC_HAVE_TCP_USER_TIMEOUT
97
+ #ifdef __GLIBC_PREREQ
98
+ #if !(__GLIBC_PREREQ(2, 17))
99
+ /*
100
+ * TCP_USER_TIMEOUT wasn't imported to glibc until 2.17. Use Linux system
101
+ * header instead.
102
+ */
103
+ #define GRPC_LINUX_TCP_H 1
104
+ #endif /* __GLIBC_PREREQ(2, 17) */
105
+ #endif /* ifdef __GLIBC_PREREQ */
88
106
  #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37) */
89
107
  #endif /* LINUX_VERSION_CODE */
90
108
  #ifndef __GLIBC__
@@ -167,6 +185,22 @@
167
185
  #define GRPC_POSIX_SOCKET 1
168
186
  #define GRPC_POSIX_SOCKETUTILS 1
169
187
  #define GRPC_POSIX_WAKEUP_FD 1
188
+ #elif defined(GPR_FUCHSIA)
189
+ #define GRPC_HAVE_IFADDRS 1
190
+ #define GRPC_HAVE_IPV6_RECVPKTINFO 1
191
+ #define GRPC_HAVE_IP_PKTINFO 1
192
+ // Zircon does not support the MSG_NOSIGNAL flag since it doesn't support
193
+ // signals.
194
+ #undef GRPC_HAVE_MSG_NOSIGNAL
195
+ #define GRPC_HAVE_UNIX_SOCKET 1
196
+ #define GRPC_POSIX_WAKEUP_FD 1
197
+ // TODO(rudominer) Check that this does something we want.
198
+ #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
199
+ #define GRPC_POSIX_SOCKET 1
200
+ #define GRPC_POSIX_SOCKETADDR 1
201
+ // TODO(rudominer) Check this does something we want.
202
+ #define GRPC_POSIX_SOCKETUTILS 1
203
+ #define GRPC_TIMER_USE_GENERIC 1
170
204
  #elif !defined(GPR_NO_AUTODETECT_PLATFORM)
171
205
  #error "Platform not recognized"
172
206
  #endif
@@ -184,6 +218,7 @@
184
218
  #define GRPC_POSIX_SOCKET_EV_EPOLLEX 1
185
219
  #define GRPC_POSIX_SOCKET_EV_POLL 1
186
220
  #define GRPC_POSIX_SOCKET_EV_EPOLL1 1
221
+ #define GRPC_POSIX_SOCKET_IF_NAMETOINDEX 1
187
222
  #define GRPC_POSIX_SOCKET_IOMGR 1
188
223
  #define GRPC_POSIX_SOCKET_RESOLVE_ADDRESS 1
189
224
  #define GRPC_POSIX_SOCKET_SOCKADDR 1
@@ -105,7 +105,7 @@ static grpc_error* posix_blocking_resolve_address(
105
105
  grpc_error_set_str(
106
106
  grpc_error_set_str(
107
107
  grpc_error_set_int(
108
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("OS Error"),
108
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING(gai_strerror(s)),
109
109
  GRPC_ERROR_INT_ERRNO, s),
110
110
  GRPC_ERROR_STR_OS_ERROR,
111
111
  grpc_slice_from_static_string(gai_strerror(s))),
@@ -150,7 +150,7 @@ typedef struct {
150
150
  void* arg;
151
151
  } request;
152
152
 
153
- /* Callback to be passed to grpc_executor to asynch-ify
153
+ /* Callback to be passed to grpc Executor to asynch-ify
154
154
  * grpc_blocking_resolve_address */
155
155
  static void do_request_thread(void* rp, grpc_error* error) {
156
156
  request* r = static_cast<request*>(rp);
@@ -168,7 +168,8 @@ static void posix_resolve_address(const char* name, const char* default_port,
168
168
  request* r = static_cast<request*>(gpr_malloc(sizeof(request)));
169
169
  GRPC_CLOSURE_INIT(
170
170
  &r->request_closure, do_request_thread, r,
171
- grpc_executor_scheduler(GRPC_RESOLVER_EXECUTOR, GRPC_EXECUTOR_SHORT));
171
+ grpc_core::Executor::Scheduler(grpc_core::ExecutorType::RESOLVER,
172
+ grpc_core::ExecutorJobType::SHORT));
172
173
  r->name = gpr_strdup(name);
173
174
  r->default_port = gpr_strdup(default_port);
174
175
  r->on_done = on_done;
@@ -153,7 +153,8 @@ static void windows_resolve_address(const char* name, const char* default_port,
153
153
  request* r = (request*)gpr_malloc(sizeof(request));
154
154
  GRPC_CLOSURE_INIT(
155
155
  &r->request_closure, do_request_thread, r,
156
- grpc_executor_scheduler(GRPC_RESOLVER_EXECUTOR, GRPC_EXECUTOR_SHORT));
156
+ grpc_core::Executor::Scheduler(grpc_core::ExecutorType::RESOLVER,
157
+ grpc_core::ExecutorJobType::SHORT));
157
158
  r->name = gpr_strdup(name);
158
159
  r->default_port = gpr_strdup(default_port);
159
160
  r->on_done = on_done;
@@ -32,6 +32,7 @@
32
32
 
33
33
  #include "src/core/lib/gpr/useful.h"
34
34
  #include "src/core/lib/iomgr/combiner.h"
35
+ #include "src/core/lib/slice/slice_internal.h"
35
36
 
36
37
  grpc_core::TraceFlag grpc_resource_quota_trace(false, "resource_quota");
37
38
 
@@ -316,7 +317,7 @@ static bool rq_alloc(grpc_resource_quota* resource_quota) {
316
317
  while ((resource_user = rulist_pop_head(resource_quota,
317
318
  GRPC_RULIST_AWAITING_ALLOCATION))) {
318
319
  gpr_mu_lock(&resource_user->mu);
319
- if (grpc_resource_quota_trace.enabled()) {
320
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
320
321
  gpr_log(GPR_INFO,
321
322
  "RQ: check allocation for user %p shutdown=%" PRIdPTR
322
323
  " free_pool=%" PRId64,
@@ -342,14 +343,14 @@ static bool rq_alloc(grpc_resource_quota* resource_quota) {
342
343
  resource_user->free_pool = 0;
343
344
  resource_quota->free_pool -= amt;
344
345
  rq_update_estimate(resource_quota);
345
- if (grpc_resource_quota_trace.enabled()) {
346
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
346
347
  gpr_log(GPR_INFO,
347
348
  "RQ %s %s: grant alloc %" PRId64
348
349
  " bytes; rq_free_pool -> %" PRId64,
349
350
  resource_quota->name, resource_user->name, amt,
350
351
  resource_quota->free_pool);
351
352
  }
352
- } else if (grpc_resource_quota_trace.enabled() &&
353
+ } else if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace) &&
353
354
  resource_user->free_pool >= 0) {
354
355
  gpr_log(GPR_INFO, "RQ %s %s: discard already satisfied alloc request",
355
356
  resource_quota->name, resource_user->name);
@@ -381,7 +382,7 @@ static bool rq_reclaim_from_per_user_free_pool(
381
382
  resource_user->free_pool = 0;
382
383
  resource_quota->free_pool += amt;
383
384
  rq_update_estimate(resource_quota);
384
- if (grpc_resource_quota_trace.enabled()) {
385
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
385
386
  gpr_log(GPR_INFO,
386
387
  "RQ %s %s: reclaim_from_per_user_free_pool %" PRId64
387
388
  " bytes; rq_free_pool -> %" PRId64,
@@ -391,7 +392,7 @@ static bool rq_reclaim_from_per_user_free_pool(
391
392
  gpr_mu_unlock(&resource_user->mu);
392
393
  return true;
393
394
  } else {
394
- if (grpc_resource_quota_trace.enabled()) {
395
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
395
396
  gpr_log(GPR_INFO,
396
397
  "RQ %s %s: failed to reclaim_from_per_user_free_pool; "
397
398
  "free_pool = %" PRId64 "; rq_free_pool = %" PRId64,
@@ -411,7 +412,7 @@ static bool rq_reclaim(grpc_resource_quota* resource_quota, bool destructive) {
411
412
  : GRPC_RULIST_RECLAIMER_BENIGN;
412
413
  grpc_resource_user* resource_user = rulist_pop_head(resource_quota, list);
413
414
  if (resource_user == nullptr) return false;
414
- if (grpc_resource_quota_trace.enabled()) {
415
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
415
416
  gpr_log(GPR_INFO, "RQ %s %s: initiate %s reclamation", resource_quota->name,
416
417
  resource_user->name, destructive ? "destructive" : "benign");
417
418
  }
@@ -430,41 +431,43 @@ static bool rq_reclaim(grpc_resource_quota* resource_quota, bool destructive) {
430
431
  * ru_slice: a slice implementation that is backed by a grpc_resource_user
431
432
  */
432
433
 
433
- typedef struct {
434
- grpc_slice_refcount base;
435
- gpr_refcount refs;
436
- grpc_resource_user* resource_user;
437
- size_t size;
438
- } ru_slice_refcount;
434
+ namespace grpc_core {
439
435
 
440
- static void ru_slice_ref(void* p) {
441
- ru_slice_refcount* rc = static_cast<ru_slice_refcount*>(p);
442
- gpr_ref(&rc->refs);
443
- }
444
-
445
- static void ru_slice_unref(void* p) {
446
- ru_slice_refcount* rc = static_cast<ru_slice_refcount*>(p);
447
- if (gpr_unref(&rc->refs)) {
448
- grpc_resource_user_free(rc->resource_user, rc->size);
436
+ class RuSliceRefcount {
437
+ public:
438
+ static void Destroy(void* p) {
439
+ auto* rc = static_cast<RuSliceRefcount*>(p);
440
+ rc->~RuSliceRefcount();
449
441
  gpr_free(rc);
450
442
  }
451
- }
443
+ RuSliceRefcount(grpc_resource_user* resource_user, size_t size)
444
+ : base_(grpc_slice_refcount::Type::REGULAR, &refs_, Destroy, this,
445
+ &base_),
446
+ resource_user_(resource_user),
447
+ size_(size) {
448
+ // Nothing to do here.
449
+ }
450
+ ~RuSliceRefcount() { grpc_resource_user_free(resource_user_, size_); }
451
+
452
+ grpc_slice_refcount* base_refcount() { return &base_; }
452
453
 
453
- static const grpc_slice_refcount_vtable ru_slice_vtable = {
454
- ru_slice_ref, ru_slice_unref, grpc_slice_default_eq_impl,
455
- grpc_slice_default_hash_impl};
454
+ private:
455
+ grpc_slice_refcount base_;
456
+ RefCount refs_;
457
+ grpc_resource_user* resource_user_;
458
+ size_t size_;
459
+ };
460
+
461
+ } // namespace grpc_core
456
462
 
457
463
  static grpc_slice ru_slice_create(grpc_resource_user* resource_user,
458
464
  size_t size) {
459
- ru_slice_refcount* rc = static_cast<ru_slice_refcount*>(
460
- gpr_malloc(sizeof(ru_slice_refcount) + size));
461
- rc->base.vtable = &ru_slice_vtable;
462
- rc->base.sub_refcount = &rc->base;
463
- gpr_ref_init(&rc->refs, 1);
464
- rc->resource_user = resource_user;
465
- rc->size = size;
465
+ auto* rc = static_cast<grpc_core::RuSliceRefcount*>(
466
+ gpr_malloc(sizeof(grpc_core::RuSliceRefcount) + size));
467
+ new (rc) grpc_core::RuSliceRefcount(resource_user, size);
466
468
  grpc_slice slice;
467
- slice.refcount = &rc->base;
469
+
470
+ slice.refcount = rc->base_refcount();
468
471
  slice.data.refcounted.bytes = reinterpret_cast<uint8_t*>(rc + 1);
469
472
  slice.data.refcounted.length = size;
470
473
  return slice;
@@ -540,7 +543,7 @@ static void ru_post_destructive_reclaimer(void* ru, grpc_error* error) {
540
543
  }
541
544
 
542
545
  static void ru_shutdown(void* ru, grpc_error* error) {
543
- if (grpc_resource_quota_trace.enabled()) {
546
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
544
547
  gpr_log(GPR_INFO, "RU shutdown %p", ru);
545
548
  }
546
549
  grpc_resource_user* resource_user = static_cast<grpc_resource_user*>(ru);
@@ -882,7 +885,7 @@ static void resource_user_alloc_locked(grpc_resource_user* resource_user,
882
885
  grpc_closure* optional_on_done) {
883
886
  ru_ref_by(resource_user, static_cast<gpr_atm>(size));
884
887
  resource_user->free_pool -= static_cast<int64_t>(size);
885
- if (grpc_resource_quota_trace.enabled()) {
888
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
886
889
  gpr_log(GPR_INFO, "RQ %s %s: alloc %" PRIdPTR "; free_pool -> %" PRId64,
887
890
  resource_user->resource_quota->name, resource_user->name, size,
888
891
  resource_user->free_pool);
@@ -941,7 +944,7 @@ void grpc_resource_user_free(grpc_resource_user* resource_user, size_t size) {
941
944
  GPR_ASSERT(prior >= static_cast<long>(size));
942
945
  bool was_zero_or_negative = resource_user->free_pool <= 0;
943
946
  resource_user->free_pool += static_cast<int64_t>(size);
944
- if (grpc_resource_quota_trace.enabled()) {
947
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
945
948
  gpr_log(GPR_INFO, "RQ %s %s: free %" PRIdPTR "; free_pool -> %" PRId64,
946
949
  resource_user->resource_quota->name, resource_user->name, size,
947
950
  resource_user->free_pool);
@@ -967,7 +970,7 @@ void grpc_resource_user_post_reclaimer(grpc_resource_user* resource_user,
967
970
  }
968
971
 
969
972
  void grpc_resource_user_finish_reclamation(grpc_resource_user* resource_user) {
970
- if (grpc_resource_quota_trace.enabled()) {
973
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
971
974
  gpr_log(GPR_INFO, "RQ %s %s: reclamation complete",
972
975
  resource_user->resource_quota->name, resource_user->name);
973
976
  }
@@ -30,7 +30,11 @@
30
30
  #include <fcntl.h>
31
31
  #include <limits.h>
32
32
  #include <netinet/in.h>
33
+ #ifdef GRPC_LINUX_TCP_H
34
+ #include <linux/tcp.h>
35
+ #else
33
36
  #include <netinet/tcp.h>
37
+ #endif
34
38
  #include <stdio.h>
35
39
  #include <string.h>
36
40
  #include <sys/socket.h>
@@ -288,7 +292,7 @@ grpc_error* grpc_set_socket_tcp_user_timeout(
288
292
  }
289
293
  if (enable) {
290
294
  extern grpc_core::TraceFlag grpc_tcp_trace;
291
- if (grpc_tcp_trace.enabled()) {
295
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
292
296
  gpr_log(GPR_INFO, "Enabling TCP_USER_TIMEOUT with a timeout of %d ms",
293
297
  timeout);
294
298
  }
@@ -311,7 +315,7 @@ grpc_error* grpc_set_socket_tcp_user_timeout(
311
315
  }
312
316
  #else
313
317
  extern grpc_core::TraceFlag grpc_tcp_trace;
314
- if (grpc_tcp_trace.enabled()) {
318
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
315
319
  gpr_log(GPR_INFO, "TCP_USER_TIMEOUT not supported for this platform");
316
320
  }
317
321
  #endif /* GRPC_HAVE_TCP_USER_TIMEOUT */
@@ -39,6 +39,8 @@
39
39
  #include "src/core/lib/iomgr/sockaddr_windows.h"
40
40
  #include "src/core/lib/iomgr/socket_windows.h"
41
41
 
42
+ static DWORD s_wsa_socket_flags;
43
+
42
44
  grpc_winsocket* grpc_winsocket_create(SOCKET socket, const char* name) {
43
45
  char* final_name;
44
46
  grpc_winsocket* r = (grpc_winsocket*)gpr_malloc(sizeof(grpc_winsocket));
@@ -181,4 +183,21 @@ int grpc_ipv6_loopback_available(void) {
181
183
  return g_ipv6_loopback_available;
182
184
  }
183
185
 
186
+ DWORD grpc_get_default_wsa_socket_flags() { return s_wsa_socket_flags; }
187
+
188
+ void grpc_wsa_socket_flags_init() {
189
+ s_wsa_socket_flags = WSA_FLAG_OVERLAPPED;
190
+ /* WSA_FLAG_NO_HANDLE_INHERIT may be not supported on the older Windows
191
+ versions, see
192
+ https://msdn.microsoft.com/en-us/library/windows/desktop/ms742212(v=vs.85).aspx
193
+ for details. */
194
+ SOCKET sock = WSASocket(AF_INET6, SOCK_STREAM, IPPROTO_TCP, NULL, 0,
195
+ s_wsa_socket_flags | WSA_FLAG_NO_HANDLE_INHERIT);
196
+ if (sock != INVALID_SOCKET) {
197
+ /* Windows 7, Windows 2008 R2 with SP1 or later */
198
+ s_wsa_socket_flags |= WSA_FLAG_NO_HANDLE_INHERIT;
199
+ closesocket(sock);
200
+ }
201
+ }
202
+
184
203
  #endif /* GRPC_WINSOCK_SOCKET */
@@ -32,6 +32,10 @@
32
32
  #include "src/core/lib/iomgr/closure.h"
33
33
  #include "src/core/lib/iomgr/iomgr_internal.h"
34
34
 
35
+ #ifndef WSA_FLAG_NO_HANDLE_INHERIT
36
+ #define WSA_FLAG_NO_HANDLE_INHERIT 0x80
37
+ #endif
38
+
35
39
  /* This holds the data for an outstanding read or write on a socket.
36
40
  The mutex to protect the concurrent access to that data is the one
37
41
  inside the winsocket wrapper. */
@@ -114,6 +118,10 @@ void grpc_socket_become_ready(grpc_winsocket* winsocket,
114
118
  The value is probed once, and cached for the life of the process. */
115
119
  int grpc_ipv6_loopback_available(void);
116
120
 
121
+ void grpc_wsa_socket_flags_init();
122
+
123
+ DWORD grpc_get_default_wsa_socket_flags();
124
+
117
125
  #endif
118
126
 
119
127
  #endif /* GRPC_CORE_LIB_IOMGR_SOCKET_WINDOWS_H */