grpc 1.8.7 → 1.9.0.pre1

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 (488) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +549 -325
  3. data/include/grpc/impl/codegen/grpc_types.h +1 -2
  4. data/include/grpc/impl/codegen/port_platform.h +46 -5
  5. data/include/grpc/impl/codegen/slice.h +1 -2
  6. data/include/grpc/module.modulemap +0 -2
  7. data/include/grpc/slice_buffer.h +1 -2
  8. data/include/grpc/support/log.h +4 -2
  9. data/include/grpc/support/thd.h +4 -1
  10. data/include/grpc/support/tls.h +6 -0
  11. data/include/grpc/support/tls_gcc.h +5 -40
  12. data/include/grpc/support/tls_msvc.h +9 -0
  13. data/include/grpc/support/tls_pthread.h +9 -0
  14. data/src/core/ext/filters/client_channel/backup_poller.cc +32 -29
  15. data/src/core/ext/filters/client_channel/backup_poller.h +2 -2
  16. data/src/core/ext/filters/client_channel/channel_connectivity.cc +26 -32
  17. data/src/core/ext/filters/client_channel/client_channel.cc +325 -356
  18. data/src/core/ext/filters/client_channel/client_channel.h +4 -12
  19. data/src/core/ext/filters/client_channel/client_channel_factory.cc +9 -14
  20. data/src/core/ext/filters/client_channel/client_channel_factory.h +7 -20
  21. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +7 -10
  22. data/src/core/ext/filters/client_channel/connector.cc +6 -7
  23. data/src/core/ext/filters/client_channel/connector.h +6 -16
  24. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +38 -50
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -8
  26. data/src/core/ext/filters/client_channel/http_proxy.cc +9 -13
  27. data/src/core/ext/filters/client_channel/http_proxy.h +0 -8
  28. data/src/core/ext/filters/client_channel/lb_policy.cc +72 -94
  29. data/src/core/ext/filters/client_channel/lb_policy.h +83 -92
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -19
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +0 -8
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +474 -591
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -8
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +2 -10
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +6 -6
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +0 -8
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +0 -9
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +0 -9
  39. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +3 -4
  40. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +9 -12
  41. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +160 -182
  42. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -221
  43. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +24 -35
  44. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +9 -20
  45. data/src/core/ext/filters/client_channel/lb_policy_factory.cc +6 -9
  46. data/src/core/ext/filters/client_channel/lb_policy_factory.h +4 -15
  47. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -3
  48. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -9
  49. data/src/core/ext/filters/client_channel/parse_address.cc +1 -1
  50. data/src/core/ext/filters/client_channel/parse_address.h +0 -8
  51. data/src/core/ext/filters/client_channel/proxy_mapper.cc +6 -8
  52. data/src/core/ext/filters/client_channel/proxy_mapper.h +6 -16
  53. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +13 -17
  54. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +2 -12
  55. data/src/core/ext/filters/client_channel/resolver.cc +11 -13
  56. data/src/core/ext/filters/client_channel/resolver.h +14 -25
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +57 -70
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +2 -12
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +23 -31
  60. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +27 -45
  61. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -15
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +9 -11
  63. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +53 -66
  64. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +25 -33
  65. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -9
  66. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +26 -35
  67. data/src/core/ext/filters/client_channel/resolver_factory.cc +2 -3
  68. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -12
  69. data/src/core/ext/filters/client_channel/resolver_registry.cc +12 -15
  70. data/src/core/ext/filters/client_channel/resolver_registry.h +3 -12
  71. data/src/core/ext/filters/client_channel/retry_throttle.h +0 -8
  72. data/src/core/ext/filters/client_channel/subchannel.cc +289 -301
  73. data/src/core/ext/filters/client_channel/subchannel.h +57 -84
  74. data/src/core/ext/filters/client_channel/subchannel_index.cc +30 -33
  75. data/src/core/ext/filters/client_channel/subchannel_index.h +4 -16
  76. data/src/core/ext/filters/client_channel/uri_parser.cc +13 -17
  77. data/src/core/ext/filters/client_channel/uri_parser.h +1 -10
  78. data/src/core/ext/filters/deadline/deadline_filter.cc +49 -67
  79. data/src/core/ext/filters/deadline/deadline_filter.h +4 -14
  80. data/src/core/ext/filters/http/client/http_client_filter.cc +60 -77
  81. data/src/core/ext/filters/http/client/http_client_filter.h +0 -8
  82. data/src/core/ext/filters/http/http_filters_plugin.cc +4 -6
  83. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +63 -79
  84. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -8
  85. data/src/core/ext/filters/http/server/http_server_filter.cc +57 -71
  86. data/src/core/ext/filters/http/server/http_server_filter.h +0 -8
  87. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +19 -24
  88. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +0 -8
  89. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +3 -3
  90. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +0 -8
  91. data/src/core/ext/filters/max_age/max_age_filter.cc +49 -62
  92. data/src/core/ext/filters/max_age/max_age_filter.h +0 -8
  93. data/src/core/ext/filters/message_size/message_size_filter.cc +23 -29
  94. data/src/core/ext/filters/message_size/message_size_filter.h +0 -8
  95. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -18
  96. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +0 -8
  97. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -8
  98. data/src/core/ext/transport/chttp2/alpn/alpn.h +0 -8
  99. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +33 -40
  100. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -8
  101. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +15 -17
  102. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +8 -8
  103. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +23 -28
  104. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +50 -57
  105. data/src/core/ext/transport/chttp2/server/chttp2_server.h +1 -10
  106. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -3
  107. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -10
  108. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +5 -6
  109. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -9
  110. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -11
  111. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -9
  112. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +10 -2
  113. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +516 -636
  114. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +4 -11
  115. data/src/core/ext/transport/chttp2/transport/flow_control.cc +29 -13
  116. data/src/core/ext/transport/chttp2/transport/flow_control.h +196 -53
  117. data/src/core/ext/transport/chttp2/transport/frame.h +0 -8
  118. data/src/core/ext/transport/chttp2/transport/frame_data.cc +31 -33
  119. data/src/core/ext/transport/chttp2/transport/frame_data.h +3 -12
  120. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -3
  121. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +1 -10
  122. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  123. data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -9
  124. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
  125. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +1 -10
  126. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +8 -3
  127. data/src/core/ext/transport/chttp2/transport/frame_settings.h +1 -10
  128. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +8 -8
  129. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -11
  130. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +63 -81
  131. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -12
  132. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +230 -318
  133. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +6 -19
  134. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +14 -20
  135. data/src/core/ext/transport/chttp2/transport/hpack_table.h +5 -16
  136. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -7
  137. data/src/core/ext/transport/chttp2/transport/huffsyms.h +0 -8
  138. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +8 -11
  139. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +4 -13
  140. data/src/core/ext/transport/chttp2/transport/internal.h +51 -75
  141. data/src/core/ext/transport/chttp2/transport/parsing.cc +83 -109
  142. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +2 -0
  143. data/src/core/ext/transport/chttp2/transport/stream_map.h +0 -8
  144. data/src/core/ext/transport/chttp2/transport/varint.h +0 -8
  145. data/src/core/ext/transport/chttp2/transport/writing.cc +61 -65
  146. data/src/core/ext/transport/inproc/inproc_plugin.cc +2 -4
  147. data/src/core/ext/transport/inproc/inproc_transport.cc +177 -188
  148. data/src/core/ext/transport/inproc/inproc_transport.h +0 -8
  149. data/src/core/lib/backoff/backoff.cc +39 -44
  150. data/src/core/lib/backoff/backoff.h +61 -57
  151. data/src/core/lib/channel/channel_args.cc +8 -10
  152. data/src/core/lib/channel/channel_args.h +4 -13
  153. data/src/core/lib/channel/channel_stack.cc +19 -27
  154. data/src/core/lib/channel/channel_stack.h +27 -47
  155. data/src/core/lib/channel/channel_stack_builder.cc +11 -14
  156. data/src/core/lib/channel/channel_stack_builder.h +4 -15
  157. data/src/core/lib/channel/connected_channel.cc +23 -36
  158. data/src/core/lib/channel/connected_channel.h +1 -10
  159. data/src/core/lib/channel/handshaker.cc +31 -40
  160. data/src/core/lib/channel/handshaker.h +14 -25
  161. data/src/core/lib/channel/handshaker_factory.cc +6 -6
  162. data/src/core/lib/channel/handshaker_factory.h +5 -15
  163. data/src/core/lib/channel/handshaker_registry.cc +9 -13
  164. data/src/core/lib/channel/handshaker_registry.h +2 -11
  165. data/src/core/lib/compression/algorithm_metadata.h +0 -8
  166. data/src/core/lib/compression/message_compress.cc +19 -23
  167. data/src/core/lib/compression/message_compress.h +2 -12
  168. data/src/core/lib/compression/stream_compression.cc +1 -1
  169. data/src/core/lib/compression/stream_compression.h +0 -8
  170. data/src/core/lib/compression/stream_compression_gzip.cc +12 -11
  171. data/src/core/lib/compression/stream_compression_gzip.h +0 -8
  172. data/src/core/lib/compression/stream_compression_identity.h +0 -8
  173. data/src/core/lib/debug/stats.cc +4 -4
  174. data/src/core/lib/debug/stats.h +9 -19
  175. data/src/core/lib/debug/stats_data.cc +85 -116
  176. data/src/core/lib/debug/stats_data.h +236 -312
  177. data/src/core/lib/debug/trace.cc +1 -1
  178. data/src/core/lib/debug/trace.h +0 -12
  179. data/src/core/lib/{support → gpr++}/abstract.h +8 -3
  180. data/src/core/lib/{support → gpr++}/atomic.h +5 -5
  181. data/src/core/lib/{support → gpr++}/atomic_with_atm.h +3 -3
  182. data/src/core/lib/{support → gpr++}/atomic_with_std.h +3 -3
  183. data/src/core/lib/gpr++/debug_location.h +52 -0
  184. data/src/core/lib/gpr++/inlined_vector.h +112 -0
  185. data/src/core/lib/{support → gpr++}/manual_constructor.h +2 -2
  186. data/src/core/lib/{support → gpr++}/memory.h +3 -3
  187. data/src/core/lib/gpr++/orphanable.h +171 -0
  188. data/src/core/lib/gpr++/ref_counted.h +133 -0
  189. data/src/core/lib/gpr++/ref_counted_ptr.h +99 -0
  190. data/src/core/lib/{support → gpr}/alloc.cc +0 -0
  191. data/src/core/lib/{support → gpr}/arena.cc +1 -1
  192. data/src/core/lib/{support → gpr}/arena.h +3 -11
  193. data/src/core/lib/{support → gpr}/atm.cc +0 -0
  194. data/src/core/lib/{support → gpr}/avl.cc +0 -0
  195. data/src/core/lib/{support → gpr}/cmdline.cc +1 -1
  196. data/src/core/lib/{support → gpr}/cpu_iphone.cc +0 -0
  197. data/src/core/lib/{support → gpr}/cpu_linux.cc +0 -0
  198. data/src/core/lib/{support → gpr}/cpu_posix.cc +0 -0
  199. data/src/core/lib/{support → gpr}/cpu_windows.cc +0 -0
  200. data/src/core/lib/{support → gpr}/env.h +3 -11
  201. data/src/core/lib/{support → gpr}/env_linux.cc +2 -2
  202. data/src/core/lib/{support → gpr}/env_posix.cc +4 -4
  203. data/src/core/lib/{support → gpr}/env_windows.cc +3 -3
  204. data/src/core/lib/{support → gpr}/fork.cc +3 -3
  205. data/src/core/lib/{support → gpr}/fork.h +3 -3
  206. data/src/core/lib/{support → gpr}/host_port.cc +1 -1
  207. data/src/core/lib/{support → gpr}/log.cc +3 -3
  208. data/src/core/lib/{support → gpr}/log_android.cc +3 -3
  209. data/src/core/lib/{support → gpr}/log_linux.cc +1 -1
  210. data/src/core/lib/{support → gpr}/log_posix.cc +5 -5
  211. data/src/core/lib/{support → gpr}/log_windows.cc +3 -3
  212. data/src/core/lib/{support → gpr}/mpscq.cc +1 -1
  213. data/src/core/lib/{support → gpr}/mpscq.h +3 -10
  214. data/src/core/lib/{support → gpr}/murmur_hash.cc +1 -1
  215. data/src/core/lib/{support → gpr}/murmur_hash.h +3 -11
  216. data/src/core/lib/{support → gpr}/spinlock.h +3 -3
  217. data/src/core/lib/{support → gpr}/string.cc +1 -1
  218. data/src/core/lib/{support → gpr}/string.h +3 -10
  219. data/src/core/lib/{support → gpr}/string_posix.cc +0 -0
  220. data/src/core/lib/{support → gpr}/string_util_windows.cc +2 -2
  221. data/src/core/lib/{support → gpr}/string_windows.cc +1 -1
  222. data/src/core/lib/{support → gpr}/string_windows.h +3 -11
  223. data/src/core/lib/{support → gpr}/subprocess_posix.cc +0 -0
  224. data/src/core/lib/{support → gpr}/subprocess_windows.cc +2 -2
  225. data/src/core/lib/{support → gpr}/sync.cc +0 -0
  226. data/src/core/lib/{support → gpr}/sync_posix.cc +10 -1
  227. data/src/core/lib/{support → gpr}/sync_windows.cc +0 -0
  228. data/src/core/lib/{support → gpr}/thd.cc +0 -0
  229. data/src/core/lib/{support → gpr}/thd_internal.h +3 -3
  230. data/src/core/lib/{support → gpr}/thd_posix.cc +18 -2
  231. data/src/core/lib/{support → gpr}/thd_windows.cc +2 -1
  232. data/src/core/lib/{support → gpr}/time.cc +0 -0
  233. data/src/core/lib/{support → gpr}/time_posix.cc +2 -4
  234. data/src/core/lib/{support → gpr}/time_precise.cc +1 -1
  235. data/src/core/lib/{support → gpr}/time_precise.h +3 -11
  236. data/src/core/lib/{support → gpr}/time_windows.cc +1 -3
  237. data/src/core/lib/{support → gpr}/tls_pthread.cc +0 -0
  238. data/src/core/lib/{support → gpr}/tmpfile.h +3 -11
  239. data/src/core/lib/{support → gpr}/tmpfile_msys.cc +2 -2
  240. data/src/core/lib/{support → gpr}/tmpfile_posix.cc +2 -2
  241. data/src/core/lib/{support → gpr}/tmpfile_windows.cc +2 -2
  242. data/src/core/lib/{support → gpr}/wrap_memcpy.cc +0 -0
  243. data/src/core/lib/http/format_request.cc +1 -1
  244. data/src/core/lib/http/format_request.h +0 -8
  245. data/src/core/lib/http/httpcli.cc +55 -74
  246. data/src/core/lib/http/httpcli.h +13 -22
  247. data/src/core/lib/http/httpcli_security_connector.cc +27 -33
  248. data/src/core/lib/http/parser.h +0 -8
  249. data/src/core/lib/iomgr/block_annotate.h +10 -17
  250. data/src/core/lib/iomgr/call_combiner.cc +14 -17
  251. data/src/core/lib/iomgr/call_combiner.h +16 -34
  252. data/src/core/lib/iomgr/closure.h +24 -37
  253. data/src/core/lib/iomgr/combiner.cc +62 -66
  254. data/src/core/lib/iomgr/combiner.h +6 -16
  255. data/src/core/lib/iomgr/endpoint.cc +15 -21
  256. data/src/core/lib/iomgr/endpoint.h +16 -33
  257. data/src/core/lib/iomgr/endpoint_pair.h +0 -8
  258. data/src/core/lib/iomgr/endpoint_pair_posix.cc +4 -5
  259. data/src/core/lib/iomgr/endpoint_pair_windows.cc +4 -6
  260. data/src/core/lib/iomgr/error.cc +2 -6
  261. data/src/core/lib/iomgr/error.h +4 -9
  262. data/src/core/lib/iomgr/error_internal.h +0 -8
  263. data/src/core/lib/iomgr/ev_epoll1_linux.cc +110 -117
  264. data/src/core/lib/iomgr/ev_epoll1_linux.h +0 -8
  265. data/src/core/lib/iomgr/ev_epollex_linux.cc +111 -141
  266. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -8
  267. data/src/core/lib/iomgr/ev_epollsig_linux.cc +83 -109
  268. data/src/core/lib/iomgr/ev_epollsig_linux.h +2 -10
  269. data/src/core/lib/iomgr/ev_poll_posix.cc +103 -125
  270. data/src/core/lib/iomgr/ev_poll_posix.h +0 -8
  271. data/src/core/lib/iomgr/ev_posix.cc +35 -50
  272. data/src/core/lib/iomgr/ev_posix.h +27 -53
  273. data/src/core/lib/iomgr/exec_ctx.cc +46 -78
  274. data/src/core/lib/iomgr/exec_ctx.h +127 -60
  275. data/src/core/lib/iomgr/executor.cc +34 -38
  276. data/src/core/lib/iomgr/executor.h +3 -11
  277. data/src/core/lib/iomgr/fork_posix.cc +13 -12
  278. data/src/core/lib/iomgr/gethostname.h +0 -8
  279. data/src/core/lib/iomgr/gethostname_sysconf.cc +1 -1
  280. data/src/core/lib/iomgr/iocp_windows.cc +14 -16
  281. data/src/core/lib/iomgr/iocp_windows.h +1 -10
  282. data/src/core/lib/iomgr/iomgr.cc +60 -59
  283. data/src/core/lib/iomgr/iomgr.h +3 -12
  284. data/src/core/lib/iomgr/iomgr_internal.h +0 -8
  285. data/src/core/lib/iomgr/iomgr_uv.cc +2 -3
  286. data/src/core/lib/iomgr/iomgr_uv.h +0 -8
  287. data/src/core/lib/iomgr/is_epollexclusive_available.cc +1 -1
  288. data/src/core/lib/iomgr/load_file.cc +1 -1
  289. data/src/core/lib/iomgr/load_file.h +0 -8
  290. data/src/core/lib/iomgr/lockfree_event.cc +7 -8
  291. data/src/core/lib/iomgr/lockfree_event.h +3 -3
  292. data/src/core/lib/iomgr/polling_entity.cc +6 -10
  293. data/src/core/lib/iomgr/polling_entity.h +2 -11
  294. data/src/core/lib/iomgr/pollset.h +4 -13
  295. data/src/core/lib/iomgr/pollset_set.h +5 -18
  296. data/src/core/lib/iomgr/pollset_set_uv.cc +5 -10
  297. data/src/core/lib/iomgr/pollset_set_windows.cc +5 -10
  298. data/src/core/lib/iomgr/pollset_uv.cc +8 -9
  299. data/src/core/lib/iomgr/pollset_uv.h +0 -8
  300. data/src/core/lib/iomgr/pollset_windows.cc +14 -15
  301. data/src/core/lib/iomgr/pollset_windows.h +0 -8
  302. data/src/core/lib/iomgr/port.h +6 -1
  303. data/src/core/lib/iomgr/resolve_address.h +1 -10
  304. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -12
  305. data/src/core/lib/iomgr/resolve_address_uv.cc +7 -8
  306. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -9
  307. data/src/core/lib/iomgr/resource_quota.cc +77 -107
  308. data/src/core/lib/iomgr/resource_quota.h +8 -25
  309. data/src/core/lib/iomgr/sockaddr_utils.cc +1 -1
  310. data/src/core/lib/iomgr/sockaddr_utils.h +0 -8
  311. data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
  312. data/src/core/lib/iomgr/socket_factory_posix.h +0 -8
  313. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  314. data/src/core/lib/iomgr/socket_mutator.h +1 -9
  315. data/src/core/lib/iomgr/socket_utils.h +0 -8
  316. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -1
  317. data/src/core/lib/iomgr/socket_utils_posix.h +0 -8
  318. data/src/core/lib/iomgr/socket_windows.cc +8 -11
  319. data/src/core/lib/iomgr/socket_windows.h +3 -14
  320. data/src/core/lib/iomgr/tcp_client.h +1 -10
  321. data/src/core/lib/iomgr/tcp_client_posix.cc +94 -78
  322. data/src/core/lib/iomgr/tcp_client_posix.h +36 -8
  323. data/src/core/lib/iomgr/tcp_client_uv.cc +16 -23
  324. data/src/core/lib/iomgr/tcp_client_windows.cc +22 -25
  325. data/src/core/lib/iomgr/tcp_posix.cc +131 -153
  326. data/src/core/lib/iomgr/tcp_posix.h +3 -12
  327. data/src/core/lib/iomgr/tcp_server.h +6 -17
  328. data/src/core/lib/iomgr/tcp_server_posix.cc +31 -35
  329. data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -8
  330. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -1
  331. data/src/core/lib/iomgr/tcp_server_uv.cc +23 -34
  332. data/src/core/lib/iomgr/tcp_server_windows.cc +24 -34
  333. data/src/core/lib/iomgr/tcp_uv.cc +42 -56
  334. data/src/core/lib/iomgr/tcp_uv.h +0 -8
  335. data/src/core/lib/iomgr/tcp_windows.cc +43 -50
  336. data/src/core/lib/iomgr/tcp_windows.h +1 -9
  337. data/src/core/lib/iomgr/time_averaged_stats.h +0 -8
  338. data/src/core/lib/iomgr/timer.h +6 -15
  339. data/src/core/lib/iomgr/timer_generic.cc +22 -27
  340. data/src/core/lib/iomgr/timer_heap.h +0 -8
  341. data/src/core/lib/iomgr/timer_manager.cc +17 -19
  342. data/src/core/lib/iomgr/timer_manager.h +0 -8
  343. data/src/core/lib/iomgr/timer_uv.cc +12 -14
  344. data/src/core/lib/iomgr/udp_server.cc +148 -54
  345. data/src/core/lib/iomgr/udp_server.h +16 -21
  346. data/src/core/lib/iomgr/unix_sockets_posix.h +0 -8
  347. data/src/core/lib/iomgr/wakeup_fd_cv.cc +4 -4
  348. data/src/core/lib/iomgr/wakeup_fd_cv.h +12 -20
  349. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
  350. data/src/core/lib/iomgr/wakeup_fd_pipe.h +0 -8
  351. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -8
  352. data/src/core/lib/json/json.h +0 -8
  353. data/src/core/lib/json/json_reader.h +0 -8
  354. data/src/core/lib/json/json_writer.h +0 -8
  355. data/src/core/lib/profiling/basic_timers.cc +3 -2
  356. data/src/core/lib/profiling/timers.h +0 -8
  357. data/src/core/lib/security/context/security_context.cc +9 -10
  358. data/src/core/lib/security/context/security_context.h +0 -8
  359. data/src/core/lib/security/credentials/composite/composite_credentials.cc +23 -28
  360. data/src/core/lib/security/credentials/composite/composite_credentials.h +0 -8
  361. data/src/core/lib/security/credentials/credentials.cc +33 -42
  362. data/src/core/lib/security/credentials/credentials.h +24 -43
  363. data/src/core/lib/security/credentials/credentials_metadata.cc +2 -2
  364. data/src/core/lib/security/credentials/fake/fake_credentials.cc +16 -22
  365. data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -8
  366. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +3 -3
  367. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +28 -34
  368. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +0 -8
  369. data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -13
  370. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  371. data/src/core/lib/security/credentials/jwt/json_token.h +0 -8
  372. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +14 -20
  373. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +1 -10
  374. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +56 -72
  375. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +5 -17
  376. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +47 -55
  377. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +3 -12
  378. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +23 -28
  379. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -13
  380. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +0 -8
  381. data/src/core/lib/security/transport/auth_filters.h +0 -8
  382. data/src/core/lib/security/transport/client_auth_filter.cc +45 -54
  383. data/src/core/lib/security/transport/lb_targets_info.cc +2 -2
  384. data/src/core/lib/security/transport/lb_targets_info.h +0 -8
  385. data/src/core/lib/security/transport/secure_endpoint.cc +54 -68
  386. data/src/core/lib/security/transport/secure_endpoint.h +0 -8
  387. data/src/core/lib/security/transport/security_connector.cc +62 -86
  388. data/src/core/lib/security/transport/security_connector.h +22 -39
  389. data/src/core/lib/security/transport/security_handshaker.cc +83 -106
  390. data/src/core/lib/security/transport/security_handshaker.h +1 -10
  391. data/src/core/lib/security/transport/server_auth_filter.cc +31 -38
  392. data/src/core/lib/security/transport/tsi_error.h +0 -8
  393. data/src/core/lib/security/util/json_util.h +0 -8
  394. data/src/core/lib/slice/b64.cc +5 -6
  395. data/src/core/lib/slice/b64.h +3 -12
  396. data/src/core/lib/slice/percent_encoding.h +0 -8
  397. data/src/core/lib/slice/slice.cc +8 -9
  398. data/src/core/lib/slice/slice_buffer.cc +11 -16
  399. data/src/core/lib/slice/slice_hash_table.cc +5 -7
  400. data/src/core/lib/slice/slice_hash_table.h +2 -12
  401. data/src/core/lib/slice/slice_intern.cc +4 -5
  402. data/src/core/lib/slice/slice_internal.h +4 -15
  403. data/src/core/lib/slice/slice_string_helpers.cc +1 -1
  404. data/src/core/lib/slice/slice_string_helpers.h +1 -9
  405. data/src/core/lib/surface/alarm.cc +11 -14
  406. data/src/core/lib/surface/alarm_internal.h +0 -8
  407. data/src/core/lib/surface/byte_buffer.cc +2 -3
  408. data/src/core/lib/surface/byte_buffer_reader.cc +7 -9
  409. data/src/core/lib/surface/call.cc +198 -241
  410. data/src/core/lib/surface/call.h +9 -23
  411. data/src/core/lib/surface/call_details.cc +3 -4
  412. data/src/core/lib/surface/call_log_batch.cc +1 -1
  413. data/src/core/lib/surface/call_test_only.h +0 -8
  414. data/src/core/lib/surface/channel.cc +53 -64
  415. data/src/core/lib/surface/channel.h +12 -23
  416. data/src/core/lib/surface/channel_init.cc +2 -3
  417. data/src/core/lib/surface/channel_init.h +2 -12
  418. data/src/core/lib/surface/channel_ping.cc +7 -9
  419. data/src/core/lib/surface/channel_stack_type.h +0 -8
  420. data/src/core/lib/surface/completion_queue.cc +158 -176
  421. data/src/core/lib/surface/completion_queue.h +9 -20
  422. data/src/core/lib/surface/completion_queue_factory.h +0 -8
  423. data/src/core/lib/surface/event_string.cc +1 -1
  424. data/src/core/lib/surface/event_string.h +0 -8
  425. data/src/core/lib/surface/init.cc +27 -25
  426. data/src/core/lib/surface/init.h +0 -8
  427. data/src/core/lib/surface/init_secure.cc +2 -2
  428. data/src/core/lib/surface/lame_client.cc +30 -33
  429. data/src/core/lib/surface/lame_client.h +0 -8
  430. data/src/core/lib/surface/server.cc +151 -203
  431. data/src/core/lib/surface/server.h +7 -16
  432. data/src/core/lib/surface/validate_metadata.h +0 -8
  433. data/src/core/lib/surface/version.cc +2 -2
  434. data/src/core/lib/transport/bdp_estimator.cc +2 -2
  435. data/src/core/lib/transport/bdp_estimator.h +1 -1
  436. data/src/core/lib/transport/byte_stream.cc +24 -38
  437. data/src/core/lib/transport/byte_stream.h +10 -25
  438. data/src/core/lib/transport/connectivity_state.cc +9 -13
  439. data/src/core/lib/transport/connectivity_state.h +4 -14
  440. data/src/core/lib/transport/error_utils.cc +6 -6
  441. data/src/core/lib/transport/error_utils.h +2 -11
  442. data/src/core/lib/transport/metadata.cc +21 -23
  443. data/src/core/lib/transport/metadata.h +8 -20
  444. data/src/core/lib/transport/metadata_batch.cc +34 -45
  445. data/src/core/lib/transport/metadata_batch.h +18 -32
  446. data/src/core/lib/transport/service_config.cc +11 -15
  447. data/src/core/lib/transport/service_config.h +3 -13
  448. data/src/core/lib/transport/static_metadata.cc +1 -1
  449. data/src/core/lib/transport/static_metadata.h +1 -7
  450. data/src/core/lib/transport/status_conversion.cc +2 -3
  451. data/src/core/lib/transport/status_conversion.h +1 -10
  452. data/src/core/lib/transport/timeout_encoding.cc +1 -1
  453. data/src/core/lib/transport/timeout_encoding.h +1 -9
  454. data/src/core/lib/transport/transport.cc +36 -50
  455. data/src/core/lib/transport/transport.h +28 -30
  456. data/src/core/lib/transport/transport_impl.h +12 -23
  457. data/src/core/lib/transport/transport_op_string.cc +2 -2
  458. data/src/core/plugin_registry/grpc_plugin_registry.cc +34 -34
  459. data/src/core/tsi/fake_transport_security.cc +7 -10
  460. data/src/core/tsi/fake_transport_security.h +0 -8
  461. data/src/core/tsi/gts_transport_security.cc +2 -2
  462. data/src/core/tsi/gts_transport_security.h +0 -8
  463. data/src/core/tsi/ssl_transport_security.cc +3 -0
  464. data/src/core/tsi/ssl_transport_security.h +0 -8
  465. data/src/core/tsi/ssl_types.h +0 -8
  466. data/src/core/tsi/transport_security.h +1 -9
  467. data/src/core/tsi/transport_security_adapter.h +0 -8
  468. data/src/core/tsi/transport_security_grpc.cc +11 -18
  469. data/src/core/tsi/transport_security_grpc.h +9 -21
  470. data/src/core/tsi/transport_security_interface.h +0 -8
  471. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -30
  472. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -48
  473. data/src/ruby/lib/grpc/version.rb +1 -1
  474. data/src/ruby/spec/channel_connection_spec.rb +2 -1
  475. data/src/ruby/spec/client_auth_spec.rb +1 -1
  476. data/src/ruby/spec/client_server_spec.rb +2 -2
  477. data/src/ruby/spec/generic/active_call_spec.rb +1 -1
  478. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  479. data/src/ruby/spec/generic/interceptor_registry_spec.rb +1 -1
  480. data/src/ruby/spec/generic/rpc_server_spec.rb +12 -12
  481. data/src/ruby/spec/google_rpc_status_utils_spec.rb +3 -2
  482. data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
  483. data/src/ruby/spec/server_spec.rb +9 -9
  484. data/src/ruby/spec/support/helpers.rb +35 -1
  485. metadata +68 -66
  486. data/include/grpc/impl/codegen/exec_ctx_fwd.h +0 -26
  487. data/include/grpc/support/histogram.h +0 -64
  488. data/src/core/lib/support/histogram.cc +0 -227
@@ -28,15 +28,7 @@
28
28
  /// seperated by colons.
29
29
  #define GRPC_ARG_HTTP_CONNECT_HEADERS "grpc.http_connect_headers"
30
30
 
31
- #ifdef __cplusplus
32
- extern "C" {
33
- #endif
34
-
35
31
  /// Registers handshaker factory.
36
32
  void grpc_http_connect_register_handshaker_factory();
37
33
 
38
- #ifdef __cplusplus
39
- }
40
- #endif
41
-
42
34
  #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_HTTP_CONNECT_HANDSHAKER_H */
@@ -30,25 +30,24 @@
30
30
  #include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
31
31
  #include "src/core/ext/filters/client_channel/uri_parser.h"
32
32
  #include "src/core/lib/channel/channel_args.h"
33
+ #include "src/core/lib/gpr/env.h"
34
+ #include "src/core/lib/gpr/string.h"
33
35
  #include "src/core/lib/slice/b64.h"
34
- #include "src/core/lib/support/env.h"
35
- #include "src/core/lib/support/string.h"
36
36
 
37
37
  /**
38
38
  * Parses the 'http_proxy' env var and returns the proxy hostname to resolve or
39
- * NULL on error. Also sets 'user_cred' to user credentials if present in the
39
+ * nullptr on error. Also sets 'user_cred' to user credentials if present in the
40
40
  * 'http_proxy' env var, otherwise leaves it unchanged. It is caller's
41
41
  * responsibility to gpr_free user_cred.
42
42
  */
43
- static char* get_http_proxy_server(grpc_exec_ctx* exec_ctx, char** user_cred) {
43
+ static char* get_http_proxy_server(char** user_cred) {
44
44
  GPR_ASSERT(user_cred != nullptr);
45
45
  char* proxy_name = nullptr;
46
46
  char* uri_str = gpr_getenv("http_proxy");
47
47
  char** authority_strs = nullptr;
48
48
  size_t authority_nstrs;
49
49
  if (uri_str == nullptr) return nullptr;
50
- grpc_uri* uri =
51
- grpc_uri_parse(exec_ctx, uri_str, false /* suppress_errors */);
50
+ grpc_uri* uri = grpc_uri_parse(uri_str, false /* suppress_errors */);
52
51
  if (uri == nullptr || uri->authority == nullptr) {
53
52
  gpr_log(GPR_ERROR, "cannot parse value of 'http_proxy' env var");
54
53
  goto done;
@@ -82,18 +81,16 @@ done:
82
81
  return proxy_name;
83
82
  }
84
83
 
85
- static bool proxy_mapper_map_name(grpc_exec_ctx* exec_ctx,
86
- grpc_proxy_mapper* mapper,
84
+ static bool proxy_mapper_map_name(grpc_proxy_mapper* mapper,
87
85
  const char* server_uri,
88
86
  const grpc_channel_args* args,
89
87
  char** name_to_resolve,
90
88
  grpc_channel_args** new_args) {
91
89
  char* user_cred = nullptr;
92
- *name_to_resolve = get_http_proxy_server(exec_ctx, &user_cred);
90
+ *name_to_resolve = get_http_proxy_server(&user_cred);
93
91
  if (*name_to_resolve == nullptr) return false;
94
92
  char* no_proxy_str = nullptr;
95
- grpc_uri* uri =
96
- grpc_uri_parse(exec_ctx, server_uri, false /* suppress_errors */);
93
+ grpc_uri* uri = grpc_uri_parse(server_uri, false /* suppress_errors */);
97
94
  if (uri == nullptr || uri->path[0] == '\0') {
98
95
  gpr_log(GPR_ERROR,
99
96
  "'http_proxy' environment variable set, but cannot "
@@ -174,8 +171,7 @@ no_use_proxy:
174
171
  return false;
175
172
  }
176
173
 
177
- static bool proxy_mapper_map_address(grpc_exec_ctx* exec_ctx,
178
- grpc_proxy_mapper* mapper,
174
+ static bool proxy_mapper_map_address(grpc_proxy_mapper* mapper,
179
175
  const grpc_resolved_address* address,
180
176
  const grpc_channel_args* args,
181
177
  grpc_resolved_address** new_address,
@@ -19,14 +19,6 @@
19
19
  #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_HTTP_PROXY_H
20
20
  #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_HTTP_PROXY_H
21
21
 
22
- #ifdef __cplusplus
23
- extern "C" {
24
- #endif
25
-
26
22
  void grpc_register_http_proxy_mapper();
27
23
 
28
- #ifdef __cplusplus
29
- }
30
- #endif
31
-
32
24
  #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_HTTP_PROXY_H */
@@ -19,8 +19,6 @@
19
19
  #include "src/core/ext/filters/client_channel/lb_policy.h"
20
20
  #include "src/core/lib/iomgr/combiner.h"
21
21
 
22
- #define WEAK_REF_BITS 16
23
-
24
22
  grpc_core::DebugOnlyTraceFlag grpc_trace_lb_policy_refcount(
25
23
  false, "lb_policy_refcount");
26
24
 
@@ -28,136 +26,116 @@ void grpc_lb_policy_init(grpc_lb_policy* policy,
28
26
  const grpc_lb_policy_vtable* vtable,
29
27
  grpc_combiner* combiner) {
30
28
  policy->vtable = vtable;
31
- gpr_atm_no_barrier_store(&policy->ref_pair, 1 << WEAK_REF_BITS);
29
+ gpr_ref_init(&policy->refs, 1);
32
30
  policy->interested_parties = grpc_pollset_set_create();
33
31
  policy->combiner = GRPC_COMBINER_REF(combiner, "lb_policy");
34
32
  }
35
33
 
36
34
  #ifndef NDEBUG
37
- #define REF_FUNC_EXTRA_ARGS , const char *file, int line, const char *reason
38
- #define REF_MUTATE_EXTRA_ARGS REF_FUNC_EXTRA_ARGS, const char* purpose
39
- #define REF_FUNC_PASS_ARGS(new_reason) , file, line, new_reason
40
- #define REF_MUTATE_PASS_ARGS(purpose) , file, line, reason, purpose
35
+ void grpc_lb_policy_ref(grpc_lb_policy* lb_policy, const char* file, int line,
36
+ const char* reason) {
37
+ if (grpc_trace_lb_policy_refcount.enabled()) {
38
+ gpr_atm old_refs = gpr_atm_no_barrier_load(&lb_policy->refs.count);
39
+ gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
40
+ "LB_POLICY:%p ref %" PRIdPTR " -> %" PRIdPTR " %s", lb_policy,
41
+ old_refs, old_refs + 1, reason);
42
+ }
41
43
  #else
42
- #define REF_FUNC_EXTRA_ARGS
43
- #define REF_MUTATE_EXTRA_ARGS
44
- #define REF_FUNC_PASS_ARGS(new_reason)
45
- #define REF_MUTATE_PASS_ARGS(x)
44
+ void grpc_lb_policy_ref(grpc_lb_policy* lb_policy) {
46
45
  #endif
46
+ gpr_ref(&lb_policy->refs);
47
+ }
47
48
 
48
- static gpr_atm ref_mutate(grpc_lb_policy* c, gpr_atm delta,
49
- int barrier REF_MUTATE_EXTRA_ARGS) {
50
- gpr_atm old_val = barrier ? gpr_atm_full_fetch_add(&c->ref_pair, delta)
51
- : gpr_atm_no_barrier_fetch_add(&c->ref_pair, delta);
52
49
  #ifndef NDEBUG
50
+ void grpc_lb_policy_unref(grpc_lb_policy* lb_policy, const char* file, int line,
51
+ const char* reason) {
53
52
  if (grpc_trace_lb_policy_refcount.enabled()) {
53
+ gpr_atm old_refs = gpr_atm_no_barrier_load(&lb_policy->refs.count);
54
54
  gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
55
- "LB_POLICY: %p %12s 0x%" PRIxPTR " -> 0x%" PRIxPTR " [%s]", c,
56
- purpose, old_val, old_val + delta, reason);
55
+ "LB_POLICY:%p unref %" PRIdPTR " -> %" PRIdPTR " %s", lb_policy,
56
+ old_refs, old_refs - 1, reason);
57
57
  }
58
+ #else
59
+ void grpc_lb_policy_unref(grpc_lb_policy* lb_policy) {
58
60
  #endif
59
- return old_val;
60
- }
61
-
62
- void grpc_lb_policy_ref(grpc_lb_policy* policy REF_FUNC_EXTRA_ARGS) {
63
- ref_mutate(policy, 1 << WEAK_REF_BITS, 0 REF_MUTATE_PASS_ARGS("STRONG_REF"));
64
- }
65
-
66
- static void shutdown_locked(grpc_exec_ctx* exec_ctx, void* arg,
67
- grpc_error* error) {
68
- grpc_lb_policy* policy = (grpc_lb_policy*)arg;
69
- policy->vtable->shutdown_locked(exec_ctx, policy);
70
- GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, policy, "strong-unref");
71
- }
72
-
73
- void grpc_lb_policy_unref(grpc_exec_ctx* exec_ctx,
74
- grpc_lb_policy* policy REF_FUNC_EXTRA_ARGS) {
75
- gpr_atm old_val =
76
- ref_mutate(policy, (gpr_atm)1 - (gpr_atm)(1 << WEAK_REF_BITS),
77
- 1 REF_MUTATE_PASS_ARGS("STRONG_UNREF"));
78
- gpr_atm mask = ~(gpr_atm)((1 << WEAK_REF_BITS) - 1);
79
- gpr_atm check = 1 << WEAK_REF_BITS;
80
- if ((old_val & mask) == check) {
81
- GRPC_CLOSURE_SCHED(
82
- exec_ctx,
83
- GRPC_CLOSURE_CREATE(shutdown_locked, policy,
84
- grpc_combiner_scheduler(policy->combiner)),
85
- GRPC_ERROR_NONE);
86
- } else {
87
- grpc_lb_policy_weak_unref(exec_ctx,
88
- policy REF_FUNC_PASS_ARGS("strong-unref"));
61
+ if (gpr_unref(&lb_policy->refs)) {
62
+ grpc_pollset_set_destroy(lb_policy->interested_parties);
63
+ grpc_combiner* combiner = lb_policy->combiner;
64
+ lb_policy->vtable->destroy(lb_policy);
65
+ GRPC_COMBINER_UNREF(combiner, "lb_policy");
89
66
  }
90
67
  }
91
68
 
92
- void grpc_lb_policy_weak_ref(grpc_lb_policy* policy REF_FUNC_EXTRA_ARGS) {
93
- ref_mutate(policy, 1, 0 REF_MUTATE_PASS_ARGS("WEAK_REF"));
94
- }
95
-
96
- void grpc_lb_policy_weak_unref(grpc_exec_ctx* exec_ctx,
97
- grpc_lb_policy* policy REF_FUNC_EXTRA_ARGS) {
98
- gpr_atm old_val =
99
- ref_mutate(policy, -(gpr_atm)1, 1 REF_MUTATE_PASS_ARGS("WEAK_UNREF"));
100
- if (old_val == 1) {
101
- grpc_pollset_set_destroy(exec_ctx, policy->interested_parties);
102
- grpc_combiner* combiner = policy->combiner;
103
- policy->vtable->destroy(exec_ctx, policy);
104
- GRPC_COMBINER_UNREF(exec_ctx, combiner, "lb_policy");
105
- }
69
+ void grpc_lb_policy_shutdown_locked(grpc_lb_policy* policy,
70
+ grpc_lb_policy* new_policy) {
71
+ policy->vtable->shutdown_locked(policy, new_policy);
106
72
  }
107
73
 
108
- int grpc_lb_policy_pick_locked(grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy,
109
- const grpc_lb_policy_pick_args* pick_args,
110
- grpc_connected_subchannel** target,
111
- grpc_call_context_element* context,
112
- void** user_data, grpc_closure* on_complete) {
113
- return policy->vtable->pick_locked(exec_ctx, policy, pick_args, target,
114
- context, user_data, on_complete);
74
+ int grpc_lb_policy_pick_locked(grpc_lb_policy* policy,
75
+ grpc_lb_policy_pick_state* pick) {
76
+ return policy->vtable->pick_locked(policy, pick);
115
77
  }
116
78
 
117
- void grpc_lb_policy_cancel_pick_locked(grpc_exec_ctx* exec_ctx,
118
- grpc_lb_policy* policy,
119
- grpc_connected_subchannel** target,
79
+ void grpc_lb_policy_cancel_pick_locked(grpc_lb_policy* policy,
80
+ grpc_lb_policy_pick_state* pick,
120
81
  grpc_error* error) {
121
- policy->vtable->cancel_pick_locked(exec_ctx, policy, target, error);
82
+ policy->vtable->cancel_pick_locked(policy, pick, error);
122
83
  }
123
84
 
124
- void grpc_lb_policy_cancel_picks_locked(grpc_exec_ctx* exec_ctx,
125
- grpc_lb_policy* policy,
85
+ void grpc_lb_policy_cancel_picks_locked(grpc_lb_policy* policy,
126
86
  uint32_t initial_metadata_flags_mask,
127
87
  uint32_t initial_metadata_flags_eq,
128
88
  grpc_error* error) {
129
- policy->vtable->cancel_picks_locked(exec_ctx, policy,
130
- initial_metadata_flags_mask,
89
+ policy->vtable->cancel_picks_locked(policy, initial_metadata_flags_mask,
131
90
  initial_metadata_flags_eq, error);
132
91
  }
133
92
 
134
- void grpc_lb_policy_exit_idle_locked(grpc_exec_ctx* exec_ctx,
135
- grpc_lb_policy* policy) {
136
- policy->vtable->exit_idle_locked(exec_ctx, policy);
93
+ void grpc_lb_policy_exit_idle_locked(grpc_lb_policy* policy) {
94
+ policy->vtable->exit_idle_locked(policy);
137
95
  }
138
96
 
139
- void grpc_lb_policy_ping_one_locked(grpc_exec_ctx* exec_ctx,
140
- grpc_lb_policy* policy,
141
- grpc_closure* closure) {
142
- policy->vtable->ping_one_locked(exec_ctx, policy, closure);
97
+ void grpc_lb_policy_ping_one_locked(grpc_lb_policy* policy,
98
+ grpc_closure* on_initiate,
99
+ grpc_closure* on_ack) {
100
+ policy->vtable->ping_one_locked(policy, on_initiate, on_ack);
143
101
  }
144
102
 
145
103
  void grpc_lb_policy_notify_on_state_change_locked(
146
- grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy,
147
- grpc_connectivity_state* state, grpc_closure* closure) {
148
- policy->vtable->notify_on_state_change_locked(exec_ctx, policy, state,
149
- closure);
104
+ grpc_lb_policy* policy, grpc_connectivity_state* state,
105
+ grpc_closure* closure) {
106
+ policy->vtable->notify_on_state_change_locked(policy, state, closure);
150
107
  }
151
108
 
152
109
  grpc_connectivity_state grpc_lb_policy_check_connectivity_locked(
153
- grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy,
154
- grpc_error** connectivity_error) {
155
- return policy->vtable->check_connectivity_locked(exec_ctx, policy,
156
- connectivity_error);
110
+ grpc_lb_policy* policy, grpc_error** connectivity_error) {
111
+ return policy->vtable->check_connectivity_locked(policy, connectivity_error);
157
112
  }
158
113
 
159
- void grpc_lb_policy_update_locked(grpc_exec_ctx* exec_ctx,
160
- grpc_lb_policy* policy,
114
+ void grpc_lb_policy_update_locked(grpc_lb_policy* policy,
161
115
  const grpc_lb_policy_args* lb_policy_args) {
162
- policy->vtable->update_locked(exec_ctx, policy, lb_policy_args);
116
+ policy->vtable->update_locked(policy, lb_policy_args);
117
+ }
118
+
119
+ void grpc_lb_policy_set_reresolve_closure_locked(
120
+ grpc_lb_policy* policy, grpc_closure* request_reresolution) {
121
+ policy->vtable->set_reresolve_closure_locked(policy, request_reresolution);
122
+ }
123
+
124
+ void grpc_lb_policy_try_reresolve(grpc_lb_policy* policy,
125
+ grpc_core::TraceFlag* grpc_lb_trace,
126
+ grpc_error* error) {
127
+ if (policy->request_reresolution != nullptr) {
128
+ GRPC_CLOSURE_SCHED(policy->request_reresolution, error);
129
+ policy->request_reresolution = nullptr;
130
+ if (grpc_lb_trace->enabled()) {
131
+ gpr_log(GPR_DEBUG,
132
+ "%s %p: scheduling re-resolution closure with error=%s.",
133
+ grpc_lb_trace->name(), policy, grpc_error_string(error));
134
+ }
135
+ } else {
136
+ if (grpc_lb_trace->enabled() && error == GRPC_ERROR_NONE) {
137
+ gpr_log(GPR_DEBUG, "%s %p: re-resolution already in progress.",
138
+ grpc_lb_trace->name(), policy);
139
+ }
140
+ }
163
141
  }
@@ -20,13 +20,10 @@
20
20
  #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_H
21
21
 
22
22
  #include "src/core/ext/filters/client_channel/subchannel.h"
23
+ #include "src/core/lib/gpr++/ref_counted_ptr.h"
23
24
  #include "src/core/lib/iomgr/polling_entity.h"
24
25
  #include "src/core/lib/transport/connectivity_state.h"
25
26
 
26
- #ifdef __cplusplus
27
- extern "C" {
28
- #endif
29
-
30
27
  /** A load balancing policy: specified by a vtable and a struct (which
31
28
  is expected to be extended to contain some parameters) */
32
29
  typedef struct grpc_lb_policy grpc_lb_policy;
@@ -37,103 +34,99 @@ extern grpc_core::DebugOnlyTraceFlag grpc_trace_lb_policy_refcount;
37
34
 
38
35
  struct grpc_lb_policy {
39
36
  const grpc_lb_policy_vtable* vtable;
40
- gpr_atm ref_pair;
37
+ gpr_refcount refs;
41
38
  /* owned pointer to interested parties in load balancing decisions */
42
39
  grpc_pollset_set* interested_parties;
43
40
  /* combiner under which lb_policy actions take place */
44
41
  grpc_combiner* combiner;
42
+ /* callback to force a re-resolution */
43
+ grpc_closure* request_reresolution;
45
44
  };
46
45
 
47
- /** Extra arguments for an LB pick */
48
- typedef struct grpc_lb_policy_pick_args {
49
- /** Initial metadata associated with the picking call. */
46
+ /// State used for an LB pick.
47
+ typedef struct grpc_lb_policy_pick_state {
48
+ /// Initial metadata associated with the picking call.
50
49
  grpc_metadata_batch* initial_metadata;
51
- /** Bitmask used for selective cancelling. See \a
52
- * grpc_lb_policy_cancel_picks() and \a GRPC_INITIAL_METADATA_* in
53
- * grpc_types.h */
50
+ /// Bitmask used for selective cancelling. See \a
51
+ /// grpc_lb_policy_cancel_picks() and \a GRPC_INITIAL_METADATA_* in
52
+ /// grpc_types.h.
54
53
  uint32_t initial_metadata_flags;
55
- /** Storage for LB token in \a initial_metadata, or NULL if not used */
56
- grpc_linked_mdelem* lb_token_mdelem_storage;
57
- } grpc_lb_policy_pick_args;
54
+ /// Storage for LB token in \a initial_metadata, or NULL if not used.
55
+ grpc_linked_mdelem lb_token_mdelem_storage;
56
+ /// Closure to run when pick is complete, if not completed synchronously.
57
+ grpc_closure* on_complete;
58
+ /// Will be set to the selected subchannel, or nullptr on failure or when
59
+ /// the LB policy decides to drop the call.
60
+ grpc_core::RefCountedPtr<grpc_core::ConnectedSubchannel> connected_subchannel;
61
+ /// Will be populated with context to pass to the subchannel call, if needed.
62
+ grpc_call_context_element subchannel_call_context[GRPC_CONTEXT_COUNT];
63
+ /// Upon success, \a *user_data will be set to whatever opaque information
64
+ /// may need to be propagated from the LB policy, or NULL if not needed.
65
+ void** user_data;
66
+ /// Next pointer. For internal use by LB policy.
67
+ struct grpc_lb_policy_pick_state* next;
68
+ } grpc_lb_policy_pick_state;
58
69
 
59
70
  struct grpc_lb_policy_vtable {
60
- void (*destroy)(grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy);
61
- void (*shutdown_locked)(grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy);
71
+ void (*destroy)(grpc_lb_policy* policy);
72
+
73
+ /// \see grpc_lb_policy_shutdown_locked().
74
+ void (*shutdown_locked)(grpc_lb_policy* policy, grpc_lb_policy* new_policy);
62
75
 
63
76
  /** \see grpc_lb_policy_pick */
64
- int (*pick_locked)(grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy,
65
- const grpc_lb_policy_pick_args* pick_args,
66
- grpc_connected_subchannel** target,
67
- grpc_call_context_element* context, void** user_data,
68
- grpc_closure* on_complete);
77
+ int (*pick_locked)(grpc_lb_policy* policy, grpc_lb_policy_pick_state* pick);
69
78
 
70
79
  /** \see grpc_lb_policy_cancel_pick */
71
- void (*cancel_pick_locked)(grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy,
72
- grpc_connected_subchannel** target,
80
+ void (*cancel_pick_locked)(grpc_lb_policy* policy,
81
+ grpc_lb_policy_pick_state* pick,
73
82
  grpc_error* error);
74
83
 
75
84
  /** \see grpc_lb_policy_cancel_picks */
76
- void (*cancel_picks_locked)(grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy,
85
+ void (*cancel_picks_locked)(grpc_lb_policy* policy,
77
86
  uint32_t initial_metadata_flags_mask,
78
87
  uint32_t initial_metadata_flags_eq,
79
88
  grpc_error* error);
80
89
 
81
90
  /** \see grpc_lb_policy_ping_one */
82
- void (*ping_one_locked)(grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy,
83
- grpc_closure* closure);
91
+ void (*ping_one_locked)(grpc_lb_policy* policy, grpc_closure* on_initiate,
92
+ grpc_closure* on_ack);
84
93
 
85
94
  /** Try to enter a READY connectivity state */
86
- void (*exit_idle_locked)(grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy);
95
+ void (*exit_idle_locked)(grpc_lb_policy* policy);
87
96
 
88
97
  /** check the current connectivity of the lb_policy */
89
98
  grpc_connectivity_state (*check_connectivity_locked)(
90
- grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy,
91
- grpc_error** connectivity_error);
99
+ grpc_lb_policy* policy, grpc_error** connectivity_error);
92
100
 
93
101
  /** call notify when the connectivity state of a channel changes from *state.
94
102
  Updates *state with the new state of the policy. Calling with a NULL \a
95
103
  state cancels the subscription. */
96
- void (*notify_on_state_change_locked)(grpc_exec_ctx* exec_ctx,
97
- grpc_lb_policy* policy,
104
+ void (*notify_on_state_change_locked)(grpc_lb_policy* policy,
98
105
  grpc_connectivity_state* state,
99
106
  grpc_closure* closure);
100
107
 
101
- void (*update_locked)(grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy,
108
+ void (*update_locked)(grpc_lb_policy* policy,
102
109
  const grpc_lb_policy_args* args);
110
+
111
+ /** \see grpc_lb_policy_set_reresolve_closure */
112
+ void (*set_reresolve_closure_locked)(grpc_lb_policy* policy,
113
+ grpc_closure* request_reresolution);
103
114
  };
104
115
 
105
116
  #ifndef NDEBUG
106
-
107
- /* Strong references: the policy will shutdown when they reach zero */
108
117
  #define GRPC_LB_POLICY_REF(p, r) \
109
118
  grpc_lb_policy_ref((p), __FILE__, __LINE__, (r))
110
- #define GRPC_LB_POLICY_UNREF(exec_ctx, p, r) \
111
- grpc_lb_policy_unref((exec_ctx), (p), __FILE__, __LINE__, (r))
112
-
113
- /* Weak references: they don't prevent the shutdown of the LB policy. When no
114
- * strong references are left but there are still weak ones, shutdown is called.
115
- * Once the weak reference also reaches zero, the LB policy is destroyed. */
116
- #define GRPC_LB_POLICY_WEAK_REF(p, r) \
117
- grpc_lb_policy_weak_ref((p), __FILE__, __LINE__, (r))
118
- #define GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, p, r) \
119
- grpc_lb_policy_weak_unref((exec_ctx), (p), __FILE__, __LINE__, (r))
119
+ #define GRPC_LB_POLICY_UNREF(p, r) \
120
+ grpc_lb_policy_unref((p), __FILE__, __LINE__, (r))
120
121
  void grpc_lb_policy_ref(grpc_lb_policy* policy, const char* file, int line,
121
122
  const char* reason);
122
- void grpc_lb_policy_unref(grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy,
123
- const char* file, int line, const char* reason);
124
- void grpc_lb_policy_weak_ref(grpc_lb_policy* policy, const char* file, int line,
125
- const char* reason);
126
- void grpc_lb_policy_weak_unref(grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy,
127
- const char* file, int line, const char* reason);
128
- #else
123
+ void grpc_lb_policy_unref(grpc_lb_policy* policy, const char* file, int line,
124
+ const char* reason);
125
+ #else // !NDEBUG
129
126
  #define GRPC_LB_POLICY_REF(p, r) grpc_lb_policy_ref((p))
130
- #define GRPC_LB_POLICY_UNREF(cl, p, r) grpc_lb_policy_unref((cl), (p))
131
- #define GRPC_LB_POLICY_WEAK_REF(p, r) grpc_lb_policy_weak_ref((p))
132
- #define GRPC_LB_POLICY_WEAK_UNREF(cl, p, r) grpc_lb_policy_weak_unref((cl), (p))
127
+ #define GRPC_LB_POLICY_UNREF(p, r) grpc_lb_policy_unref((p))
133
128
  void grpc_lb_policy_ref(grpc_lb_policy* policy);
134
- void grpc_lb_policy_unref(grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy);
135
- void grpc_lb_policy_weak_ref(grpc_lb_policy* policy);
136
- void grpc_lb_policy_weak_unref(grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy);
129
+ void grpc_lb_policy_unref(grpc_lb_policy* policy);
137
130
  #endif
138
131
 
139
132
  /** called by concrete implementations to initialize the base struct */
@@ -141,73 +134,71 @@ void grpc_lb_policy_init(grpc_lb_policy* policy,
141
134
  const grpc_lb_policy_vtable* vtable,
142
135
  grpc_combiner* combiner);
143
136
 
144
- /** Finds an appropriate subchannel for a call, based on \a pick_args.
145
-
146
- \a target will be set to the selected subchannel, or NULL on failure
147
- or when the LB policy decides to drop the call.
137
+ /// Shuts down \a policy.
138
+ /// If \a new_policy is non-null, any pending picks will be restarted
139
+ /// on that policy; otherwise, they will be failed.
140
+ void grpc_lb_policy_shutdown_locked(grpc_lb_policy* policy,
141
+ grpc_lb_policy* new_policy);
148
142
 
149
- Upon success, \a user_data will be set to whatever opaque information
150
- may need to be propagated from the LB policy, or NULL if not needed.
151
- \a context will be populated with context to pass to the subchannel
152
- call, if needed.
143
+ /** Finds an appropriate subchannel for a call, based on data in \a pick.
144
+ \a pick must remain alive until the pick is complete.
153
145
 
154
146
  If the pick succeeds and a result is known immediately, a non-zero
155
- value will be returned. Otherwise, \a on_complete will be invoked
147
+ value will be returned. Otherwise, \a pick->on_complete will be invoked
156
148
  once the pick is complete with its error argument set to indicate
157
149
  success or failure.
158
150
 
159
151
  Any IO should be done under the \a interested_parties \a grpc_pollset_set
160
152
  in the \a grpc_lb_policy struct. */
161
- int grpc_lb_policy_pick_locked(grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy,
162
- const grpc_lb_policy_pick_args* pick_args,
163
- grpc_connected_subchannel** target,
164
- grpc_call_context_element* context,
165
- void** user_data, grpc_closure* on_complete);
153
+ int grpc_lb_policy_pick_locked(grpc_lb_policy* policy,
154
+ grpc_lb_policy_pick_state* pick);
166
155
 
167
- /** Perform a connected subchannel ping (see \a grpc_connected_subchannel_ping)
156
+ /** Perform a connected subchannel ping (see \a
157
+ grpc_core::ConnectedSubchannel::Ping)
168
158
  against one of the connected subchannels managed by \a policy. */
169
- void grpc_lb_policy_ping_one_locked(grpc_exec_ctx* exec_ctx,
170
- grpc_lb_policy* policy,
171
- grpc_closure* closure);
159
+ void grpc_lb_policy_ping_one_locked(grpc_lb_policy* policy,
160
+ grpc_closure* on_initiate,
161
+ grpc_closure* on_ack);
172
162
 
173
- /** Cancel picks for \a target.
163
+ /** Cancel picks for \a pick.
174
164
  The \a on_complete callback of the pending picks will be invoked with \a
175
165
  *target set to NULL. */
176
- void grpc_lb_policy_cancel_pick_locked(grpc_exec_ctx* exec_ctx,
177
- grpc_lb_policy* policy,
178
- grpc_connected_subchannel** target,
166
+ void grpc_lb_policy_cancel_pick_locked(grpc_lb_policy* policy,
167
+ grpc_lb_policy_pick_state* pick,
179
168
  grpc_error* error);
180
169
 
181
170
  /** Cancel all pending picks for which their \a initial_metadata_flags (as given
182
171
  in the call to \a grpc_lb_policy_pick) matches \a initial_metadata_flags_eq
183
172
  when AND'd with \a initial_metadata_flags_mask */
184
- void grpc_lb_policy_cancel_picks_locked(grpc_exec_ctx* exec_ctx,
185
- grpc_lb_policy* policy,
173
+ void grpc_lb_policy_cancel_picks_locked(grpc_lb_policy* policy,
186
174
  uint32_t initial_metadata_flags_mask,
187
175
  uint32_t initial_metadata_flags_eq,
188
176
  grpc_error* error);
189
177
 
190
178
  /** Try to enter a READY connectivity state */
191
- void grpc_lb_policy_exit_idle_locked(grpc_exec_ctx* exec_ctx,
192
- grpc_lb_policy* policy);
179
+ void grpc_lb_policy_exit_idle_locked(grpc_lb_policy* policy);
193
180
 
194
181
  /* Call notify when the connectivity state of a channel changes from \a *state.
195
182
  * Updates \a *state with the new state of the policy */
196
183
  void grpc_lb_policy_notify_on_state_change_locked(
197
- grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy,
198
- grpc_connectivity_state* state, grpc_closure* closure);
184
+ grpc_lb_policy* policy, grpc_connectivity_state* state,
185
+ grpc_closure* closure);
199
186
 
200
187
  grpc_connectivity_state grpc_lb_policy_check_connectivity_locked(
201
- grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy,
202
- grpc_error** connectivity_error);
188
+ grpc_lb_policy* policy, grpc_error** connectivity_error);
203
189
 
204
190
  /** Update \a policy with \a lb_policy_args. */
205
- void grpc_lb_policy_update_locked(grpc_exec_ctx* exec_ctx,
206
- grpc_lb_policy* policy,
191
+ void grpc_lb_policy_update_locked(grpc_lb_policy* policy,
207
192
  const grpc_lb_policy_args* lb_policy_args);
208
193
 
209
- #ifdef __cplusplus
210
- }
211
- #endif
194
+ /** Set the re-resolution closure to \a request_reresolution. */
195
+ void grpc_lb_policy_set_reresolve_closure_locked(
196
+ grpc_lb_policy* policy, grpc_closure* request_reresolution);
197
+
198
+ /** Try to request a re-resolution. It's NOT a public API; it's only for use by
199
+ the LB policy implementations. */
200
+ void grpc_lb_policy_try_reresolve(grpc_lb_policy* policy,
201
+ grpc_core::TraceFlag* grpc_lb_trace,
202
+ grpc_error* error);
212
203
 
213
204
  #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_H */