grpc 1.7.3 → 1.8.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 (616) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2106 -2116
  3. data/include/grpc/census.h +1 -432
  4. data/include/grpc/compression.h +9 -9
  5. data/include/grpc/grpc.h +115 -98
  6. data/include/grpc/grpc_cronet.h +3 -3
  7. data/include/grpc/grpc_posix.h +4 -4
  8. data/include/grpc/grpc_security.h +160 -88
  9. data/include/grpc/grpc_security_constants.h +7 -0
  10. data/include/grpc/impl/codegen/atm.h +9 -1
  11. data/include/grpc/impl/codegen/atm_gcc_atomic.h +13 -4
  12. data/include/grpc/impl/codegen/atm_gcc_sync.h +6 -5
  13. data/include/grpc/impl/codegen/atm_windows.h +23 -22
  14. data/include/grpc/impl/codegen/byte_buffer.h +14 -14
  15. data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -2
  16. data/include/grpc/impl/codegen/connectivity_state.h +0 -2
  17. data/include/grpc/impl/codegen/grpc_types.h +32 -28
  18. data/include/grpc/impl/codegen/port_platform.h +48 -0
  19. data/include/grpc/impl/codegen/slice.h +10 -10
  20. data/include/grpc/impl/codegen/sync_generic.h +9 -3
  21. data/include/grpc/slice.h +16 -17
  22. data/include/grpc/slice_buffer.h +22 -22
  23. data/include/grpc/support/alloc.h +11 -11
  24. data/include/grpc/support/avl.h +28 -20
  25. data/include/grpc/support/cmdline.h +13 -13
  26. data/include/grpc/support/histogram.h +17 -17
  27. data/include/grpc/support/host_port.h +2 -2
  28. data/include/grpc/support/log.h +9 -9
  29. data/include/grpc/support/log_windows.h +1 -1
  30. data/include/grpc/support/string_util.h +2 -2
  31. data/include/grpc/support/subprocess.h +5 -5
  32. data/include/grpc/support/sync.h +43 -27
  33. data/include/grpc/support/thd.h +6 -6
  34. data/include/grpc/support/tls_gcc.h +1 -1
  35. data/include/grpc/support/tls_pthread.h +1 -1
  36. data/src/core/ext/census/{grpc_context.c → grpc_context.cc} +5 -8
  37. data/src/core/ext/filters/client_channel/backup_poller.cc +165 -0
  38. data/src/core/ext/{census/grpc_filter.h → filters/client_channel/backup_poller.h} +12 -7
  39. data/src/core/ext/filters/client_channel/{channel_connectivity.c → channel_connectivity.cc} +45 -42
  40. data/src/core/ext/filters/client_channel/{client_channel.c → client_channel.cc} +452 -417
  41. data/src/core/ext/filters/client_channel/client_channel.h +16 -8
  42. data/src/core/ext/filters/client_channel/{client_channel_factory.c → client_channel_factory.cc} +0 -0
  43. data/src/core/ext/filters/client_channel/client_channel_factory.h +29 -21
  44. data/src/core/ext/filters/client_channel/{client_channel_plugin.c → client_channel_plugin.cc} +15 -19
  45. data/src/core/ext/filters/client_channel/{connector.c → connector.cc} +0 -0
  46. data/src/core/ext/filters/client_channel/connector.h +29 -21
  47. data/src/core/ext/filters/client_channel/{http_connect_handshaker.c → http_connect_handshaker.cc} +10 -10
  48. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +8 -0
  49. data/src/core/ext/filters/client_channel/{http_proxy.c → http_proxy.cc} +14 -14
  50. data/src/core/ext/filters/client_channel/http_proxy.h +8 -0
  51. data/src/core/ext/filters/client_channel/{lb_policy.c → lb_policy.cc} +47 -48
  52. data/src/core/ext/filters/client_channel/lb_policy.h +76 -70
  53. data/src/core/ext/filters/client_channel/lb_policy/grpclb/{client_load_reporting_filter.c → client_load_reporting_filter.cc} +28 -29
  54. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +9 -1
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb.c → grpclb.cc} +554 -563
  56. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +9 -1
  57. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +17 -9
  58. data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb_channel_secure.c → grpclb_channel_secure.cc} +17 -17
  59. data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb_client_stats.c → grpclb_client_stats.cc} +3 -3
  60. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +9 -1
  61. data/src/core/ext/filters/client_channel/lb_policy/grpclb/{load_balancer_api.c → load_balancer_api.cc} +64 -67
  62. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +20 -21
  63. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +599 -0
  64. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +695 -0
  65. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +270 -0
  66. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +153 -0
  67. data/src/core/ext/filters/client_channel/{lb_policy_factory.c → lb_policy_factory.cc} +10 -10
  68. data/src/core/ext/filters/client_channel/lb_policy_factory.h +48 -40
  69. data/src/core/ext/filters/client_channel/{lb_policy_registry.c → lb_policy_registry.cc} +9 -9
  70. data/src/core/ext/filters/client_channel/lb_policy_registry.h +11 -3
  71. data/src/core/ext/filters/client_channel/{parse_address.c → parse_address.cc} +24 -24
  72. data/src/core/ext/filters/client_channel/parse_address.h +14 -6
  73. data/src/core/ext/filters/client_channel/{proxy_mapper.c → proxy_mapper.cc} +0 -0
  74. data/src/core/ext/filters/client_channel/proxy_mapper.h +8 -0
  75. data/src/core/ext/filters/client_channel/{proxy_mapper_registry.c → proxy_mapper_registry.cc} +0 -0
  76. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -0
  77. data/src/core/ext/filters/client_channel/{resolver.c → resolver.cc} +21 -23
  78. data/src/core/ext/filters/client_channel/resolver.h +33 -27
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{dns_resolver_ares.c → dns_resolver_ares.cc} +133 -133
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +18 -9
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{grpc_ares_ev_driver_posix.c → grpc_ares_ev_driver_posix.cc} +58 -56
  82. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{grpc_ares_wrapper.c → grpc_ares_wrapper.cc} +118 -115
  83. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +23 -15
  84. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +60 -0
  85. data/src/core/ext/filters/client_channel/resolver/dns/native/{dns_resolver.c → dns_resolver.cc} +100 -94
  86. data/src/core/ext/filters/client_channel/resolver/fake/{fake_resolver.c → fake_resolver.cc} +14 -14
  87. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +9 -1
  88. data/src/core/ext/filters/client_channel/resolver/sockaddr/{sockaddr_resolver.c → sockaddr_resolver.cc} +60 -60
  89. data/src/core/ext/filters/client_channel/{resolver_factory.c → resolver_factory.cc} +2 -2
  90. data/src/core/ext/filters/client_channel/resolver_factory.h +27 -19
  91. data/src/core/ext/filters/client_channel/{resolver_registry.c → resolver_registry.cc} +35 -35
  92. data/src/core/ext/filters/client_channel/resolver_registry.h +18 -10
  93. data/src/core/ext/filters/client_channel/{retry_throttle.c → retry_throttle.cc} +10 -10
  94. data/src/core/ext/filters/client_channel/retry_throttle.h +8 -0
  95. data/src/core/ext/filters/client_channel/{subchannel.c → subchannel.cc} +210 -213
  96. data/src/core/ext/filters/client_channel/subchannel.h +68 -60
  97. data/src/core/ext/filters/client_channel/{subchannel_index.c → subchannel_index.cc} +52 -52
  98. data/src/core/ext/filters/client_channel/subchannel_index.h +22 -14
  99. data/src/core/ext/filters/client_channel/{uri_parser.c → uri_parser.cc} +29 -27
  100. data/src/core/ext/filters/client_channel/uri_parser.h +18 -10
  101. data/src/core/ext/filters/deadline/{deadline_filter.c → deadline_filter.cc} +12 -15
  102. data/src/core/ext/filters/deadline/deadline_filter.h +11 -2
  103. data/src/core/ext/filters/http/client/{http_client_filter.c → http_client_filter.cc} +83 -83
  104. data/src/core/ext/filters/http/client/http_client_filter.h +8 -0
  105. data/src/core/ext/filters/http/{http_filters_plugin.c → http_filters_plugin.cc} +20 -21
  106. data/src/core/ext/filters/http/message_compress/{message_compress_filter.c → message_compress_filter.cc} +84 -83
  107. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +9 -1
  108. data/src/core/ext/filters/http/server/{http_server_filter.c → http_server_filter.cc} +80 -78
  109. data/src/core/ext/filters/http/server/http_server_filter.h +8 -0
  110. data/src/core/ext/filters/load_reporting/{server_load_reporting_filter.c → server_load_reporting_filter.cc} +29 -29
  111. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +9 -1
  112. data/src/core/ext/filters/load_reporting/{server_load_reporting_plugin.c → server_load_reporting_plugin.cc} +11 -11
  113. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +13 -5
  114. data/src/core/ext/filters/max_age/{max_age_filter.c → max_age_filter.cc} +46 -56
  115. data/src/core/ext/filters/max_age/max_age_filter.h +8 -0
  116. data/src/core/ext/filters/message_size/{message_size_filter.c → message_size_filter.cc} +62 -40
  117. data/src/core/ext/filters/message_size/message_size_filter.h +8 -0
  118. data/src/core/ext/filters/workarounds/{workaround_cronet_compression_filter.c → workaround_cronet_compression_filter.cc} +11 -11
  119. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +8 -0
  120. data/src/core/ext/filters/workarounds/{workaround_utils.c → workaround_utils.cc} +7 -7
  121. data/src/core/ext/filters/workarounds/workaround_utils.h +9 -1
  122. data/src/core/ext/transport/chttp2/alpn/{alpn.c → alpn.cc} +3 -3
  123. data/src/core/ext/transport/chttp2/alpn/alpn.h +10 -2
  124. data/src/core/ext/transport/chttp2/client/{chttp2_connector.c → chttp2_connector.cc} +49 -45
  125. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +8 -0
  126. data/src/core/ext/transport/chttp2/client/insecure/{channel_create.c → channel_create.cc} +28 -27
  127. data/src/core/ext/transport/chttp2/client/insecure/{channel_create_posix.c → channel_create_posix.cc} +14 -13
  128. data/src/core/ext/transport/chttp2/client/secure/{secure_channel_create.c → secure_channel_create.cc} +68 -66
  129. data/src/core/ext/transport/chttp2/server/{chttp2_server.c → chttp2_server.cc} +76 -77
  130. data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -3
  131. data/src/core/ext/transport/chttp2/server/insecure/{server_chttp2.c → server_chttp2.cc} +3 -3
  132. data/src/core/ext/transport/chttp2/server/insecure/{server_chttp2_posix.c → server_chttp2_posix.cc} +13 -12
  133. data/src/core/ext/transport/chttp2/server/secure/{server_secure_chttp2.c → server_secure_chttp2.cc} +12 -10
  134. data/src/core/ext/transport/chttp2/transport/{bin_decoder.c → bin_decoder.cc} +7 -7
  135. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +15 -7
  136. data/src/core/ext/transport/chttp2/transport/{bin_encoder.c → bin_encoder.cc} +11 -11
  137. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -0
  138. data/src/core/ext/transport/chttp2/transport/{chttp2_plugin.c → chttp2_plugin.cc} +2 -9
  139. data/src/core/ext/transport/chttp2/transport/{chttp2_transport.c → chttp2_transport.cc} +778 -778
  140. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +14 -10
  141. data/src/core/ext/transport/chttp2/transport/flow_control.cc +385 -0
  142. data/src/core/ext/transport/chttp2/transport/flow_control.h +337 -0
  143. data/src/core/ext/transport/chttp2/transport/frame.h +8 -0
  144. data/src/core/ext/transport/chttp2/transport/{frame_data.c → frame_data.cc} +34 -34
  145. data/src/core/ext/transport/chttp2/transport/frame_data.h +25 -17
  146. data/src/core/ext/transport/chttp2/transport/{frame_goaway.c → frame_goaway.cc} +18 -18
  147. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +18 -10
  148. data/src/core/ext/transport/chttp2/transport/{frame_ping.c → frame_ping.cc} +18 -19
  149. data/src/core/ext/transport/chttp2/transport/frame_ping.h +12 -4
  150. data/src/core/ext/transport/chttp2/transport/{frame_rst_stream.c → frame_rst_stream.cc} +16 -16
  151. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +16 -8
  152. data/src/core/ext/transport/chttp2/transport/{frame_settings.c → frame_settings.cc} +23 -24
  153. data/src/core/ext/transport/chttp2/transport/frame_settings.h +17 -9
  154. data/src/core/ext/transport/chttp2/transport/{frame_window_update.c → frame_window_update.cc} +22 -24
  155. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +14 -6
  156. data/src/core/ext/transport/chttp2/transport/{hpack_encoder.c → hpack_encoder.cc} +206 -161
  157. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +23 -13
  158. data/src/core/ext/transport/chttp2/transport/{hpack_parser.c → hpack_parser.cc} +340 -334
  159. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +30 -22
  160. data/src/core/ext/transport/chttp2/transport/{hpack_table.c → hpack_table.cc} +25 -25
  161. data/src/core/ext/transport/chttp2/transport/hpack_table.h +19 -11
  162. data/src/core/ext/transport/chttp2/transport/{http2_settings.c → http2_settings.cc} +1 -1
  163. data/src/core/ext/transport/chttp2/transport/http2_settings.h +10 -2
  164. data/src/core/ext/transport/chttp2/transport/{huffsyms.c → huffsyms.cc} +0 -0
  165. data/src/core/ext/transport/chttp2/transport/huffsyms.h +8 -0
  166. data/src/core/ext/transport/chttp2/transport/{incoming_metadata.c → incoming_metadata.cc} +14 -13
  167. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +18 -10
  168. data/src/core/ext/transport/chttp2/transport/internal.h +214 -340
  169. data/src/core/ext/transport/chttp2/transport/{parsing.c → parsing.cc} +152 -141
  170. data/src/core/ext/transport/chttp2/transport/{stream_lists.c → stream_lists.cc} +53 -53
  171. data/src/core/ext/transport/chttp2/transport/{stream_map.c → stream_map.cc} +35 -34
  172. data/src/core/ext/transport/chttp2/transport/stream_map.h +22 -14
  173. data/src/core/ext/transport/chttp2/transport/{varint.c → varint.cc} +0 -0
  174. data/src/core/ext/transport/chttp2/transport/varint.h +8 -0
  175. data/src/core/ext/transport/chttp2/transport/writing.cc +636 -0
  176. data/src/core/ext/transport/inproc/{inproc_plugin.c → inproc_plugin.cc} +5 -6
  177. data/src/core/ext/transport/inproc/{inproc_transport.c → inproc_transport.cc} +479 -544
  178. data/src/core/ext/transport/inproc/inproc_transport.h +4 -4
  179. data/src/core/lib/backoff/backoff.cc +80 -0
  180. data/src/core/lib/backoff/backoff.h +83 -0
  181. data/src/core/lib/channel/{channel_args.c → channel_args.cc} +92 -92
  182. data/src/core/lib/channel/channel_args.h +45 -37
  183. data/src/core/lib/channel/{channel_stack.c → channel_stack.cc} +67 -68
  184. data/src/core/lib/channel/channel_stack.h +76 -75
  185. data/src/core/lib/channel/{channel_stack_builder.c → channel_stack_builder.cc} +91 -91
  186. data/src/core/lib/channel/channel_stack_builder.h +45 -45
  187. data/src/core/lib/channel/{connected_channel.c → connected_channel.cc} +70 -70
  188. data/src/core/lib/channel/connected_channel.h +12 -4
  189. data/src/core/lib/channel/context.h +2 -2
  190. data/src/core/lib/channel/{handshaker.c → handshaker.cc} +7 -9
  191. data/src/core/lib/channel/handshaker.h +9 -1
  192. data/src/core/lib/channel/{handshaker_factory.c → handshaker_factory.cc} +7 -7
  193. data/src/core/lib/channel/handshaker_factory.h +18 -10
  194. data/src/core/lib/channel/{handshaker_registry.c → handshaker_registry.cc} +0 -0
  195. data/src/core/lib/channel/handshaker_registry.h +8 -0
  196. data/src/core/lib/compression/algorithm_metadata.h +8 -0
  197. data/src/core/lib/compression/{compression.c → compression.cc} +9 -9
  198. data/src/core/lib/compression/{message_compress.c → message_compress.cc} +0 -0
  199. data/src/core/lib/compression/message_compress.h +8 -0
  200. data/src/core/lib/compression/{stream_compression.c → stream_compression.cc} +12 -12
  201. data/src/core/lib/compression/stream_compression.h +27 -19
  202. data/src/core/lib/compression/{stream_compression_gzip.c → stream_compression_gzip.cc} +35 -36
  203. data/src/core/lib/compression/stream_compression_gzip.h +8 -0
  204. data/src/core/lib/compression/{stream_compression_identity.c → stream_compression_identity.cc} +19 -20
  205. data/src/core/lib/compression/stream_compression_identity.h +8 -0
  206. data/src/core/lib/debug/{stats.c → stats.cc} +19 -19
  207. data/src/core/lib/debug/stats.h +17 -9
  208. data/src/core/lib/debug/{stats_data.c → stats_data.cc} +45 -22
  209. data/src/core/lib/debug/stats_data.h +58 -19
  210. data/src/core/lib/debug/trace.cc +142 -0
  211. data/src/core/lib/debug/trace.h +74 -14
  212. data/src/core/lib/http/{format_request.c → format_request.cc} +10 -10
  213. data/src/core/lib/http/format_request.h +12 -4
  214. data/src/core/lib/http/{httpcli.c → httpcli.cc} +80 -80
  215. data/src/core/lib/http/httpcli.h +41 -33
  216. data/src/core/lib/http/{httpcli_security_connector.c → httpcli_security_connector.cc} +69 -55
  217. data/src/core/lib/http/{parser.c → parser.cc} +42 -42
  218. data/src/core/lib/http/parser.h +28 -20
  219. data/src/core/lib/{support → iomgr}/block_annotate.h +17 -8
  220. data/src/core/lib/iomgr/{call_combiner.c → call_combiner.cc} +29 -17
  221. data/src/core/lib/iomgr/call_combiner.h +9 -1
  222. data/src/core/lib/iomgr/closure.h +220 -62
  223. data/src/core/lib/iomgr/{combiner.c → combiner.cc} +63 -62
  224. data/src/core/lib/iomgr/combiner.h +16 -8
  225. data/src/core/lib/iomgr/{endpoint.c → endpoint.cc} +6 -0
  226. data/src/core/lib/iomgr/endpoint.h +47 -32
  227. data/src/core/lib/iomgr/endpoint_pair.h +12 -4
  228. data/src/core/lib/iomgr/{endpoint_pair_posix.c → endpoint_pair_posix.cc} +3 -3
  229. data/src/core/lib/iomgr/{endpoint_pair_uv.c → endpoint_pair_uv.cc} +2 -2
  230. data/src/core/lib/iomgr/{endpoint_pair_windows.c → endpoint_pair_windows.cc} +6 -6
  231. data/src/core/lib/iomgr/{error.c → error.cc} +125 -124
  232. data/src/core/lib/iomgr/error.h +32 -27
  233. data/src/core/lib/iomgr/error_internal.h +11 -2
  234. data/src/core/lib/iomgr/{ev_epoll1_linux.c → ev_epoll1_linux.cc} +214 -215
  235. data/src/core/lib/iomgr/ev_epoll1_linux.h +9 -1
  236. data/src/core/lib/iomgr/ev_epollex_linux.cc +1488 -0
  237. data/src/core/lib/iomgr/ev_epollex_linux.h +9 -1
  238. data/src/core/lib/iomgr/{ev_epollsig_linux.c → ev_epollsig_linux.cc} +304 -305
  239. data/src/core/lib/iomgr/ev_epollsig_linux.h +12 -4
  240. data/src/core/lib/iomgr/{ev_poll_posix.c → ev_poll_posix.cc} +272 -283
  241. data/src/core/lib/iomgr/ev_poll_posix.h +10 -2
  242. data/src/core/lib/iomgr/ev_posix.cc +288 -0
  243. data/src/core/lib/iomgr/ev_posix.h +75 -67
  244. data/src/core/lib/iomgr/{ev_windows.c → ev_windows.cc} +2 -2
  245. data/src/core/lib/iomgr/exec_ctx.cc +177 -0
  246. data/src/core/lib/iomgr/exec_ctx.h +35 -13
  247. data/src/core/lib/iomgr/{executor.c → executor.cc} +34 -35
  248. data/src/core/lib/iomgr/executor.h +12 -4
  249. data/src/core/lib/iomgr/{fork_posix.c → fork_posix.cc} +0 -0
  250. data/src/core/lib/iomgr/{fork_windows.c → fork_windows.cc} +0 -0
  251. data/src/core/lib/iomgr/gethostname.h +9 -1
  252. data/src/core/lib/iomgr/{gethostname_fallback.c → gethostname_fallback.cc} +2 -1
  253. data/src/core/lib/iomgr/{gethostname_host_name_max.c → gethostname_host_name_max.cc} +4 -3
  254. data/src/core/lib/iomgr/{gethostname_sysconf.c → gethostname_sysconf.cc} +3 -2
  255. data/src/core/lib/iomgr/{iocp_windows.c → iocp_windows.cc} +23 -25
  256. data/src/core/lib/iomgr/iocp_windows.h +17 -3
  257. data/src/core/lib/iomgr/{iomgr.c → iomgr.cc} +25 -19
  258. data/src/core/lib/iomgr/iomgr.h +11 -3
  259. data/src/core/lib/iomgr/iomgr_internal.h +13 -5
  260. data/src/core/lib/iomgr/{iomgr_posix.c → iomgr_posix.cc} +0 -1
  261. data/src/core/lib/iomgr/{iomgr_uv.c → iomgr_uv.cc} +1 -1
  262. data/src/core/lib/iomgr/iomgr_uv.h +8 -0
  263. data/src/core/lib/iomgr/{iomgr_windows.c → iomgr_windows.cc} +0 -0
  264. data/src/core/lib/iomgr/{is_epollexclusive_available.c → is_epollexclusive_available.cc} +1 -1
  265. data/src/core/lib/iomgr/is_epollexclusive_available.h +8 -0
  266. data/src/core/lib/iomgr/{load_file.c → load_file.cc} +12 -12
  267. data/src/core/lib/iomgr/load_file.h +2 -2
  268. data/src/core/lib/iomgr/{lockfree_event.c → lockfree_event.cc} +76 -68
  269. data/src/core/lib/iomgr/lockfree_event.h +30 -11
  270. data/src/core/lib/iomgr/{network_status_tracker.c → network_status_tracker.cc} +3 -2
  271. data/src/core/lib/iomgr/network_status_tracker.h +2 -2
  272. data/src/core/lib/iomgr/{polling_entity.c → polling_entity.cc} +18 -18
  273. data/src/core/lib/iomgr/polling_entity.h +21 -13
  274. data/src/core/lib/iomgr/pollset.h +17 -11
  275. data/src/core/lib/iomgr/pollset_set.h +23 -15
  276. data/src/core/lib/iomgr/{pollset_set_uv.c → pollset_set_uv.cc} +0 -0
  277. data/src/core/lib/iomgr/{pollset_set_windows.c → pollset_set_windows.cc} +0 -0
  278. data/src/core/lib/iomgr/{pollset_uv.c → pollset_uv.cc} +31 -29
  279. data/src/core/lib/iomgr/pollset_uv.h +8 -0
  280. data/src/core/lib/iomgr/{pollset_windows.c → pollset_windows.cc} +24 -24
  281. data/src/core/lib/iomgr/pollset_windows.h +17 -4
  282. data/src/core/lib/iomgr/port.h +10 -0
  283. data/src/core/lib/iomgr/resolve_address.h +18 -10
  284. data/src/core/lib/iomgr/{resolve_address_posix.c → resolve_address_posix.cc} +40 -40
  285. data/src/core/lib/iomgr/{resolve_address_uv.c → resolve_address_uv.cc} +61 -56
  286. data/src/core/lib/iomgr/{resolve_address_windows.c → resolve_address_windows.cc} +36 -34
  287. data/src/core/lib/iomgr/{resource_quota.c → resource_quota.cc} +209 -180
  288. data/src/core/lib/iomgr/resource_quota.h +45 -37
  289. data/src/core/lib/iomgr/{sockaddr_utils.c → sockaddr_utils.cc} +61 -61
  290. data/src/core/lib/iomgr/sockaddr_utils.h +23 -15
  291. data/src/core/lib/iomgr/sockaddr_windows.h +6 -0
  292. data/src/core/lib/iomgr/{socket_factory_posix.c → socket_factory_posix.cc} +20 -20
  293. data/src/core/lib/iomgr/socket_factory_posix.h +15 -15
  294. data/src/core/lib/iomgr/{socket_mutator.c → socket_mutator.cc} +18 -18
  295. data/src/core/lib/iomgr/socket_mutator.h +11 -11
  296. data/src/core/lib/iomgr/socket_utils.h +9 -1
  297. data/src/core/lib/iomgr/{socket_utils_common_posix.c → socket_utils_common_posix.cc} +28 -28
  298. data/src/core/lib/iomgr/{socket_utils_linux.c → socket_utils_linux.cc} +3 -3
  299. data/src/core/lib/iomgr/{socket_utils_posix.c → socket_utils_posix.cc} +3 -3
  300. data/src/core/lib/iomgr/socket_utils_posix.h +26 -18
  301. data/src/core/lib/iomgr/{socket_utils_uv.c → socket_utils_uv.cc} +1 -1
  302. data/src/core/lib/iomgr/{socket_utils_windows.c → socket_utils_windows.cc} +2 -2
  303. data/src/core/lib/iomgr/{socket_windows.c → socket_windows.cc} +18 -18
  304. data/src/core/lib/iomgr/socket_windows.h +26 -13
  305. data/src/core/lib/iomgr/tcp_client.h +14 -6
  306. data/src/core/lib/iomgr/{tcp_client_posix.c → tcp_client_posix.cc} +69 -70
  307. data/src/core/lib/iomgr/tcp_client_posix.h +11 -3
  308. data/src/core/lib/iomgr/{tcp_client_uv.c → tcp_client_uv.cc} +47 -48
  309. data/src/core/lib/iomgr/{tcp_client_windows.c → tcp_client_windows.cc} +46 -44
  310. data/src/core/lib/iomgr/{tcp_posix.c → tcp_posix.cc} +198 -175
  311. data/src/core/lib/iomgr/tcp_posix.h +15 -7
  312. data/src/core/lib/iomgr/tcp_server.h +31 -23
  313. data/src/core/lib/iomgr/{tcp_server_posix.c → tcp_server_posix.cc} +78 -77
  314. data/src/core/lib/iomgr/tcp_server_utils_posix.h +27 -19
  315. data/src/core/lib/iomgr/{tcp_server_utils_posix_common.c → tcp_server_utils_posix_common.cc} +27 -27
  316. data/src/core/lib/iomgr/{tcp_server_utils_posix_ifaddrs.c → tcp_server_utils_posix_ifaddrs.cc} +25 -25
  317. data/src/core/lib/iomgr/{tcp_server_utils_posix_noifaddrs.c → tcp_server_utils_posix_noifaddrs.cc} +2 -2
  318. data/src/core/lib/iomgr/{tcp_server_uv.c → tcp_server_uv.cc} +133 -105
  319. data/src/core/lib/iomgr/{tcp_server_windows.c → tcp_server_windows.cc} +81 -77
  320. data/src/core/lib/iomgr/tcp_uv.cc +420 -0
  321. data/src/core/lib/iomgr/tcp_uv.h +18 -4
  322. data/src/core/lib/iomgr/{tcp_windows.c → tcp_windows.cc} +90 -79
  323. data/src/core/lib/iomgr/tcp_windows.h +17 -4
  324. data/src/core/lib/iomgr/{time_averaged_stats.c → time_averaged_stats.cc} +0 -0
  325. data/src/core/lib/iomgr/time_averaged_stats.h +8 -0
  326. data/src/core/lib/iomgr/timer.h +16 -9
  327. data/src/core/lib/iomgr/{timer_generic.c → timer_generic.cc} +130 -171
  328. data/src/core/lib/iomgr/timer_generic.h +4 -4
  329. data/src/core/lib/iomgr/{timer_heap.c → timer_heap.cc} +20 -21
  330. data/src/core/lib/iomgr/timer_heap.h +16 -8
  331. data/src/core/lib/iomgr/{timer_manager.c → timer_manager.cc} +54 -52
  332. data/src/core/lib/iomgr/timer_manager.h +8 -0
  333. data/src/core/lib/iomgr/{timer_uv.c → timer_uv.cc} +22 -24
  334. data/src/core/lib/iomgr/timer_uv.h +2 -2
  335. data/src/core/lib/iomgr/{udp_server.c → udp_server.cc} +75 -75
  336. data/src/core/lib/iomgr/udp_server.h +25 -17
  337. data/src/core/lib/iomgr/{unix_sockets_posix.c → unix_sockets_posix.cc} +22 -21
  338. data/src/core/lib/iomgr/unix_sockets_posix.h +14 -6
  339. data/src/core/lib/iomgr/{unix_sockets_posix_noop.c → unix_sockets_posix_noop.cc} +5 -5
  340. data/src/core/lib/iomgr/{wakeup_fd_cv.c → wakeup_fd_cv.cc} +2 -2
  341. data/src/core/lib/iomgr/wakeup_fd_cv.h +10 -0
  342. data/src/core/lib/iomgr/{wakeup_fd_eventfd.c → wakeup_fd_eventfd.cc} +0 -0
  343. data/src/core/lib/iomgr/{wakeup_fd_nospecial.c → wakeup_fd_nospecial.cc} +0 -0
  344. data/src/core/lib/iomgr/{wakeup_fd_pipe.c → wakeup_fd_pipe.cc} +1 -0
  345. data/src/core/lib/iomgr/wakeup_fd_pipe.h +9 -1
  346. data/src/core/lib/iomgr/{wakeup_fd_posix.c → wakeup_fd_posix.cc} +6 -7
  347. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -0
  348. data/src/core/lib/json/{json.c → json.cc} +0 -0
  349. data/src/core/lib/json/json.h +8 -0
  350. data/src/core/lib/json/{json_reader.c → json_reader.cc} +18 -18
  351. data/src/core/lib/json/json_reader.h +26 -18
  352. data/src/core/lib/json/{json_string.c → json_string.cc} +57 -57
  353. data/src/core/lib/json/{json_writer.c → json_writer.cc} +20 -20
  354. data/src/core/lib/json/json_writer.h +23 -15
  355. data/src/core/lib/profiling/{basic_timers.c → basic_timers.cc} +34 -34
  356. data/src/core/lib/profiling/{stap_timers.c → stap_timers.cc} +5 -5
  357. data/src/core/lib/profiling/timers.h +6 -6
  358. data/src/core/lib/security/context/{security_context.c → security_context.cc} +98 -95
  359. data/src/core/lib/security/context/security_context.h +27 -29
  360. data/src/core/lib/security/credentials/composite/{composite_credentials.c → composite_credentials.cc} +79 -73
  361. data/src/core/lib/security/credentials/composite/composite_credentials.h +17 -9
  362. data/src/core/lib/security/credentials/{credentials.c → credentials.cc} +97 -92
  363. data/src/core/lib/security/credentials/credentials.h +83 -75
  364. data/src/core/lib/security/credentials/{credentials_metadata.c → credentials_metadata.cc} +7 -6
  365. data/src/core/lib/security/credentials/fake/{fake_credentials.c → fake_credentials.cc} +39 -36
  366. data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -5
  367. data/src/core/lib/security/credentials/google_default/{credentials_generic.c → credentials_generic.cc} +5 -5
  368. data/src/core/lib/security/credentials/google_default/{google_default_credentials.c → google_default_credentials.cc} +55 -55
  369. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +9 -1
  370. data/src/core/lib/security/credentials/iam/{iam_credentials.c → iam_credentials.cc} +19 -18
  371. data/src/core/lib/security/credentials/jwt/{json_token.c → json_token.cc} +80 -75
  372. data/src/core/lib/security/credentials/jwt/json_token.h +23 -15
  373. data/src/core/lib/security/credentials/jwt/{jwt_credentials.c → jwt_credentials.cc} +45 -41
  374. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +11 -3
  375. data/src/core/lib/security/credentials/jwt/{jwt_verifier.c → jwt_verifier.cc} +262 -252
  376. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +38 -30
  377. data/src/core/lib/security/credentials/oauth2/{oauth2_credentials.c → oauth2_credentials.cc} +138 -141
  378. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +30 -22
  379. data/src/core/lib/security/credentials/plugin/{plugin_credentials.c → plugin_credentials.cc} +52 -53
  380. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +7 -7
  381. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +344 -0
  382. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +27 -0
  383. data/src/core/lib/security/transport/auth_filters.h +16 -0
  384. data/src/core/lib/security/transport/{client_auth_filter.c → client_auth_filter.cc} +127 -115
  385. data/src/core/lib/security/transport/{lb_targets_info.c → lb_targets_info.cc} +16 -13
  386. data/src/core/lib/security/transport/lb_targets_info.h +11 -3
  387. data/src/core/lib/security/transport/{secure_endpoint.c → secure_endpoint.cc} +84 -76
  388. data/src/core/lib/security/transport/secure_endpoint.h +13 -5
  389. data/src/core/lib/security/transport/security_connector.cc +1121 -0
  390. data/src/core/lib/security/transport/security_connector.h +97 -79
  391. data/src/core/lib/security/transport/{security_handshaker.c → security_handshaker.cc} +139 -132
  392. data/src/core/lib/security/transport/security_handshaker.h +11 -3
  393. data/src/core/lib/security/transport/{server_auth_filter.c → server_auth_filter.cc} +68 -68
  394. data/src/core/lib/security/transport/{tsi_error.c → tsi_error.cc} +1 -1
  395. data/src/core/lib/security/transport/tsi_error.h +9 -1
  396. data/src/core/lib/security/util/{json_util.c → json_util.cc} +11 -11
  397. data/src/core/lib/security/util/json_util.h +12 -4
  398. data/src/core/lib/slice/{b64.c → b64.cc} +15 -15
  399. data/src/core/lib/slice/b64.h +12 -4
  400. data/src/core/lib/slice/{percent_encoding.c → percent_encoding.cc} +15 -15
  401. data/src/core/lib/slice/percent_encoding.h +11 -3
  402. data/src/core/lib/slice/{slice.c → slice.cc} +64 -64
  403. data/src/core/lib/slice/{slice_buffer.c → slice_buffer.cc} +38 -38
  404. data/src/core/lib/slice/{slice_hash_table.c → slice_hash_table.cc} +7 -7
  405. data/src/core/lib/slice/slice_hash_table.h +19 -11
  406. data/src/core/lib/slice/{slice_intern.c → slice_intern.cc} +35 -34
  407. data/src/core/lib/slice/slice_internal.h +17 -6
  408. data/src/core/lib/slice/{slice_string_helpers.c → slice_string_helpers.cc} +9 -9
  409. data/src/core/lib/slice/slice_string_helpers.h +3 -3
  410. data/src/core/lib/support/abstract.h +29 -0
  411. data/src/core/lib/support/{alloc.c → alloc.cc} +22 -22
  412. data/src/core/lib/support/{arena.c → arena.cc} +12 -12
  413. data/src/core/lib/support/arena.h +11 -3
  414. data/src/core/lib/support/{atm.c → atm.cc} +1 -1
  415. data/src/core/lib/support/{avl.c → avl.cc} +71 -70
  416. data/src/core/lib/support/{cmdline.c → cmdline.cc} +62 -62
  417. data/src/core/lib/support/{cpu_iphone.c → cpu_iphone.cc} +2 -0
  418. data/src/core/lib/support/{cpu_linux.c → cpu_linux.cc} +10 -0
  419. data/src/core/lib/support/{cpu_posix.c → cpu_posix.cc} +27 -4
  420. data/src/core/lib/support/{cpu_windows.c → cpu_windows.cc} +1 -0
  421. data/src/core/lib/support/env.h +3 -3
  422. data/src/core/lib/support/{env_linux.c → env_linux.cc} +11 -11
  423. data/src/core/lib/support/{env_posix.c → env_posix.cc} +4 -4
  424. data/src/core/lib/support/{env_windows.c → env_windows.cc} +5 -5
  425. data/src/core/lib/support/{fork.c → fork.cc} +2 -2
  426. data/src/core/lib/support/{histogram.c → histogram.cc} +25 -26
  427. data/src/core/lib/support/{host_port.c → host_port.cc} +16 -16
  428. data/src/core/lib/support/{log.c → log.cc} +8 -8
  429. data/src/core/lib/support/{log_android.c → log_android.cc} +7 -7
  430. data/src/core/lib/support/{log_linux.c → log_linux.cc} +8 -8
  431. data/src/core/lib/support/{log_posix.c → log_posix.cc} +9 -10
  432. data/src/core/lib/support/{log_windows.c → log_windows.cc} +7 -7
  433. data/src/core/lib/support/manual_constructor.h +211 -0
  434. data/src/core/lib/support/memory.h +41 -0
  435. data/src/core/lib/support/mpscq.cc +114 -0
  436. data/src/core/lib/support/mpscq.h +45 -7
  437. data/src/core/lib/support/{murmur_hash.c → murmur_hash.cc} +9 -12
  438. data/src/core/lib/support/murmur_hash.h +9 -1
  439. data/src/core/lib/support/spinlock.h +8 -1
  440. data/src/core/lib/support/{string.c → string.cc} +56 -55
  441. data/src/core/lib/support/string.h +21 -21
  442. data/src/core/lib/support/{string_posix.c → string_posix.cc} +5 -4
  443. data/src/core/lib/support/{string_util_windows.c → string_util_windows.cc} +9 -6
  444. data/src/core/lib/support/{string_windows.c → string_windows.cc} +3 -2
  445. data/src/core/lib/support/string_windows.h +8 -0
  446. data/src/core/lib/support/{subprocess_posix.c → subprocess_posix.cc} +13 -13
  447. data/src/core/lib/support/{subprocess_windows.c → subprocess_windows.cc} +9 -9
  448. data/src/core/lib/support/{sync.c → sync.cc} +22 -22
  449. data/src/core/lib/support/{sync_posix.c → sync_posix.cc} +6 -2
  450. data/src/core/lib/support/{sync_windows.c → sync_windows.cc} +14 -14
  451. data/src/core/lib/support/{thd.c → thd.cc} +0 -0
  452. data/src/core/lib/support/{thd_posix.c → thd_posix.cc} +10 -10
  453. data/src/core/lib/support/{thd_windows.c → thd_windows.cc} +10 -10
  454. data/src/core/lib/support/{time.c → time.cc} +0 -0
  455. data/src/core/lib/support/{time_posix.c → time_posix.cc} +5 -6
  456. data/src/core/lib/support/{time_precise.c → time_precise.cc} +6 -4
  457. data/src/core/lib/support/time_precise.h +9 -1
  458. data/src/core/lib/support/{time_windows.c → time_windows.cc} +2 -3
  459. data/src/core/lib/support/{tls_pthread.c → tls_pthread.cc} +2 -2
  460. data/src/core/lib/support/tmpfile.h +1 -1
  461. data/src/core/lib/support/{tmpfile_msys.c → tmpfile_msys.cc} +2 -2
  462. data/src/core/lib/support/{tmpfile_posix.c → tmpfile_posix.cc} +7 -7
  463. data/src/core/lib/support/{tmpfile_windows.c → tmpfile_windows.cc} +2 -2
  464. data/src/core/lib/support/{wrap_memcpy.c → wrap_memcpy.cc} +4 -2
  465. data/src/core/lib/surface/{alarm.c → alarm.cc} +32 -31
  466. data/src/core/lib/surface/alarm_internal.h +10 -2
  467. data/src/core/lib/surface/{api_trace.c → api_trace.cc} +1 -1
  468. data/src/core/lib/surface/api_trace.h +2 -2
  469. data/src/core/lib/surface/{byte_buffer.c → byte_buffer.cc} +13 -13
  470. data/src/core/lib/surface/{byte_buffer_reader.c → byte_buffer_reader.cc} +9 -9
  471. data/src/core/lib/surface/{call.c → call.cc} +379 -372
  472. data/src/core/lib/surface/call.h +37 -38
  473. data/src/core/lib/surface/{call_details.c → call_details.cc} +0 -0
  474. data/src/core/lib/surface/{call_log_batch.c → call_log_batch.cc} +13 -11
  475. data/src/core/lib/surface/call_test_only.h +5 -5
  476. data/src/core/lib/surface/{channel.c → channel.cc} +94 -95
  477. data/src/core/lib/surface/channel.h +29 -21
  478. data/src/core/lib/surface/{channel_init.c → channel_init.cc} +13 -13
  479. data/src/core/lib/surface/channel_init.h +6 -6
  480. data/src/core/lib/surface/{channel_ping.c → channel_ping.cc} +12 -12
  481. data/src/core/lib/surface/{channel_stack_type.c → channel_stack_type.cc} +1 -1
  482. data/src/core/lib/surface/channel_stack_type.h +9 -1
  483. data/src/core/lib/surface/{completion_queue.c → completion_queue.cc} +416 -379
  484. data/src/core/lib/surface/completion_queue.h +29 -29
  485. data/src/core/lib/surface/{completion_queue_factory.c → completion_queue_factory.cc} +1 -1
  486. data/src/core/lib/surface/completion_queue_factory.h +8 -0
  487. data/src/core/lib/surface/{event_string.c → event_string.cc} +9 -9
  488. data/src/core/lib/surface/event_string.h +9 -1
  489. data/src/core/lib/surface/{init.c → init.cc} +16 -39
  490. data/src/core/lib/surface/init.h +8 -0
  491. data/src/core/lib/surface/{init_secure.c → init_secure.cc} +12 -25
  492. data/src/core/lib/surface/lame_client.cc +38 -40
  493. data/src/core/lib/surface/lame_client.h +8 -0
  494. data/src/core/lib/surface/{metadata_array.c → metadata_array.cc} +0 -0
  495. data/src/core/lib/surface/{server.c → server.cc} +340 -404
  496. data/src/core/lib/surface/server.h +22 -14
  497. data/src/core/lib/surface/{validate_metadata.c → validate_metadata.cc} +10 -9
  498. data/src/core/lib/surface/validate_metadata.h +10 -2
  499. data/src/core/lib/surface/{version.c → version.cc} +2 -2
  500. data/src/core/lib/transport/bdp_estimator.cc +84 -0
  501. data/src/core/lib/transport/bdp_estimator.h +67 -42
  502. data/src/core/lib/transport/{byte_stream.c → byte_stream.cc} +51 -51
  503. data/src/core/lib/transport/byte_stream.h +41 -33
  504. data/src/core/lib/transport/{connectivity_state.c → connectivity_state.cc} +36 -40
  505. data/src/core/lib/transport/connectivity_state.h +29 -21
  506. data/src/core/lib/transport/{error_utils.c → error_utils.cc} +26 -22
  507. data/src/core/lib/transport/error_utils.h +18 -6
  508. data/src/core/lib/transport/{metadata.c → metadata.cc} +92 -88
  509. data/src/core/lib/transport/metadata.h +22 -20
  510. data/src/core/lib/transport/{metadata_batch.c → metadata_batch.cc} +78 -79
  511. data/src/core/lib/transport/metadata_batch.h +46 -45
  512. data/src/core/lib/transport/pid_controller.cc +48 -0
  513. data/src/core/lib/transport/pid_controller.h +84 -32
  514. data/src/core/lib/transport/{service_config.c → service_config.cc} +66 -48
  515. data/src/core/lib/transport/service_config.h +11 -2
  516. data/src/core/lib/transport/{static_metadata.c → static_metadata.cc} +2 -2
  517. data/src/core/lib/transport/static_metadata.h +30 -23
  518. data/src/core/lib/transport/{status_conversion.c → status_conversion.cc} +4 -3
  519. data/src/core/lib/transport/status_conversion.h +12 -2
  520. data/src/core/lib/transport/{timeout_encoding.c → timeout_encoding.cc} +28 -61
  521. data/src/core/lib/transport/timeout_encoding.h +11 -2
  522. data/src/core/lib/transport/{transport.c → transport.cc} +79 -79
  523. data/src/core/lib/transport/transport.h +78 -80
  524. data/src/core/lib/transport/transport_impl.h +27 -19
  525. data/src/core/lib/transport/{transport_op_string.c → transport_op_string.cc} +32 -30
  526. data/src/core/plugin_registry/{grpc_plugin_registry.c → grpc_plugin_registry.cc} +34 -38
  527. data/src/core/tsi/{fake_transport_security.c → fake_transport_security.cc} +141 -132
  528. data/src/core/tsi/fake_transport_security.h +5 -5
  529. data/src/core/tsi/{gts_transport_security.c → gts_transport_security.cc} +4 -4
  530. data/src/core/tsi/gts_transport_security.h +11 -3
  531. data/src/core/tsi/{ssl_transport_security.c → ssl_transport_security.cc} +309 -300
  532. data/src/core/tsi/ssl_transport_security.h +25 -25
  533. data/src/core/tsi/ssl_types.h +8 -0
  534. data/src/core/tsi/{transport_security.c → transport_security.cc} +94 -87
  535. data/src/core/tsi/transport_security.h +55 -55
  536. data/src/core/tsi/{transport_security_adapter.c → transport_security_adapter.cc} +58 -55
  537. data/src/core/tsi/transport_security_adapter.h +2 -2
  538. data/src/core/tsi/{transport_security_grpc.c → transport_security_grpc.cc} +21 -21
  539. data/src/core/tsi/transport_security_grpc.h +19 -19
  540. data/src/core/tsi/transport_security_interface.h +41 -41
  541. data/src/ruby/ext/grpc/extconf.rb +4 -2
  542. data/src/ruby/ext/grpc/rb_byte_buffer.c +5 -5
  543. data/src/ruby/ext/grpc/rb_byte_buffer.h +2 -2
  544. data/src/ruby/ext/grpc/rb_call.c +41 -42
  545. data/src/ruby/ext/grpc/rb_call.h +6 -6
  546. data/src/ruby/ext/grpc/rb_call_credentials.c +30 -30
  547. data/src/ruby/ext/grpc/rb_channel.c +87 -87
  548. data/src/ruby/ext/grpc/rb_channel_credentials.c +23 -23
  549. data/src/ruby/ext/grpc/rb_completion_queue.c +11 -11
  550. data/src/ruby/ext/grpc/rb_completion_queue.h +3 -3
  551. data/src/ruby/ext/grpc/rb_compression_options.c +20 -20
  552. data/src/ruby/ext/grpc/rb_event_thread.c +14 -14
  553. data/src/ruby/ext/grpc/rb_event_thread.h +1 -1
  554. data/src/ruby/ext/grpc/rb_grpc.c +8 -8
  555. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +16 -58
  556. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +242 -306
  557. data/src/ruby/ext/grpc/rb_server.c +23 -23
  558. data/src/ruby/ext/grpc/rb_server_credentials.c +13 -13
  559. data/src/ruby/lib/grpc/generic/rpc_server.rb +25 -12
  560. data/src/ruby/lib/grpc/version.rb +1 -1
  561. data/src/ruby/pb/grpc/health/checker.rb +14 -0
  562. data/src/ruby/spec/pb/health/checker_spec.rb +29 -0
  563. data/third_party/cares/config_freebsd/ares_config.h +502 -0
  564. data/third_party/cares/config_openbsd/ares_config.h +502 -0
  565. metadata +302 -328
  566. data/src/core/ext/census/aggregation.h +0 -51
  567. data/src/core/ext/census/base_resources.c +0 -56
  568. data/src/core/ext/census/base_resources.h +0 -24
  569. data/src/core/ext/census/census_interface.h +0 -61
  570. data/src/core/ext/census/census_rpc_stats.h +0 -86
  571. data/src/core/ext/census/context.c +0 -496
  572. data/src/core/ext/census/gen/census.pb.c +0 -161
  573. data/src/core/ext/census/gen/census.pb.h +0 -280
  574. data/src/core/ext/census/gen/trace_context.pb.c +0 -39
  575. data/src/core/ext/census/gen/trace_context.pb.h +0 -78
  576. data/src/core/ext/census/grpc_filter.c +0 -196
  577. data/src/core/ext/census/grpc_plugin.c +0 -70
  578. data/src/core/ext/census/initialize.c +0 -51
  579. data/src/core/ext/census/intrusive_hash_map.c +0 -305
  580. data/src/core/ext/census/intrusive_hash_map.h +0 -152
  581. data/src/core/ext/census/intrusive_hash_map_internal.h +0 -48
  582. data/src/core/ext/census/mlog.c +0 -586
  583. data/src/core/ext/census/mlog.h +0 -80
  584. data/src/core/ext/census/operation.c +0 -48
  585. data/src/core/ext/census/placeholders.c +0 -49
  586. data/src/core/ext/census/resource.c +0 -303
  587. data/src/core/ext/census/resource.h +0 -48
  588. data/src/core/ext/census/rpc_metric_id.h +0 -36
  589. data/src/core/ext/census/trace_context.c +0 -71
  590. data/src/core/ext/census/trace_context.h +0 -56
  591. data/src/core/ext/census/trace_label.h +0 -46
  592. data/src/core/ext/census/trace_propagation.h +0 -48
  593. data/src/core/ext/census/trace_status.h +0 -30
  594. data/src/core/ext/census/trace_string.h +0 -35
  595. data/src/core/ext/census/tracing.c +0 -55
  596. data/src/core/ext/census/tracing.h +0 -109
  597. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +0 -714
  598. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +0 -924
  599. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.c +0 -60
  600. data/src/core/ext/transport/chttp2/transport/flow_control.c +0 -502
  601. data/src/core/ext/transport/chttp2/transport/writing.c +0 -534
  602. data/src/core/lib/debug/trace.c +0 -146
  603. data/src/core/lib/iomgr/closure.c +0 -219
  604. data/src/core/lib/iomgr/ev_epollex_linux.c +0 -1461
  605. data/src/core/lib/iomgr/ev_posix.c +0 -266
  606. data/src/core/lib/iomgr/exec_ctx.c +0 -113
  607. data/src/core/lib/iomgr/tcp_uv.c +0 -381
  608. data/src/core/lib/security/credentials/ssl/ssl_credentials.c +0 -194
  609. data/src/core/lib/security/transport/security_connector.c +0 -914
  610. data/src/core/lib/support/backoff.c +0 -72
  611. data/src/core/lib/support/backoff.h +0 -56
  612. data/src/core/lib/support/mpscq.c +0 -79
  613. data/src/core/lib/support/stack_lockfree.c +0 -137
  614. data/src/core/lib/support/stack_lockfree.h +0 -38
  615. data/src/core/lib/transport/bdp_estimator.c +0 -110
  616. data/src/core/lib/transport/pid_controller.c +0 -63
@@ -1,152 +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_EXT_CENSUS_INTRUSIVE_HASH_MAP_H
20
- #define GRPC_CORE_EXT_CENSUS_INTRUSIVE_HASH_MAP_H
21
-
22
- #include "src/core/ext/census/intrusive_hash_map_internal.h"
23
-
24
- /* intrusive_hash_map is a fast chained hash table. This hash map is faster than
25
- * a dense hash map when the application calls insert and erase more often than
26
- * find. When the workload is dominated by find() a dense hash map may be
27
- * faster.
28
- *
29
- * intrusive_hash_map uses an intrusive header placed within a user defined
30
- * struct. The header field IHM_key MUST be set to a valid value before
31
- * insertion into the hash map or undefined behavior may occur. The header field
32
- * IHM_hash_link MUST to be set to NULL initially.
33
- *
34
- * EXAMPLE USAGE:
35
- *
36
- * typedef struct string_item {
37
- * INTRUSIVE_HASH_MAP_HEADER;
38
- * // User data.
39
- * char *str_buf;
40
- * uint16_t len;
41
- * } string_item;
42
- *
43
- * static string_item *make_string_item(uint64_t key, const char *buf,
44
- * uint16_t len) {
45
- * string_item *item = (string_item *)gpr_malloc(sizeof(string_item));
46
- * item->IHM_key = key;
47
- * item->IHM_hash_link = NULL;
48
- * item->len = len;
49
- * item->str_buf = (char *)malloc(len);
50
- * memcpy(item->str_buf, buf, len);
51
- * return item;
52
- * }
53
- *
54
- * intrusive_hash_map hash_map;
55
- * intrusive_hash_map_init(&hash_map, 4);
56
- * string_item *new_item1 = make_string_item(10, "test1", 5);
57
- * bool ok = intrusive_hash_map_insert(&hash_map, (hm_item *)new_item1);
58
- *
59
- * string_item *item1 =
60
- * (string_item *)intrusive_hash_map_find(&hash_map, 10);
61
- */
62
-
63
- /* Hash map item. Stores key and a pointer to the actual object. A user defined
64
- * version of this can be passed in provided the first 2 entries (key and
65
- * hash_link) are the same. These entries must be first in the user defined
66
- * struct. Pointer to struct will need to be cast as (hm_item *) when passed to
67
- * hash map. This allows it to be intrusive. */
68
- typedef struct hm_item {
69
- uint64_t key;
70
- struct hm_item *hash_link;
71
- /* Optional user defined data after this. */
72
- } hm_item;
73
-
74
- /* Macro provided for ease of use. This must be first in the user defined
75
- * struct (i.e. uint64_t key and hm_item * must be the first two elements in
76
- * that order). */
77
- #define INTRUSIVE_HASH_MAP_HEADER \
78
- uint64_t IHM_key; \
79
- struct hm_item *IHM_hash_link
80
-
81
- /* Index struct which acts as a pseudo-iterator within the hash map. */
82
- typedef struct hm_index {
83
- uint32_t bucket_index; // hash map bucket index.
84
- hm_item *item; // Pointer to hm_item within the hash map.
85
- } hm_index;
86
-
87
- /* Returns true if two hm_indices point to the same object within the hash map
88
- * and false otherwise. */
89
- __inline bool hm_index_compare(const hm_index *A, const hm_index *B) {
90
- return (A->item == B->item && A->bucket_index == B->bucket_index);
91
- }
92
-
93
- /*
94
- * Helper functions for iterating over the hash map.
95
- */
96
-
97
- /* On return idx will contain an invalid index which is always equal to
98
- * hash_map->buckets.size_ */
99
- void intrusive_hash_map_end(const intrusive_hash_map *hash_map, hm_index *idx);
100
-
101
- /* Iterates index to the next valid entry in the hash map and stores the
102
- * index within idx. If end of table is reached, idx will contain the same
103
- * values as if intrusive_hash_map_end() was called. */
104
- void intrusive_hash_map_next(const intrusive_hash_map *hash_map, hm_index *idx);
105
-
106
- /* On return, idx will contain the index of the first non-null entry in the hash
107
- * map. If the hash map is empty, idx will contain the same values as if
108
- * intrusive_hash_map_end() was called. */
109
- void intrusive_hash_map_begin(const intrusive_hash_map *hash_map,
110
- hm_index *idx);
111
-
112
- /* Initialize intrusive hash map data structure. This must be called before
113
- * the hash map can be used. The initial size of an intrusive hash map will be
114
- * 2^initial_log2_map_size (valid range is [0, 31]). */
115
- void intrusive_hash_map_init(intrusive_hash_map *hash_map,
116
- uint32_t initial_log2_map_size);
117
-
118
- /* Returns true if the hash map is empty and false otherwise. */
119
- bool intrusive_hash_map_empty(const intrusive_hash_map *hash_map);
120
-
121
- /* Returns the number of elements currently in the hash map. */
122
- size_t intrusive_hash_map_size(const intrusive_hash_map *hash_map);
123
-
124
- /* Find a hm_item within the hash map by key. Returns NULL if item was not
125
- * found. */
126
- hm_item *intrusive_hash_map_find(const intrusive_hash_map *hash_map,
127
- uint64_t key);
128
-
129
- /* Erase the hm_item that corresponds with key. If the hm_item is found, return
130
- * the pointer to the hm_item. Else returns NULL. */
131
- hm_item *intrusive_hash_map_erase(intrusive_hash_map *hash_map, uint64_t key);
132
-
133
- /* Attempts to insert a new hm_item into the hash map. If an element with the
134
- * same key already exists, it will not insert the new item and return false.
135
- * Otherwise, it will insert the new item and return true. */
136
- bool intrusive_hash_map_insert(intrusive_hash_map *hash_map, hm_item *item);
137
-
138
- /* Clears entire contents of the hash map, but leaves internal data structure
139
- * untouched. Second argument takes a function pointer to a function that will
140
- * free the object designated by the user and pointed to by hash_map->value. */
141
- void intrusive_hash_map_clear(intrusive_hash_map *hash_map,
142
- void (*free_object)(void *));
143
-
144
- /* Erase all contents of hash map and free the memory. Hash map is invalid
145
- * after calling this function and cannot be used until it has been
146
- * reinitialized (intrusive_hash_map_init()). This function takes a function
147
- * pointer to a function that will free the object designated by the user and
148
- * pointed to by hash_map->value. */
149
- void intrusive_hash_map_free(intrusive_hash_map *hash_map,
150
- void (*free_object)(void *));
151
-
152
- #endif /* GRPC_CORE_EXT_CENSUS_INTRUSIVE_HASH_MAP_H */
@@ -1,48 +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_EXT_CENSUS_INTRUSIVE_HASH_MAP_INTERNAL_H
20
- #define GRPC_CORE_EXT_CENSUS_INTRUSIVE_HASH_MAP_INTERNAL_H
21
-
22
- #include <grpc/support/alloc.h>
23
- #include <grpc/support/log.h>
24
- #include <grpc/support/useful.h>
25
- #include <stdbool.h>
26
-
27
- /* The chunked vector is a data structure that allocates buckets for use in the
28
- * hash map. ChunkedVector is logically equivalent to T*[N] (cast void* as
29
- * T*). It's internally implemented as an array of 1MB arrays to avoid
30
- * allocating large consecutive memory chunks. This is an internal data
31
- * structure that should never be accessed directly. */
32
- typedef struct chunked_vector {
33
- size_t size_;
34
- void **first_;
35
- void ***rest_;
36
- } chunked_vector;
37
-
38
- /* Core intrusive hash map data structure. All internal elements are managed by
39
- * functions and should not be altered manually. */
40
- typedef struct intrusive_hash_map {
41
- uint32_t num_items;
42
- uint32_t extend_threshold;
43
- uint32_t log2_num_buckets;
44
- uint32_t hash_mask;
45
- chunked_vector buckets;
46
- } intrusive_hash_map;
47
-
48
- #endif /* GRPC_CORE_EXT_CENSUS_INTRUSIVE_HASH_MAP_INTERNAL_H */
@@ -1,586 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
18
-
19
- // Implements an efficient in-memory log, optimized for multiple writers and
20
- // a single reader. Available log space is divided up in blocks of
21
- // CENSUS_LOG_2_MAX_RECORD_SIZE bytes. A block can be in one of the following
22
- // three data structures:
23
- // - Free blocks (free_block_list)
24
- // - Blocks with unread data (dirty_block_list)
25
- // - Blocks currently attached to cores (core_local_blocks[])
26
- //
27
- // census_log_start_write() moves a block from core_local_blocks[] to the end of
28
- // dirty_block_list when block:
29
- // - is out-of-space OR
30
- // - has an incomplete record (an incomplete record occurs when a thread calls
31
- // census_log_start_write() and is context-switched before calling
32
- // census_log_end_write()
33
- // So, blocks in dirty_block_list are ordered, from oldest to newest, by the
34
- // time when block is detached from the core.
35
- //
36
- // census_log_read_next() first iterates over dirty_block_list and then
37
- // core_local_blocks[]. It moves completely read blocks from dirty_block_list
38
- // to free_block_list. Blocks in core_local_blocks[] are not freed, even when
39
- // completely read.
40
- //
41
- // If the log is configured to discard old records and free_block_list is empty,
42
- // census_log_start_write() iterates over dirty_block_list to allocate a
43
- // new block. It moves the oldest available block (no pending read/write) to
44
- // core_local_blocks[].
45
- //
46
- // core_local_block_struct is used to implement a map from core id to the block
47
- // associated with that core. This mapping is advisory. It is possible that the
48
- // block returned by this mapping is no longer associated with that core. This
49
- // mapping is updated, lazily, by census_log_start_write().
50
- //
51
- // Locking in block struct:
52
- //
53
- // Exclusive g_log.lock must be held before calling any functions operating on
54
- // block structs except census_log_start_write() and census_log_end_write().
55
- //
56
- // Writes to a block are serialized via writer_lock. census_log_start_write()
57
- // acquires this lock and census_log_end_write() releases it. On failure to
58
- // acquire the lock, writer allocates a new block for the current core and
59
- // updates core_local_block accordingly.
60
- //
61
- // Simultaneous read and write access is allowed. Readers can safely read up to
62
- // committed bytes (bytes_committed).
63
- //
64
- // reader_lock protects the block, currently being read, from getting recycled.
65
- // start_read() acquires reader_lock and end_read() releases the lock.
66
- //
67
- // Read/write access to a block is disabled via try_disable_access(). It returns
68
- // with both writer_lock and reader_lock held. These locks are subsequently
69
- // released by enable_access() to enable access to the block.
70
- //
71
- // A note on naming: Most function/struct names are prepended by cl_
72
- // (shorthand for census_log). Further, functions that manipulate structures
73
- // include the name of the structure, which will be passed as the first
74
- // argument. E.g. cl_block_initialize() will initialize a cl_block.
75
-
76
- #include "src/core/ext/census/mlog.h"
77
- #include <grpc/support/alloc.h>
78
- #include <grpc/support/atm.h>
79
- #include <grpc/support/cpu.h>
80
- #include <grpc/support/log.h>
81
- #include <grpc/support/sync.h>
82
- #include <grpc/support/useful.h>
83
- #include <stdbool.h>
84
- #include <string.h>
85
-
86
- // End of platform specific code
87
-
88
- typedef struct census_log_block_list_struct {
89
- struct census_log_block_list_struct* next;
90
- struct census_log_block_list_struct* prev;
91
- struct census_log_block* block;
92
- } cl_block_list_struct;
93
-
94
- typedef struct census_log_block {
95
- // Pointer to underlying buffer.
96
- char* buffer;
97
- gpr_atm writer_lock;
98
- gpr_atm reader_lock;
99
- // Keeps completely written bytes. Declared atomic because accessed
100
- // simultaneously by reader and writer.
101
- gpr_atm bytes_committed;
102
- // Bytes already read.
103
- size_t bytes_read;
104
- // Links for list.
105
- cl_block_list_struct link;
106
- // We want this structure to be cacheline aligned. We assume the following
107
- // sizes for the various parts on 32/64bit systems:
108
- // type 32b size 64b size
109
- // char* 4 8
110
- // 3x gpr_atm 12 24
111
- // size_t 4 8
112
- // cl_block_list_struct 12 24
113
- // TOTAL 32 64
114
- //
115
- // Depending on the size of our cacheline and the architecture, we
116
- // selectively add char buffering to this structure. The size is checked
117
- // via assert in census_log_initialize().
118
- #if defined(GPR_ARCH_64)
119
- #define CL_BLOCK_PAD_SIZE (GPR_CACHELINE_SIZE - 64)
120
- #else
121
- #if defined(GPR_ARCH_32)
122
- #define CL_BLOCK_PAD_SIZE (GPR_CACHELINE_SIZE - 32)
123
- #else
124
- #error "Unknown architecture"
125
- #endif
126
- #endif
127
- #if CL_BLOCK_PAD_SIZE > 0
128
- char padding[CL_BLOCK_PAD_SIZE];
129
- #endif
130
- } cl_block;
131
-
132
- // A list of cl_blocks, doubly-linked through cl_block::link.
133
- typedef struct census_log_block_list {
134
- int32_t count; // Number of items in list.
135
- cl_block_list_struct ht; // head/tail of linked list.
136
- } cl_block_list;
137
-
138
- // Cacheline aligned block pointers to avoid false sharing. Block pointer must
139
- // be initialized via set_block(), before calling other functions
140
- typedef struct census_log_core_local_block {
141
- gpr_atm block;
142
- // Ensure cachline alignment: we assume sizeof(gpr_atm) == 4 or 8
143
- #if defined(GPR_ARCH_64)
144
- #define CL_CORE_LOCAL_BLOCK_PAD_SIZE (GPR_CACHELINE_SIZE - 8)
145
- #else
146
- #if defined(GPR_ARCH_32)
147
- #define CL_CORE_LOCAL_BLOCK_PAD_SIZE (GPR_CACHELINE_SIZE - 4)
148
- #else
149
- #error "Unknown architecture"
150
- #endif
151
- #endif
152
- #if CL_CORE_LOCAL_BLOCK_PAD_SIZE > 0
153
- char padding[CL_CORE_LOCAL_BLOCK_PAD_SIZE];
154
- #endif
155
- } cl_core_local_block;
156
-
157
- struct census_log {
158
- int discard_old_records;
159
- // Number of cores (aka hardware-contexts)
160
- unsigned num_cores;
161
- // number of CENSUS_LOG_2_MAX_RECORD_SIZE blocks in log
162
- uint32_t num_blocks;
163
- cl_block* blocks; // Block metadata.
164
- cl_core_local_block* core_local_blocks; // Keeps core to block mappings.
165
- gpr_mu lock;
166
- int initialized; // has log been initialized?
167
- // Keeps the state of the reader iterator. A value of 0 indicates that
168
- // iterator has reached the end. census_log_init_reader() resets the value
169
- // to num_core to restart iteration.
170
- uint32_t read_iterator_state;
171
- // Points to the block being read. If non-NULL, the block is locked for
172
- // reading(block_being_read_->reader_lock is held).
173
- cl_block* block_being_read;
174
- char* buffer;
175
- cl_block_list free_block_list;
176
- cl_block_list dirty_block_list;
177
- gpr_atm out_of_space_count;
178
- };
179
-
180
- // Single internal log.
181
- static struct census_log g_log;
182
-
183
- // Functions that operate on an atomic memory location used as a lock.
184
-
185
- // Returns non-zero if lock is acquired.
186
- static int cl_try_lock(gpr_atm* lock) { return gpr_atm_acq_cas(lock, 0, 1); }
187
-
188
- static void cl_unlock(gpr_atm* lock) { gpr_atm_rel_store(lock, 0); }
189
-
190
- // Functions that operate on cl_core_local_block's.
191
-
192
- static void cl_core_local_block_set_block(cl_core_local_block* clb,
193
- cl_block* block) {
194
- gpr_atm_rel_store(&clb->block, (gpr_atm)block);
195
- }
196
-
197
- static cl_block* cl_core_local_block_get_block(cl_core_local_block* clb) {
198
- return (cl_block*)gpr_atm_acq_load(&clb->block);
199
- }
200
-
201
- // Functions that operate on cl_block_list_struct's.
202
-
203
- static void cl_block_list_struct_initialize(cl_block_list_struct* bls,
204
- cl_block* block) {
205
- bls->next = bls->prev = bls;
206
- bls->block = block;
207
- }
208
-
209
- // Functions that operate on cl_block_list's.
210
-
211
- static void cl_block_list_initialize(cl_block_list* list) {
212
- list->count = 0;
213
- cl_block_list_struct_initialize(&list->ht, NULL);
214
- }
215
-
216
- // Returns head of *this, or NULL if empty.
217
- static cl_block* cl_block_list_head(cl_block_list* list) {
218
- return list->ht.next->block;
219
- }
220
-
221
- // Insert element *e after *pos.
222
- static void cl_block_list_insert(cl_block_list* list, cl_block_list_struct* pos,
223
- cl_block_list_struct* e) {
224
- list->count++;
225
- e->next = pos->next;
226
- e->prev = pos;
227
- e->next->prev = e;
228
- e->prev->next = e;
229
- }
230
-
231
- // Insert block at the head of the list
232
- static void cl_block_list_insert_at_head(cl_block_list* list, cl_block* block) {
233
- cl_block_list_insert(list, &list->ht, &block->link);
234
- }
235
-
236
- // Insert block at the tail of the list.
237
- static void cl_block_list_insert_at_tail(cl_block_list* list, cl_block* block) {
238
- cl_block_list_insert(list, list->ht.prev, &block->link);
239
- }
240
-
241
- // Removes block *b. Requires *b be in the list.
242
- static void cl_block_list_remove(cl_block_list* list, cl_block* b) {
243
- list->count--;
244
- b->link.next->prev = b->link.prev;
245
- b->link.prev->next = b->link.next;
246
- }
247
-
248
- // Functions that operate on cl_block's
249
-
250
- static void cl_block_initialize(cl_block* block, char* buffer) {
251
- block->buffer = buffer;
252
- gpr_atm_rel_store(&block->writer_lock, 0);
253
- gpr_atm_rel_store(&block->reader_lock, 0);
254
- gpr_atm_rel_store(&block->bytes_committed, 0);
255
- block->bytes_read = 0;
256
- cl_block_list_struct_initialize(&block->link, block);
257
- }
258
-
259
- // Guards against exposing partially written buffer to the reader.
260
- static void cl_block_set_bytes_committed(cl_block* block,
261
- size_t bytes_committed) {
262
- gpr_atm_rel_store(&block->bytes_committed, (gpr_atm)bytes_committed);
263
- }
264
-
265
- static size_t cl_block_get_bytes_committed(cl_block* block) {
266
- return (size_t)gpr_atm_acq_load(&block->bytes_committed);
267
- }
268
-
269
- // Tries to disable future read/write access to this block. Succeeds if:
270
- // - no in-progress write AND
271
- // - no in-progress read AND
272
- // - 'discard_data' set to true OR no unread data
273
- // On success, clears the block state and returns with writer_lock_ and
274
- // reader_lock_ held. These locks are released by a subsequent
275
- // cl_block_access_enable() call.
276
- static bool cl_block_try_disable_access(cl_block* block, int discard_data) {
277
- if (!cl_try_lock(&block->writer_lock)) {
278
- return false;
279
- }
280
- if (!cl_try_lock(&block->reader_lock)) {
281
- cl_unlock(&block->writer_lock);
282
- return false;
283
- }
284
- if (!discard_data &&
285
- (block->bytes_read != cl_block_get_bytes_committed(block))) {
286
- cl_unlock(&block->reader_lock);
287
- cl_unlock(&block->writer_lock);
288
- return false;
289
- }
290
- cl_block_set_bytes_committed(block, 0);
291
- block->bytes_read = 0;
292
- return true;
293
- }
294
-
295
- static void cl_block_enable_access(cl_block* block) {
296
- cl_unlock(&block->reader_lock);
297
- cl_unlock(&block->writer_lock);
298
- }
299
-
300
- // Returns with writer_lock held.
301
- static void* cl_block_start_write(cl_block* block, size_t size) {
302
- if (!cl_try_lock(&block->writer_lock)) {
303
- return NULL;
304
- }
305
- size_t bytes_committed = cl_block_get_bytes_committed(block);
306
- if (bytes_committed + size > CENSUS_LOG_MAX_RECORD_SIZE) {
307
- cl_unlock(&block->writer_lock);
308
- return NULL;
309
- }
310
- return block->buffer + bytes_committed;
311
- }
312
-
313
- // Releases writer_lock and increments committed bytes by 'bytes_written'.
314
- // 'bytes_written' must be <= 'size' specified in the corresponding
315
- // StartWrite() call. This function is thread-safe.
316
- static void cl_block_end_write(cl_block* block, size_t bytes_written) {
317
- cl_block_set_bytes_committed(
318
- block, cl_block_get_bytes_committed(block) + bytes_written);
319
- cl_unlock(&block->writer_lock);
320
- }
321
-
322
- // Returns a pointer to the first unread byte in buffer. The number of bytes
323
- // available are returned in 'bytes_available'. Acquires reader lock that is
324
- // released by a subsequent cl_block_end_read() call. Returns NULL if:
325
- // - read in progress
326
- // - no data available
327
- static void* cl_block_start_read(cl_block* block, size_t* bytes_available) {
328
- if (!cl_try_lock(&block->reader_lock)) {
329
- return NULL;
330
- }
331
- // bytes_committed may change from under us. Use bytes_available to update
332
- // bytes_read below.
333
- size_t bytes_committed = cl_block_get_bytes_committed(block);
334
- GPR_ASSERT(bytes_committed >= block->bytes_read);
335
- *bytes_available = bytes_committed - block->bytes_read;
336
- if (*bytes_available == 0) {
337
- cl_unlock(&block->reader_lock);
338
- return NULL;
339
- }
340
- void* record = block->buffer + block->bytes_read;
341
- block->bytes_read += *bytes_available;
342
- return record;
343
- }
344
-
345
- static void cl_block_end_read(cl_block* block) {
346
- cl_unlock(&block->reader_lock);
347
- }
348
-
349
- // Internal functions operating on g_log
350
-
351
- // Allocates a new free block (or recycles an available dirty block if log is
352
- // configured to discard old records). Returns NULL if out-of-space.
353
- static cl_block* cl_allocate_block(void) {
354
- cl_block* block = cl_block_list_head(&g_log.free_block_list);
355
- if (block != NULL) {
356
- cl_block_list_remove(&g_log.free_block_list, block);
357
- return block;
358
- }
359
- if (!g_log.discard_old_records) {
360
- // No free block and log is configured to keep old records.
361
- return NULL;
362
- }
363
- // Recycle dirty block. Start from the oldest.
364
- for (block = cl_block_list_head(&g_log.dirty_block_list); block != NULL;
365
- block = block->link.next->block) {
366
- if (cl_block_try_disable_access(block, 1 /* discard data */)) {
367
- cl_block_list_remove(&g_log.dirty_block_list, block);
368
- return block;
369
- }
370
- }
371
- return NULL;
372
- }
373
-
374
- // Allocates a new block and updates core id => block mapping. 'old_block'
375
- // points to the block that the caller thinks is attached to
376
- // 'core_id'. 'old_block' may be NULL. Returns true if:
377
- // - allocated a new block OR
378
- // - 'core_id' => 'old_block' mapping changed (another thread allocated a
379
- // block before lock was acquired).
380
- static bool cl_allocate_core_local_block(uint32_t core_id,
381
- cl_block* old_block) {
382
- // Now that we have the lock, check if core-local mapping has changed.
383
- cl_core_local_block* core_local_block = &g_log.core_local_blocks[core_id];
384
- cl_block* block = cl_core_local_block_get_block(core_local_block);
385
- if ((block != NULL) && (block != old_block)) {
386
- return true;
387
- }
388
- if (block != NULL) {
389
- cl_core_local_block_set_block(core_local_block, NULL);
390
- cl_block_list_insert_at_tail(&g_log.dirty_block_list, block);
391
- }
392
- block = cl_allocate_block();
393
- if (block == NULL) {
394
- return false;
395
- }
396
- cl_core_local_block_set_block(core_local_block, block);
397
- cl_block_enable_access(block);
398
- return true;
399
- }
400
-
401
- static cl_block* cl_get_block(void* record) {
402
- uintptr_t p = (uintptr_t)((char*)record - g_log.buffer);
403
- uintptr_t index = p >> CENSUS_LOG_2_MAX_RECORD_SIZE;
404
- return &g_log.blocks[index];
405
- }
406
-
407
- // Gets the next block to read and tries to free 'prev' block (if not NULL).
408
- // Returns NULL if reached the end.
409
- static cl_block* cl_next_block_to_read(cl_block* prev) {
410
- cl_block* block = NULL;
411
- if (g_log.read_iterator_state == g_log.num_cores) {
412
- // We are traversing dirty list; find the next dirty block.
413
- if (prev != NULL) {
414
- // Try to free the previous block if there is no unread data. This
415
- // block
416
- // may have unread data if previously incomplete record completed
417
- // between
418
- // read_next() calls.
419
- block = prev->link.next->block;
420
- if (cl_block_try_disable_access(prev, 0 /* do not discard data */)) {
421
- cl_block_list_remove(&g_log.dirty_block_list, prev);
422
- cl_block_list_insert_at_head(&g_log.free_block_list, prev);
423
- }
424
- } else {
425
- block = cl_block_list_head(&g_log.dirty_block_list);
426
- }
427
- if (block != NULL) {
428
- return block;
429
- }
430
- // We are done with the dirty list; moving on to core-local blocks.
431
- }
432
- while (g_log.read_iterator_state > 0) {
433
- g_log.read_iterator_state--;
434
- block = cl_core_local_block_get_block(
435
- &g_log.core_local_blocks[g_log.read_iterator_state]);
436
- if (block != NULL) {
437
- return block;
438
- }
439
- }
440
- return NULL;
441
- }
442
-
443
- #define CL_LOG_2_MB 20 // 2^20 = 1MB
444
-
445
- // External functions: primary stats_log interface
446
- void census_log_initialize(size_t size_in_mb, int discard_old_records) {
447
- // Check cacheline alignment.
448
- GPR_ASSERT(sizeof(cl_block) % GPR_CACHELINE_SIZE == 0);
449
- GPR_ASSERT(sizeof(cl_core_local_block) % GPR_CACHELINE_SIZE == 0);
450
- GPR_ASSERT(!g_log.initialized);
451
- g_log.discard_old_records = discard_old_records;
452
- g_log.num_cores = gpr_cpu_num_cores();
453
- // Ensure that we will not get any overflow in calaculating num_blocks
454
- GPR_ASSERT(CL_LOG_2_MB >= CENSUS_LOG_2_MAX_RECORD_SIZE);
455
- GPR_ASSERT(size_in_mb < 1000);
456
- // Ensure at least 2x as many blocks as there are cores.
457
- g_log.num_blocks =
458
- (uint32_t)GPR_MAX(2 * g_log.num_cores, (size_in_mb << CL_LOG_2_MB) >>
459
- CENSUS_LOG_2_MAX_RECORD_SIZE);
460
- gpr_mu_init(&g_log.lock);
461
- g_log.read_iterator_state = 0;
462
- g_log.block_being_read = NULL;
463
- g_log.core_local_blocks = (cl_core_local_block*)gpr_malloc_aligned(
464
- g_log.num_cores * sizeof(cl_core_local_block), GPR_CACHELINE_SIZE_LOG);
465
- memset(g_log.core_local_blocks, 0,
466
- g_log.num_cores * sizeof(cl_core_local_block));
467
- g_log.blocks = (cl_block*)gpr_malloc_aligned(
468
- g_log.num_blocks * sizeof(cl_block), GPR_CACHELINE_SIZE_LOG);
469
- memset(g_log.blocks, 0, g_log.num_blocks * sizeof(cl_block));
470
- g_log.buffer =
471
- (char*)gpr_malloc(g_log.num_blocks * CENSUS_LOG_MAX_RECORD_SIZE);
472
- memset(g_log.buffer, 0, g_log.num_blocks * CENSUS_LOG_MAX_RECORD_SIZE);
473
- cl_block_list_initialize(&g_log.free_block_list);
474
- cl_block_list_initialize(&g_log.dirty_block_list);
475
- for (uint32_t i = 0; i < g_log.num_blocks; ++i) {
476
- cl_block* block = g_log.blocks + i;
477
- cl_block_initialize(block, g_log.buffer + (CENSUS_LOG_MAX_RECORD_SIZE * i));
478
- cl_block_try_disable_access(block, 1 /* discard data */);
479
- cl_block_list_insert_at_tail(&g_log.free_block_list, block);
480
- }
481
- gpr_atm_rel_store(&g_log.out_of_space_count, 0);
482
- g_log.initialized = 1;
483
- }
484
-
485
- void census_log_shutdown(void) {
486
- GPR_ASSERT(g_log.initialized);
487
- gpr_mu_destroy(&g_log.lock);
488
- gpr_free_aligned(g_log.core_local_blocks);
489
- g_log.core_local_blocks = NULL;
490
- gpr_free_aligned(g_log.blocks);
491
- g_log.blocks = NULL;
492
- gpr_free(g_log.buffer);
493
- g_log.buffer = NULL;
494
- g_log.initialized = 0;
495
- }
496
-
497
- void* census_log_start_write(size_t size) {
498
- // Used to bound number of times block allocation is attempted.
499
- GPR_ASSERT(size > 0);
500
- GPR_ASSERT(g_log.initialized);
501
- if (size > CENSUS_LOG_MAX_RECORD_SIZE) {
502
- return NULL;
503
- }
504
- uint32_t attempts_remaining = g_log.num_blocks;
505
- uint32_t core_id = gpr_cpu_current_cpu();
506
- do {
507
- void* record = NULL;
508
- cl_block* block =
509
- cl_core_local_block_get_block(&g_log.core_local_blocks[core_id]);
510
- if (block && (record = cl_block_start_write(block, size))) {
511
- return record;
512
- }
513
- // Need to allocate a new block. We are here if:
514
- // - No block associated with the core OR
515
- // - Write in-progress on the block OR
516
- // - block is out of space
517
- gpr_mu_lock(&g_log.lock);
518
- bool allocated = cl_allocate_core_local_block(core_id, block);
519
- gpr_mu_unlock(&g_log.lock);
520
- if (!allocated) {
521
- gpr_atm_no_barrier_fetch_add(&g_log.out_of_space_count, 1);
522
- return NULL;
523
- }
524
- } while (attempts_remaining--);
525
- // Give up.
526
- gpr_atm_no_barrier_fetch_add(&g_log.out_of_space_count, 1);
527
- return NULL;
528
- }
529
-
530
- void census_log_end_write(void* record, size_t bytes_written) {
531
- GPR_ASSERT(g_log.initialized);
532
- cl_block_end_write(cl_get_block(record), bytes_written);
533
- }
534
-
535
- void census_log_init_reader(void) {
536
- GPR_ASSERT(g_log.initialized);
537
- gpr_mu_lock(&g_log.lock);
538
- // If a block is locked for reading unlock it.
539
- if (g_log.block_being_read != NULL) {
540
- cl_block_end_read(g_log.block_being_read);
541
- g_log.block_being_read = NULL;
542
- }
543
- g_log.read_iterator_state = g_log.num_cores;
544
- gpr_mu_unlock(&g_log.lock);
545
- }
546
-
547
- const void* census_log_read_next(size_t* bytes_available) {
548
- GPR_ASSERT(g_log.initialized);
549
- gpr_mu_lock(&g_log.lock);
550
- if (g_log.block_being_read != NULL) {
551
- cl_block_end_read(g_log.block_being_read);
552
- }
553
- do {
554
- g_log.block_being_read = cl_next_block_to_read(g_log.block_being_read);
555
- if (g_log.block_being_read != NULL) {
556
- void* record =
557
- cl_block_start_read(g_log.block_being_read, bytes_available);
558
- if (record != NULL) {
559
- gpr_mu_unlock(&g_log.lock);
560
- return record;
561
- }
562
- }
563
- } while (g_log.block_being_read != NULL);
564
- gpr_mu_unlock(&g_log.lock);
565
- return NULL;
566
- }
567
-
568
- size_t census_log_remaining_space(void) {
569
- GPR_ASSERT(g_log.initialized);
570
- size_t space = 0;
571
- gpr_mu_lock(&g_log.lock);
572
- if (g_log.discard_old_records) {
573
- // Remaining space is not meaningful; just return the entire log space.
574
- space = g_log.num_blocks << CENSUS_LOG_2_MAX_RECORD_SIZE;
575
- } else {
576
- GPR_ASSERT(g_log.free_block_list.count >= 0);
577
- space = (size_t)g_log.free_block_list.count * CENSUS_LOG_MAX_RECORD_SIZE;
578
- }
579
- gpr_mu_unlock(&g_log.lock);
580
- return space;
581
- }
582
-
583
- int64_t census_log_out_of_space_count(void) {
584
- GPR_ASSERT(g_log.initialized);
585
- return gpr_atm_acq_load(&g_log.out_of_space_count);
586
- }