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
@@ -1,192 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2017 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/gpr/arena.h"
22
-
23
- #include <string.h>
24
- #include <new>
25
-
26
- #include <grpc/support/alloc.h>
27
- #include <grpc/support/atm.h>
28
- #include <grpc/support/log.h>
29
- #include <grpc/support/sync.h>
30
-
31
- #include "src/core/lib/gpr/alloc.h"
32
- #include "src/core/lib/gpr/env.h"
33
- #include "src/core/lib/gprpp/memory.h"
34
-
35
- namespace {
36
- enum init_strategy {
37
- NO_INIT, // Do not initialize the arena blocks.
38
- ZERO_INIT, // Initialize arena blocks with 0.
39
- NON_ZERO_INIT, // Initialize arena blocks with a non-zero value.
40
- };
41
-
42
- gpr_once g_init_strategy_once = GPR_ONCE_INIT;
43
- init_strategy g_init_strategy = NO_INIT;
44
- } // namespace
45
-
46
- static void set_strategy_from_env() {
47
- char* str = gpr_getenv("GRPC_ARENA_INIT_STRATEGY");
48
- if (str == nullptr) {
49
- g_init_strategy = NO_INIT;
50
- } else if (strcmp(str, "zero_init") == 0) {
51
- g_init_strategy = ZERO_INIT;
52
- } else if (strcmp(str, "non_zero_init") == 0) {
53
- g_init_strategy = NON_ZERO_INIT;
54
- } else {
55
- g_init_strategy = NO_INIT;
56
- }
57
- gpr_free(str);
58
- }
59
-
60
- static void* gpr_arena_alloc_maybe_init(size_t size) {
61
- void* mem = gpr_malloc_aligned(size, GPR_MAX_ALIGNMENT);
62
- gpr_once_init(&g_init_strategy_once, set_strategy_from_env);
63
- if (GPR_UNLIKELY(g_init_strategy != NO_INIT)) {
64
- if (g_init_strategy == ZERO_INIT) {
65
- memset(mem, 0, size);
66
- } else { // NON_ZERO_INIT.
67
- memset(mem, 0xFE, size);
68
- }
69
- }
70
- return mem;
71
- }
72
-
73
- void gpr_arena_init() {
74
- gpr_once_init(&g_init_strategy_once, set_strategy_from_env);
75
- }
76
-
77
- // Uncomment this to use a simple arena that simply allocates the
78
- // requested amount of memory for each call to gpr_arena_alloc(). This
79
- // effectively eliminates the efficiency gain of using an arena, but it
80
- // may be useful for debugging purposes.
81
- //#define SIMPLE_ARENA_FOR_DEBUGGING
82
- #ifdef SIMPLE_ARENA_FOR_DEBUGGING
83
-
84
- struct gpr_arena {
85
- gpr_arena() { gpr_mu_init(&mu); }
86
- ~gpr_arena() {
87
- gpr_mu_destroy(&mu);
88
- for (size_t i = 0; i < num_ptrs; ++i) {
89
- gpr_free_aligned(ptrs[i]);
90
- }
91
- gpr_free(ptrs);
92
- }
93
-
94
- gpr_mu mu;
95
- void** ptrs = nullptr;
96
- size_t num_ptrs = 0;
97
- };
98
-
99
- gpr_arena* gpr_arena_create(size_t ignored_initial_size) {
100
- return grpc_core::New<gpr_arena>();
101
- }
102
-
103
- size_t gpr_arena_destroy(gpr_arena* arena) {
104
- grpc_core::Delete(arena);
105
- return 1; // Value doesn't matter, since it won't be used.
106
- }
107
-
108
- void* gpr_arena_alloc(gpr_arena* arena, size_t size) {
109
- gpr_mu_lock(&arena->mu);
110
- arena->ptrs =
111
- (void**)gpr_realloc(arena->ptrs, sizeof(void*) * (arena->num_ptrs + 1));
112
- void* retval = arena->ptrs[arena->num_ptrs++] =
113
- gpr_arena_alloc_maybe_init(size);
114
- gpr_mu_unlock(&arena->mu);
115
- return retval;
116
- }
117
-
118
- #else // SIMPLE_ARENA_FOR_DEBUGGING
119
-
120
- // TODO(roth): We currently assume that all callers need alignment of 16
121
- // bytes, which may be wrong in some cases. As part of converting the
122
- // arena API to C++, we should consider replacing gpr_arena_alloc() with a
123
- // template that takes the type of the value being allocated, which
124
- // would allow us to use the alignment actually needed by the caller.
125
-
126
- typedef struct zone {
127
- zone* next = nullptr;
128
- } zone;
129
-
130
- struct gpr_arena {
131
- gpr_arena(size_t initial_size)
132
- : initial_zone_size(initial_size), last_zone(&initial_zone) {
133
- gpr_mu_init(&arena_growth_mutex);
134
- }
135
- ~gpr_arena() {
136
- gpr_mu_destroy(&arena_growth_mutex);
137
- zone* z = initial_zone.next;
138
- while (z) {
139
- zone* next_z = z->next;
140
- z->~zone();
141
- gpr_free_aligned(z);
142
- z = next_z;
143
- }
144
- }
145
-
146
- // Keep track of the total used size. We use this in our call sizing
147
- // historesis.
148
- gpr_atm total_used = 0;
149
- size_t initial_zone_size;
150
- zone initial_zone;
151
- zone* last_zone;
152
- gpr_mu arena_growth_mutex;
153
- };
154
-
155
- gpr_arena* gpr_arena_create(size_t initial_size) {
156
- initial_size = GPR_ROUND_UP_TO_ALIGNMENT_SIZE(initial_size);
157
- return new (gpr_arena_alloc_maybe_init(
158
- GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(gpr_arena)) + initial_size))
159
- gpr_arena(initial_size);
160
- }
161
-
162
- size_t gpr_arena_destroy(gpr_arena* arena) {
163
- const gpr_atm size = gpr_atm_no_barrier_load(&arena->total_used);
164
- arena->~gpr_arena();
165
- gpr_free_aligned(arena);
166
- return static_cast<size_t>(size);
167
- }
168
-
169
- void* gpr_arena_alloc(gpr_arena* arena, size_t size) {
170
- size = GPR_ROUND_UP_TO_ALIGNMENT_SIZE(size);
171
- size_t begin = gpr_atm_no_barrier_fetch_add(&arena->total_used, size);
172
- if (begin + size <= arena->initial_zone_size) {
173
- return reinterpret_cast<char*>(arena) +
174
- GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(gpr_arena)) + begin;
175
- } else {
176
- // If the allocation isn't able to end in the initial zone, create a new
177
- // zone for this allocation, and any unused space in the initial zone is
178
- // wasted. This overflowing and wasting is uncommon because of our arena
179
- // sizing historesis (that is, most calls should have a large enough initial
180
- // zone and will not need to grow the arena).
181
- gpr_mu_lock(&arena->arena_growth_mutex);
182
- zone* z = new (gpr_arena_alloc_maybe_init(
183
- GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(zone)) + size)) zone();
184
- arena->last_zone->next = z;
185
- arena->last_zone = z;
186
- gpr_mu_unlock(&arena->arena_growth_mutex);
187
- return reinterpret_cast<char*>(z) +
188
- GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(zone));
189
- }
190
- }
191
-
192
- #endif // SIMPLE_ARENA_FOR_DEBUGGING
@@ -1,57 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2017 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
- #ifndef GRPC_CORE_LIB_GPRPP_ATOMIC_WITH_ATM_H
20
- #define GRPC_CORE_LIB_GPRPP_ATOMIC_WITH_ATM_H
21
-
22
- #include <grpc/support/port_platform.h>
23
-
24
- #include <grpc/support/atm.h>
25
-
26
- namespace grpc_core {
27
-
28
- enum MemoryOrderRelaxed { memory_order_relaxed };
29
-
30
- template <class T>
31
- class atomic;
32
-
33
- template <>
34
- class atomic<bool> {
35
- public:
36
- atomic() { gpr_atm_no_barrier_store(&x_, static_cast<gpr_atm>(false)); }
37
- explicit atomic(bool x) {
38
- gpr_atm_no_barrier_store(&x_, static_cast<gpr_atm>(x));
39
- }
40
-
41
- bool compare_exchange_strong(bool& expected, bool update, MemoryOrderRelaxed,
42
- MemoryOrderRelaxed) {
43
- if (!gpr_atm_no_barrier_cas(&x_, static_cast<gpr_atm>(expected),
44
- static_cast<gpr_atm>(update))) {
45
- expected = gpr_atm_no_barrier_load(&x_) != 0;
46
- return false;
47
- }
48
- return true;
49
- }
50
-
51
- private:
52
- gpr_atm x_;
53
- };
54
-
55
- } // namespace grpc_core
56
-
57
- #endif /* GRPC_CORE_LIB_GPRPP_ATOMIC_WITH_ATM_H */
@@ -1,107 +0,0 @@
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
- #ifdef GRPC_POSIX_WAKEUP_FD
24
-
25
- #include "src/core/lib/iomgr/wakeup_fd_cv.h"
26
-
27
- #include <errno.h>
28
- #include <string.h>
29
-
30
- #include <grpc/support/alloc.h>
31
- #include <grpc/support/log.h>
32
- #include <grpc/support/sync.h>
33
- #include <grpc/support/time.h>
34
-
35
- #include "src/core/lib/gpr/useful.h"
36
- #include "src/core/lib/gprpp/thd.h"
37
-
38
- #define MAX_TABLE_RESIZE 256
39
-
40
- extern grpc_cv_fd_table g_cvfds;
41
-
42
- static grpc_error* cv_fd_init(grpc_wakeup_fd* fd_info) {
43
- unsigned int i, newsize;
44
- int idx;
45
- gpr_mu_lock(&g_cvfds.mu);
46
- if (!g_cvfds.free_fds) {
47
- newsize = GPR_MIN(g_cvfds.size * 2, g_cvfds.size + MAX_TABLE_RESIZE);
48
- g_cvfds.cvfds = static_cast<grpc_fd_node*>(
49
- gpr_realloc(g_cvfds.cvfds, sizeof(grpc_fd_node) * newsize));
50
- for (i = g_cvfds.size; i < newsize; i++) {
51
- g_cvfds.cvfds[i].is_set = 0;
52
- g_cvfds.cvfds[i].cvs = nullptr;
53
- g_cvfds.cvfds[i].next_free = g_cvfds.free_fds;
54
- g_cvfds.free_fds = &g_cvfds.cvfds[i];
55
- }
56
- g_cvfds.size = newsize;
57
- }
58
-
59
- idx = static_cast<int>(g_cvfds.free_fds - g_cvfds.cvfds);
60
- g_cvfds.free_fds = g_cvfds.free_fds->next_free;
61
- g_cvfds.cvfds[idx].cvs = nullptr;
62
- g_cvfds.cvfds[idx].is_set = 0;
63
- fd_info->read_fd = GRPC_IDX_TO_FD(idx);
64
- fd_info->write_fd = -1;
65
- gpr_mu_unlock(&g_cvfds.mu);
66
- return GRPC_ERROR_NONE;
67
- }
68
-
69
- static grpc_error* cv_fd_wakeup(grpc_wakeup_fd* fd_info) {
70
- grpc_cv_node* cvn;
71
- gpr_mu_lock(&g_cvfds.mu);
72
- g_cvfds.cvfds[GRPC_FD_TO_IDX(fd_info->read_fd)].is_set = 1;
73
- cvn = g_cvfds.cvfds[GRPC_FD_TO_IDX(fd_info->read_fd)].cvs;
74
- while (cvn) {
75
- gpr_cv_signal(cvn->cv);
76
- cvn = cvn->next;
77
- }
78
- gpr_mu_unlock(&g_cvfds.mu);
79
- return GRPC_ERROR_NONE;
80
- }
81
-
82
- static grpc_error* cv_fd_consume(grpc_wakeup_fd* fd_info) {
83
- gpr_mu_lock(&g_cvfds.mu);
84
- g_cvfds.cvfds[GRPC_FD_TO_IDX(fd_info->read_fd)].is_set = 0;
85
- gpr_mu_unlock(&g_cvfds.mu);
86
- return GRPC_ERROR_NONE;
87
- }
88
-
89
- static void cv_fd_destroy(grpc_wakeup_fd* fd_info) {
90
- if (fd_info->read_fd == 0) {
91
- return;
92
- }
93
- gpr_mu_lock(&g_cvfds.mu);
94
- // Assert that there are no active pollers
95
- GPR_ASSERT(!g_cvfds.cvfds[GRPC_FD_TO_IDX(fd_info->read_fd)].cvs);
96
- g_cvfds.cvfds[GRPC_FD_TO_IDX(fd_info->read_fd)].next_free = g_cvfds.free_fds;
97
- g_cvfds.free_fds = &g_cvfds.cvfds[GRPC_FD_TO_IDX(fd_info->read_fd)];
98
- gpr_mu_unlock(&g_cvfds.mu);
99
- }
100
-
101
- static int cv_check_availability(void) { return 1; }
102
-
103
- const grpc_wakeup_fd_vtable grpc_cv_wakeup_fd_vtable = {
104
- cv_fd_init, cv_fd_consume, cv_fd_wakeup, cv_fd_destroy,
105
- cv_check_availability};
106
-
107
- #endif /* GRPC_POSIX_WAKUP_FD */
@@ -1,69 +0,0 @@
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
- /*
20
- * wakeup_fd_cv uses condition variables to implement wakeup fds.
21
- *
22
- * It is intended for use only in cases when eventfd() and pipe() are not
23
- * available. It can only be used with the "poll" engine.
24
- *
25
- * Implementation:
26
- * A global table of cv wakeup fds is mantained. A cv wakeup fd is a negative
27
- * file descriptor. poll() is then run in a background thread with only the
28
- * real socket fds while we wait on a condition variable trigged by either the
29
- * poll() completion or a wakeup_fd() call.
30
- *
31
- */
32
-
33
- #ifndef GRPC_CORE_LIB_IOMGR_WAKEUP_FD_CV_H
34
- #define GRPC_CORE_LIB_IOMGR_WAKEUP_FD_CV_H
35
-
36
- #include <grpc/support/port_platform.h>
37
-
38
- #include <grpc/support/sync.h>
39
-
40
- #include "src/core/lib/iomgr/ev_posix.h"
41
-
42
- #define GRPC_FD_TO_IDX(fd) (-(fd)-1)
43
- #define GRPC_IDX_TO_FD(idx) (-(idx)-1)
44
-
45
- typedef struct grpc_cv_node {
46
- gpr_cv* cv;
47
- struct grpc_cv_node* next;
48
- struct grpc_cv_node* prev;
49
- } grpc_cv_node;
50
-
51
- typedef struct grpc_fd_node {
52
- int is_set;
53
- grpc_cv_node* cvs;
54
- struct grpc_fd_node* next_free;
55
- } grpc_fd_node;
56
-
57
- typedef struct grpc_cv_fd_table {
58
- gpr_mu mu;
59
- gpr_refcount pollcount;
60
- gpr_cv shutdown_cv;
61
- grpc_fd_node* cvfds;
62
- grpc_fd_node* free_fds;
63
- unsigned int size;
64
- grpc_poll_function_type poll;
65
- } grpc_cv_fd_table;
66
-
67
- extern const grpc_wakeup_fd_vtable grpc_cv_wakeup_fd_vtable;
68
-
69
- #endif /* GRPC_CORE_LIB_IOMGR_WAKEUP_FD_CV_H */
@@ -1,106 +0,0 @@
1
- //
2
- // Copyright 2015 gRPC authors.
3
- //
4
- // Licensed under the Apache License, Version 2.0 (the "License");
5
- // you may not use this file except in compliance with the License.
6
- // You may obtain a copy of the License at
7
- //
8
- // http://www.apache.org/licenses/LICENSE-2.0
9
- //
10
- // Unless required by applicable law or agreed to in writing, software
11
- // distributed under the License is distributed on an "AS IS" BASIS,
12
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- // See the License for the specific language governing permissions and
14
- // limitations under the License.
15
- //
16
-
17
- #include <grpc/support/port_platform.h>
18
-
19
- #include "src/core/lib/transport/service_config.h"
20
-
21
- #include <string.h>
22
-
23
- #include <grpc/impl/codegen/grpc_types.h>
24
- #include <grpc/support/alloc.h>
25
- #include <grpc/support/log.h>
26
- #include <grpc/support/string_util.h>
27
-
28
- #include "src/core/lib/gpr/string.h"
29
- #include "src/core/lib/json/json.h"
30
- #include "src/core/lib/slice/slice_hash_table.h"
31
- #include "src/core/lib/slice/slice_internal.h"
32
- #include "src/core/lib/slice/slice_string_helpers.h"
33
-
34
- namespace grpc_core {
35
-
36
- UniquePtr<ServiceConfig> ServiceConfig::Create(const char* json) {
37
- UniquePtr<char> json_string(gpr_strdup(json));
38
- grpc_json* json_tree = grpc_json_parse_string(json_string.get());
39
- if (json_tree == nullptr) {
40
- gpr_log(GPR_INFO, "failed to parse JSON for service config");
41
- return nullptr;
42
- }
43
- return MakeUnique<ServiceConfig>(std::move(json_string), json_tree);
44
- }
45
-
46
- ServiceConfig::ServiceConfig(UniquePtr<char> json_string, grpc_json* json_tree)
47
- : json_string_(std::move(json_string)), json_tree_(json_tree) {}
48
-
49
- ServiceConfig::~ServiceConfig() { grpc_json_destroy(json_tree_); }
50
-
51
- const char* ServiceConfig::GetLoadBalancingPolicyName() const {
52
- if (json_tree_->type != GRPC_JSON_OBJECT || json_tree_->key != nullptr) {
53
- return nullptr;
54
- }
55
- const char* lb_policy_name = nullptr;
56
- for (grpc_json* field = json_tree_->child; field != nullptr;
57
- field = field->next) {
58
- if (field->key == nullptr) return nullptr;
59
- if (strcmp(field->key, "loadBalancingPolicy") == 0) {
60
- if (lb_policy_name != nullptr) return nullptr; // Duplicate.
61
- if (field->type != GRPC_JSON_STRING) return nullptr;
62
- lb_policy_name = field->value;
63
- }
64
- }
65
- return lb_policy_name;
66
- }
67
-
68
- int ServiceConfig::CountNamesInMethodConfig(grpc_json* json) {
69
- int num_names = 0;
70
- for (grpc_json* field = json->child; field != nullptr; field = field->next) {
71
- if (field->key != nullptr && strcmp(field->key, "name") == 0) {
72
- if (field->type != GRPC_JSON_ARRAY) return -1;
73
- for (grpc_json* name = field->child; name != nullptr; name = name->next) {
74
- if (name->type != GRPC_JSON_OBJECT) return -1;
75
- ++num_names;
76
- }
77
- }
78
- }
79
- return num_names;
80
- }
81
-
82
- UniquePtr<char> ServiceConfig::ParseJsonMethodName(grpc_json* json) {
83
- if (json->type != GRPC_JSON_OBJECT) return nullptr;
84
- const char* service_name = nullptr;
85
- const char* method_name = nullptr;
86
- for (grpc_json* child = json->child; child != nullptr; child = child->next) {
87
- if (child->key == nullptr) return nullptr;
88
- if (child->type != GRPC_JSON_STRING) return nullptr;
89
- if (strcmp(child->key, "service") == 0) {
90
- if (service_name != nullptr) return nullptr; // Duplicate.
91
- if (child->value == nullptr) return nullptr;
92
- service_name = child->value;
93
- } else if (strcmp(child->key, "method") == 0) {
94
- if (method_name != nullptr) return nullptr; // Duplicate.
95
- if (child->value == nullptr) return nullptr;
96
- method_name = child->value;
97
- }
98
- }
99
- if (service_name == nullptr) return nullptr; // Required field.
100
- char* path;
101
- gpr_asprintf(&path, "/%s/%s", service_name,
102
- method_name == nullptr ? "*" : method_name);
103
- return UniquePtr<char>(path);
104
- }
105
-
106
- } // namespace grpc_core