grpc 0.11.0 → 0.12.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 (459) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +29456 -0
  3. data/Rakefile +13 -8
  4. data/etc/roots.pem +5114 -0
  5. data/include/grpc/byte_buffer.h +120 -0
  6. data/include/grpc/byte_buffer_reader.h +58 -0
  7. data/include/grpc/census.h +488 -0
  8. data/include/grpc/compression.h +106 -0
  9. data/include/grpc/grpc.h +732 -0
  10. data/include/grpc/grpc_security.h +374 -0
  11. data/include/grpc/grpc_zookeeper.h +59 -0
  12. data/include/grpc/status.h +163 -0
  13. data/include/grpc/support/alloc.h +72 -0
  14. data/include/grpc/support/atm.h +92 -0
  15. data/include/grpc/support/atm_gcc_atomic.h +72 -0
  16. data/include/grpc/support/atm_gcc_sync.h +87 -0
  17. data/include/grpc/support/atm_win32.h +125 -0
  18. data/include/grpc/support/avl.h +91 -0
  19. data/include/grpc/support/cmdline.h +101 -0
  20. data/include/grpc/support/cpu.h +57 -0
  21. data/include/grpc/support/histogram.h +76 -0
  22. data/include/grpc/support/host_port.h +64 -0
  23. data/include/grpc/support/log.h +108 -0
  24. data/include/grpc/support/log_win32.h +51 -0
  25. data/include/grpc/support/port_platform.h +356 -0
  26. data/include/grpc/support/slice.h +182 -0
  27. data/include/grpc/support/slice_buffer.h +102 -0
  28. data/include/grpc/support/string_util.h +61 -0
  29. data/include/grpc/support/subprocess.h +57 -0
  30. data/include/grpc/support/sync.h +315 -0
  31. data/include/grpc/support/sync_generic.h +55 -0
  32. data/include/grpc/support/sync_posix.h +47 -0
  33. data/include/grpc/support/sync_win32.h +49 -0
  34. data/include/grpc/support/thd.h +91 -0
  35. data/include/grpc/support/time.h +128 -0
  36. data/include/grpc/support/tls.h +77 -0
  37. data/include/grpc/support/tls_gcc.h +56 -0
  38. data/include/grpc/support/tls_msvc.h +56 -0
  39. data/include/grpc/support/tls_pthread.h +60 -0
  40. data/include/grpc/support/useful.h +75 -0
  41. data/src/core/census/aggregation.h +66 -0
  42. data/src/core/census/context.c +46 -0
  43. data/src/core/census/context.h +47 -0
  44. data/src/core/census/grpc_context.c +53 -0
  45. data/src/core/census/grpc_filter.c +184 -0
  46. data/src/core/census/grpc_filter.h +44 -0
  47. data/src/core/census/initialize.c +57 -0
  48. data/src/core/census/operation.c +63 -0
  49. data/src/core/census/rpc_metric_id.h +51 -0
  50. data/src/core/census/tracing.c +45 -0
  51. data/src/core/channel/channel_args.c +209 -0
  52. data/src/core/channel/channel_args.h +88 -0
  53. data/src/core/channel/channel_stack.c +262 -0
  54. data/src/core/channel/channel_stack.h +260 -0
  55. data/src/core/channel/client_channel.c +524 -0
  56. data/src/core/channel/client_channel.h +63 -0
  57. data/src/core/channel/client_uchannel.c +243 -0
  58. data/src/core/channel/client_uchannel.h +60 -0
  59. data/src/core/channel/compress_filter.c +297 -0
  60. data/src/core/channel/compress_filter.h +65 -0
  61. data/src/core/channel/connected_channel.c +167 -0
  62. data/src/core/channel/connected_channel.h +51 -0
  63. data/src/core/channel/context.h +49 -0
  64. data/src/core/channel/http_client_filter.c +248 -0
  65. data/src/core/channel/http_client_filter.h +44 -0
  66. data/src/core/channel/http_server_filter.c +233 -0
  67. data/src/core/channel/http_server_filter.h +42 -0
  68. data/src/core/channel/subchannel_call_holder.c +259 -0
  69. data/src/core/channel/subchannel_call_holder.h +98 -0
  70. data/src/core/client_config/client_config.c +72 -0
  71. data/src/core/client_config/client_config.h +53 -0
  72. data/src/core/client_config/connector.c +54 -0
  73. data/src/core/client_config/connector.h +95 -0
  74. data/src/core/client_config/default_initial_connect_string.c +39 -0
  75. data/src/core/client_config/initial_connect_string.c +53 -0
  76. data/src/core/client_config/initial_connect_string.h +50 -0
  77. data/src/core/client_config/lb_policies/pick_first.c +398 -0
  78. data/src/core/client_config/lb_policies/pick_first.h +43 -0
  79. data/src/core/client_config/lb_policies/round_robin.c +537 -0
  80. data/src/core/client_config/lb_policies/round_robin.h +46 -0
  81. data/src/core/client_config/lb_policy.c +134 -0
  82. data/src/core/client_config/lb_policy.h +143 -0
  83. data/src/core/client_config/lb_policy_factory.c +48 -0
  84. data/src/core/client_config/lb_policy_factory.h +73 -0
  85. data/src/core/client_config/lb_policy_registry.c +88 -0
  86. data/src/core/client_config/lb_policy_registry.h +54 -0
  87. data/src/core/client_config/resolver.c +82 -0
  88. data/src/core/client_config/resolver.h +94 -0
  89. data/src/core/client_config/resolver_factory.c +55 -0
  90. data/src/core/client_config/resolver_factory.h +82 -0
  91. data/src/core/client_config/resolver_registry.c +137 -0
  92. data/src/core/client_config/resolver_registry.h +65 -0
  93. data/src/core/client_config/resolvers/dns_resolver.c +257 -0
  94. data/src/core/client_config/resolvers/dns_resolver.h +42 -0
  95. data/src/core/client_config/resolvers/sockaddr_resolver.c +391 -0
  96. data/src/core/client_config/resolvers/sockaddr_resolver.h +50 -0
  97. data/src/core/client_config/subchannel.c +697 -0
  98. data/src/core/client_config/subchannel.h +165 -0
  99. data/src/core/client_config/subchannel_factory.c +49 -0
  100. data/src/core/client_config/subchannel_factory.h +66 -0
  101. data/src/core/client_config/uri_parser.c +242 -0
  102. data/src/core/client_config/uri_parser.h +51 -0
  103. data/src/core/compression/algorithm.c +166 -0
  104. data/src/core/compression/algorithm_metadata.h +53 -0
  105. data/src/core/compression/message_compress.c +198 -0
  106. data/src/core/compression/message_compress.h +52 -0
  107. data/src/core/debug/trace.c +136 -0
  108. data/src/core/debug/trace.h +43 -0
  109. data/src/core/httpcli/format_request.c +120 -0
  110. data/src/core/httpcli/format_request.h +45 -0
  111. data/src/core/httpcli/httpcli.c +286 -0
  112. data/src/core/httpcli/httpcli.h +162 -0
  113. data/src/core/httpcli/httpcli_security_connector.c +189 -0
  114. data/src/core/httpcli/parser.c +211 -0
  115. data/src/core/httpcli/parser.h +64 -0
  116. data/src/core/iomgr/closure.c +98 -0
  117. data/src/core/iomgr/closure.h +97 -0
  118. data/src/core/iomgr/endpoint.c +67 -0
  119. data/src/core/iomgr/endpoint.h +102 -0
  120. data/src/core/iomgr/endpoint_pair.h +47 -0
  121. data/src/core/iomgr/endpoint_pair_posix.c +82 -0
  122. data/src/core/iomgr/endpoint_pair_windows.c +97 -0
  123. data/src/core/iomgr/exec_ctx.c +72 -0
  124. data/src/core/iomgr/exec_ctx.h +78 -0
  125. data/src/core/iomgr/executor.c +143 -0
  126. data/src/core/iomgr/executor.h +53 -0
  127. data/src/core/iomgr/fd_posix.c +438 -0
  128. data/src/core/iomgr/fd_posix.h +189 -0
  129. data/src/core/iomgr/iocp_windows.c +206 -0
  130. data/src/core/iomgr/iocp_windows.h +56 -0
  131. data/src/core/iomgr/iomgr.c +156 -0
  132. data/src/core/iomgr/iomgr.h +43 -0
  133. data/src/core/iomgr/iomgr_internal.h +58 -0
  134. data/src/core/iomgr/iomgr_posix.c +52 -0
  135. data/src/core/iomgr/iomgr_posix.h +39 -0
  136. data/src/core/iomgr/iomgr_windows.c +73 -0
  137. data/src/core/iomgr/pollset.h +95 -0
  138. data/src/core/iomgr/pollset_multipoller_with_epoll.c +258 -0
  139. data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +227 -0
  140. data/src/core/iomgr/pollset_posix.c +638 -0
  141. data/src/core/iomgr/pollset_posix.h +147 -0
  142. data/src/core/iomgr/pollset_set.h +67 -0
  143. data/src/core/iomgr/pollset_set_posix.c +182 -0
  144. data/src/core/iomgr/pollset_set_posix.h +61 -0
  145. data/src/core/iomgr/pollset_set_windows.c +60 -0
  146. data/src/core/iomgr/pollset_set_windows.h +39 -0
  147. data/src/core/iomgr/pollset_windows.c +248 -0
  148. data/src/core/iomgr/pollset_windows.h +79 -0
  149. data/src/core/iomgr/resolve_address.h +72 -0
  150. data/src/core/iomgr/resolve_address_posix.c +183 -0
  151. data/src/core/iomgr/resolve_address_windows.c +166 -0
  152. data/src/core/iomgr/sockaddr.h +47 -0
  153. data/src/core/iomgr/sockaddr_posix.h +44 -0
  154. data/src/core/iomgr/sockaddr_utils.c +234 -0
  155. data/src/core/iomgr/sockaddr_utils.h +89 -0
  156. data/src/core/iomgr/sockaddr_win32.h +46 -0
  157. data/src/core/iomgr/socket_utils_common_posix.c +208 -0
  158. data/src/core/iomgr/socket_utils_linux.c +51 -0
  159. data/src/core/iomgr/socket_utils_posix.c +70 -0
  160. data/src/core/iomgr/socket_utils_posix.h +113 -0
  161. data/src/core/iomgr/socket_windows.c +98 -0
  162. data/src/core/iomgr/socket_windows.h +111 -0
  163. data/src/core/iomgr/tcp_client.h +53 -0
  164. data/src/core/iomgr/tcp_client_posix.c +304 -0
  165. data/src/core/iomgr/tcp_client_windows.c +221 -0
  166. data/src/core/iomgr/tcp_posix.c +485 -0
  167. data/src/core/iomgr/tcp_posix.h +65 -0
  168. data/src/core/iomgr/tcp_server.h +83 -0
  169. data/src/core/iomgr/tcp_server_posix.c +562 -0
  170. data/src/core/iomgr/tcp_server_windows.c +509 -0
  171. data/src/core/iomgr/tcp_windows.c +406 -0
  172. data/src/core/iomgr/tcp_windows.h +57 -0
  173. data/src/core/iomgr/time_averaged_stats.c +77 -0
  174. data/src/core/iomgr/time_averaged_stats.h +88 -0
  175. data/src/core/iomgr/timer.c +345 -0
  176. data/src/core/iomgr/timer.h +89 -0
  177. data/src/core/iomgr/timer_heap.c +148 -0
  178. data/src/core/iomgr/timer_heap.h +57 -0
  179. data/src/core/iomgr/timer_internal.h +61 -0
  180. data/src/core/iomgr/udp_server.c +439 -0
  181. data/src/core/iomgr/udp_server.h +83 -0
  182. data/src/core/iomgr/wakeup_fd_eventfd.c +85 -0
  183. data/src/core/iomgr/wakeup_fd_nospecial.c +51 -0
  184. data/src/core/iomgr/wakeup_fd_pipe.c +97 -0
  185. data/src/core/iomgr/wakeup_fd_pipe.h +41 -0
  186. data/src/core/iomgr/wakeup_fd_posix.c +72 -0
  187. data/src/core/iomgr/wakeup_fd_posix.h +101 -0
  188. data/src/core/iomgr/workqueue.h +85 -0
  189. data/src/core/iomgr/workqueue_posix.c +143 -0
  190. data/src/core/iomgr/workqueue_posix.h +51 -0
  191. data/src/core/iomgr/workqueue_windows.c +40 -0
  192. data/src/core/iomgr/workqueue_windows.h +37 -0
  193. data/src/core/json/json.c +64 -0
  194. data/src/core/json/json.h +88 -0
  195. data/src/core/json/json_common.h +49 -0
  196. data/src/core/json/json_reader.c +660 -0
  197. data/src/core/json/json_reader.h +160 -0
  198. data/src/core/json/json_string.c +379 -0
  199. data/src/core/json/json_writer.c +260 -0
  200. data/src/core/json/json_writer.h +97 -0
  201. data/src/core/profiling/basic_timers.c +274 -0
  202. data/src/core/profiling/stap_timers.c +65 -0
  203. data/src/core/profiling/timers.h +119 -0
  204. data/src/core/security/auth_filters.h +42 -0
  205. data/src/core/security/base64.c +233 -0
  206. data/src/core/security/base64.h +52 -0
  207. data/src/core/security/client_auth_filter.c +337 -0
  208. data/src/core/security/credentials.c +1273 -0
  209. data/src/core/security/credentials.h +376 -0
  210. data/src/core/security/credentials_metadata.c +101 -0
  211. data/src/core/security/credentials_posix.c +61 -0
  212. data/src/core/security/credentials_win32.c +61 -0
  213. data/src/core/security/google_default_credentials.c +260 -0
  214. data/src/core/security/handshake.c +327 -0
  215. data/src/core/security/handshake.h +50 -0
  216. data/src/core/security/json_token.c +405 -0
  217. data/src/core/security/json_token.h +118 -0
  218. data/src/core/security/jwt_verifier.c +842 -0
  219. data/src/core/security/jwt_verifier.h +136 -0
  220. data/src/core/security/secure_endpoint.c +383 -0
  221. data/src/core/security/secure_endpoint.h +49 -0
  222. data/src/core/security/security_connector.c +756 -0
  223. data/src/core/security/security_connector.h +246 -0
  224. data/src/core/security/security_context.c +342 -0
  225. data/src/core/security/security_context.h +114 -0
  226. data/src/core/security/server_auth_filter.c +264 -0
  227. data/src/core/security/server_secure_chttp2.c +268 -0
  228. data/src/core/statistics/census_interface.h +76 -0
  229. data/src/core/statistics/census_rpc_stats.h +101 -0
  230. data/src/core/support/alloc.c +90 -0
  231. data/src/core/support/avl.c +288 -0
  232. data/src/core/support/block_annotate.h +48 -0
  233. data/src/core/support/cmdline.c +347 -0
  234. data/src/core/support/cpu_iphone.c +49 -0
  235. data/src/core/support/cpu_linux.c +78 -0
  236. data/src/core/support/cpu_posix.c +77 -0
  237. data/src/core/support/cpu_windows.c +47 -0
  238. data/src/core/support/env.h +60 -0
  239. data/src/core/support/env_linux.c +62 -0
  240. data/src/core/support/env_posix.c +57 -0
  241. data/src/core/support/env_win32.c +65 -0
  242. data/src/core/support/file.c +91 -0
  243. data/src/core/support/file.h +63 -0
  244. data/src/core/support/file_posix.c +85 -0
  245. data/src/core/support/file_win32.c +84 -0
  246. data/src/core/support/histogram.c +244 -0
  247. data/src/core/support/host_port.c +110 -0
  248. data/src/core/support/log.c +66 -0
  249. data/src/core/support/log_android.c +87 -0
  250. data/src/core/support/log_linux.c +105 -0
  251. data/src/core/support/log_posix.c +102 -0
  252. data/src/core/support/log_win32.c +125 -0
  253. data/src/core/support/murmur_hash.c +96 -0
  254. data/src/core/support/murmur_hash.h +44 -0
  255. data/src/core/support/slice.c +343 -0
  256. data/src/core/support/slice_buffer.c +282 -0
  257. data/src/core/support/stack_lockfree.c +175 -0
  258. data/src/core/support/stack_lockfree.h +53 -0
  259. data/src/core/support/string.c +296 -0
  260. data/src/core/support/string.h +121 -0
  261. data/src/core/support/string_posix.c +86 -0
  262. data/src/core/support/string_win32.c +109 -0
  263. data/src/core/support/string_win32.h +47 -0
  264. data/src/core/support/subprocess_posix.c +112 -0
  265. data/src/core/support/sync.c +122 -0
  266. data/src/core/support/sync_posix.c +104 -0
  267. data/src/core/support/sync_win32.c +128 -0
  268. data/src/core/support/thd.c +64 -0
  269. data/src/core/support/thd_internal.h +39 -0
  270. data/src/core/support/thd_posix.c +94 -0
  271. data/src/core/support/thd_win32.c +117 -0
  272. data/src/core/support/time.c +304 -0
  273. data/src/core/support/time_posix.c +161 -0
  274. data/src/core/support/time_precise.c +89 -0
  275. data/src/core/support/time_precise.h +42 -0
  276. data/src/core/support/time_win32.c +101 -0
  277. data/src/core/support/tls_pthread.c +45 -0
  278. data/src/core/surface/api_trace.c +36 -0
  279. data/src/core/surface/api_trace.h +65 -0
  280. data/src/core/surface/byte_buffer.c +97 -0
  281. data/src/core/surface/byte_buffer_reader.c +123 -0
  282. data/src/core/surface/call.c +1424 -0
  283. data/src/core/surface/call.h +109 -0
  284. data/src/core/surface/call_details.c +50 -0
  285. data/src/core/surface/call_log_batch.c +118 -0
  286. data/src/core/surface/call_test_only.h +64 -0
  287. data/src/core/surface/channel.c +327 -0
  288. data/src/core/surface/channel.h +74 -0
  289. data/src/core/surface/channel_connectivity.c +220 -0
  290. data/src/core/surface/channel_create.c +235 -0
  291. data/src/core/surface/channel_ping.c +79 -0
  292. data/src/core/surface/completion_queue.c +481 -0
  293. data/src/core/surface/completion_queue.h +91 -0
  294. data/src/core/surface/event_string.c +81 -0
  295. data/src/core/surface/event_string.h +42 -0
  296. data/src/core/surface/init.c +168 -0
  297. data/src/core/surface/init.h +40 -0
  298. data/src/core/surface/init_secure.c +42 -0
  299. data/src/core/surface/lame_client.c +149 -0
  300. data/src/core/surface/metadata_array.c +49 -0
  301. data/src/core/surface/secure_channel_create.c +336 -0
  302. data/src/core/surface/server.c +1343 -0
  303. data/src/core/surface/server.h +67 -0
  304. data/src/core/surface/server_chttp2.c +149 -0
  305. data/src/core/surface/server_create.c +51 -0
  306. data/src/core/surface/surface_trace.h +48 -0
  307. data/src/core/surface/validate_metadata.c +73 -0
  308. data/src/core/surface/version.c +39 -0
  309. data/src/core/transport/byte_stream.c +76 -0
  310. data/src/core/transport/byte_stream.h +88 -0
  311. data/src/core/transport/chttp2/alpn.c +56 -0
  312. data/src/core/transport/chttp2/alpn.h +49 -0
  313. data/src/core/transport/chttp2/bin_encoder.c +285 -0
  314. data/src/core/transport/chttp2/bin_encoder.h +54 -0
  315. data/src/core/transport/chttp2/frame.h +69 -0
  316. data/src/core/transport/chttp2/frame_data.c +245 -0
  317. data/src/core/transport/chttp2/frame_data.h +101 -0
  318. data/src/core/transport/chttp2/frame_goaway.c +193 -0
  319. data/src/core/transport/chttp2/frame_goaway.h +77 -0
  320. data/src/core/transport/chttp2/frame_ping.c +97 -0
  321. data/src/core/transport/chttp2/frame_ping.h +56 -0
  322. data/src/core/transport/chttp2/frame_rst_stream.c +100 -0
  323. data/src/core/transport/chttp2/frame_rst_stream.h +55 -0
  324. data/src/core/transport/chttp2/frame_settings.c +259 -0
  325. data/src/core/transport/chttp2/frame_settings.h +103 -0
  326. data/src/core/transport/chttp2/frame_window_update.c +114 -0
  327. data/src/core/transport/chttp2/frame_window_update.h +58 -0
  328. data/src/core/transport/chttp2/hpack_encoder.c +572 -0
  329. data/src/core/transport/chttp2/hpack_encoder.h +95 -0
  330. data/src/core/transport/chttp2/hpack_parser.c +1449 -0
  331. data/src/core/transport/chttp2/hpack_parser.h +116 -0
  332. data/src/core/transport/chttp2/hpack_table.c +361 -0
  333. data/src/core/transport/chttp2/hpack_table.h +108 -0
  334. data/src/core/transport/chttp2/http2_errors.h +56 -0
  335. data/src/core/transport/chttp2/huffsyms.c +297 -0
  336. data/src/core/transport/chttp2/huffsyms.h +48 -0
  337. data/src/core/transport/chttp2/incoming_metadata.c +96 -0
  338. data/src/core/transport/chttp2/incoming_metadata.h +60 -0
  339. data/src/core/transport/chttp2/internal.h +757 -0
  340. data/src/core/transport/chttp2/parsing.c +866 -0
  341. data/src/core/transport/chttp2/status_conversion.c +109 -0
  342. data/src/core/transport/chttp2/status_conversion.h +50 -0
  343. data/src/core/transport/chttp2/stream_lists.c +401 -0
  344. data/src/core/transport/chttp2/stream_map.c +198 -0
  345. data/src/core/transport/chttp2/stream_map.h +85 -0
  346. data/src/core/transport/chttp2/timeout_encoding.c +185 -0
  347. data/src/core/transport/chttp2/timeout_encoding.h +47 -0
  348. data/src/core/transport/chttp2/varint.c +66 -0
  349. data/src/core/transport/chttp2/varint.h +76 -0
  350. data/src/core/transport/chttp2/writing.c +356 -0
  351. data/src/core/transport/chttp2_transport.c +1692 -0
  352. data/src/core/transport/chttp2_transport.h +51 -0
  353. data/src/core/transport/connectivity_state.c +164 -0
  354. data/src/core/transport/connectivity_state.h +85 -0
  355. data/src/core/transport/metadata.c +690 -0
  356. data/src/core/transport/metadata.h +156 -0
  357. data/src/core/transport/metadata_batch.c +194 -0
  358. data/src/core/transport/metadata_batch.h +125 -0
  359. data/src/core/transport/static_metadata.c +90 -0
  360. data/src/core/transport/static_metadata.h +408 -0
  361. data/src/core/transport/transport.c +183 -0
  362. data/src/core/transport/transport.h +222 -0
  363. data/src/core/transport/transport_impl.h +78 -0
  364. data/src/core/transport/transport_op_string.c +140 -0
  365. data/src/core/tsi/fake_transport_security.c +525 -0
  366. data/src/core/tsi/fake_transport_security.h +61 -0
  367. data/src/core/tsi/ssl_transport_security.c +1467 -0
  368. data/src/core/tsi/ssl_transport_security.h +173 -0
  369. data/src/core/tsi/transport_security.c +284 -0
  370. data/src/core/tsi/transport_security.h +111 -0
  371. data/src/core/tsi/transport_security_interface.h +344 -0
  372. data/{bin → src/ruby/bin}/apis/google/protobuf/empty.rb +0 -0
  373. data/{bin → src/ruby/bin}/apis/pubsub_demo.rb +7 -15
  374. data/{bin → src/ruby/bin}/apis/tech/pubsub/proto/pubsub.rb +0 -0
  375. data/{bin → src/ruby/bin}/apis/tech/pubsub/proto/pubsub_services.rb +0 -0
  376. data/{bin → src/ruby/bin}/grpc_ruby_interop_client +0 -0
  377. data/{bin → src/ruby/bin}/grpc_ruby_interop_server +0 -0
  378. data/{bin → src/ruby/bin}/interop/interop_client.rb +0 -0
  379. data/{bin → src/ruby/bin}/interop/interop_server.rb +0 -0
  380. data/src/ruby/bin/math.rb +32 -0
  381. data/{bin → src/ruby/bin}/math_client.rb +1 -1
  382. data/{bin → src/ruby/bin}/math_server.rb +1 -1
  383. data/src/ruby/bin/math_services.rb +27 -0
  384. data/{bin → src/ruby/bin}/noproto_client.rb +1 -1
  385. data/{bin → src/ruby/bin}/noproto_server.rb +1 -1
  386. data/{ext → src/ruby/ext}/grpc/extconf.rb +24 -40
  387. data/{ext → src/ruby/ext}/grpc/rb_byte_buffer.c +0 -0
  388. data/{ext → src/ruby/ext}/grpc/rb_byte_buffer.h +0 -0
  389. data/{ext → src/ruby/ext}/grpc/rb_call.c +80 -18
  390. data/{ext → src/ruby/ext}/grpc/rb_call.h +6 -0
  391. data/src/ruby/ext/grpc/rb_call_credentials.c +315 -0
  392. data/src/ruby/ext/grpc/rb_call_credentials.h +46 -0
  393. data/{ext → src/ruby/ext}/grpc/rb_channel.c +19 -7
  394. data/{ext → src/ruby/ext}/grpc/rb_channel.h +0 -0
  395. data/{ext → src/ruby/ext}/grpc/rb_channel_args.c +2 -0
  396. data/{ext → src/ruby/ext}/grpc/rb_channel_args.h +0 -0
  397. data/src/ruby/ext/grpc/rb_channel_credentials.c +266 -0
  398. data/{ext/grpc/rb_credentials.h → src/ruby/ext/grpc/rb_channel_credentials.h} +3 -3
  399. data/{ext → src/ruby/ext}/grpc/rb_completion_queue.c +3 -1
  400. data/{ext → src/ruby/ext}/grpc/rb_completion_queue.h +0 -0
  401. data/src/ruby/ext/grpc/rb_event_thread.c +153 -0
  402. data/src/ruby/ext/grpc/rb_event_thread.h +37 -0
  403. data/{ext → src/ruby/ext}/grpc/rb_grpc.c +25 -5
  404. data/{ext → src/ruby/ext}/grpc/rb_grpc.h +0 -0
  405. data/{ext → src/ruby/ext}/grpc/rb_server.c +4 -1
  406. data/{ext → src/ruby/ext}/grpc/rb_server.h +0 -0
  407. data/{ext → src/ruby/ext}/grpc/rb_server_credentials.c +2 -0
  408. data/{ext → src/ruby/ext}/grpc/rb_server_credentials.h +0 -0
  409. data/{lib → src/ruby/lib}/grpc.rb +6 -1
  410. data/{lib → src/ruby/lib}/grpc/core/time_consts.rb +0 -0
  411. data/{lib → src/ruby/lib}/grpc/errors.rb +0 -0
  412. data/{lib → src/ruby/lib}/grpc/generic/active_call.rb +4 -6
  413. data/{lib → src/ruby/lib}/grpc/generic/bidi_call.rb +16 -4
  414. data/{lib → src/ruby/lib}/grpc/generic/client_stub.rb +42 -52
  415. data/{lib → src/ruby/lib}/grpc/generic/rpc_desc.rb +0 -0
  416. data/{lib → src/ruby/lib}/grpc/generic/rpc_server.rb +15 -8
  417. data/{lib → src/ruby/lib}/grpc/generic/service.rb +4 -2
  418. data/src/ruby/lib/grpc/grpc.so +0 -0
  419. data/{lib → src/ruby/lib}/grpc/logconfig.rb +0 -0
  420. data/{lib → src/ruby/lib}/grpc/notifier.rb +0 -0
  421. data/{lib → src/ruby/lib}/grpc/version.rb +2 -2
  422. data/src/ruby/pb/README.md +42 -0
  423. data/src/ruby/pb/generate_proto_ruby.sh +51 -0
  424. data/src/ruby/pb/grpc/health/checker.rb +75 -0
  425. data/src/ruby/pb/grpc/health/v1alpha/health.rb +29 -0
  426. data/src/ruby/pb/grpc/health/v1alpha/health_services.rb +28 -0
  427. data/src/ruby/pb/test/client.rb +469 -0
  428. data/src/ruby/pb/test/proto/empty.rb +15 -0
  429. data/src/ruby/pb/test/proto/messages.rb +80 -0
  430. data/src/ruby/pb/test/proto/test.rb +14 -0
  431. data/src/ruby/pb/test/proto/test_services.rb +64 -0
  432. data/src/ruby/pb/test/server.rb +253 -0
  433. data/{bin/math_services.rb → src/ruby/spec/call_credentials_spec.rb} +19 -18
  434. data/{spec → src/ruby/spec}/call_spec.rb +10 -1
  435. data/{spec/credentials_spec.rb → src/ruby/spec/channel_credentials_spec.rb} +38 -12
  436. data/{spec → src/ruby/spec}/channel_spec.rb +14 -9
  437. data/{spec → src/ruby/spec}/client_server_spec.rb +31 -2
  438. data/{spec → src/ruby/spec}/completion_queue_spec.rb +0 -0
  439. data/{spec → src/ruby/spec}/generic/active_call_spec.rb +2 -1
  440. data/{spec → src/ruby/spec}/generic/client_stub_spec.rb +27 -67
  441. data/{spec → src/ruby/spec}/generic/rpc_desc_spec.rb +0 -0
  442. data/{spec → src/ruby/spec}/generic/rpc_server_pool_spec.rb +0 -0
  443. data/{spec → src/ruby/spec}/generic/rpc_server_spec.rb +12 -46
  444. data/{spec → src/ruby/spec}/generic/service_spec.rb +6 -3
  445. data/{spec → src/ruby/spec}/pb/health/checker_spec.rb +8 -8
  446. data/{spec → src/ruby/spec}/server_credentials_spec.rb +0 -0
  447. data/{spec → src/ruby/spec}/server_spec.rb +0 -0
  448. data/{spec → src/ruby/spec}/spec_helper.rb +0 -0
  449. data/{spec → src/ruby/spec}/testdata/README +0 -0
  450. data/{spec → src/ruby/spec}/testdata/ca.pem +0 -0
  451. data/{spec → src/ruby/spec}/testdata/server1.key +0 -0
  452. data/src/ruby/spec/testdata/server1.pem +16 -0
  453. data/{spec → src/ruby/spec}/time_consts_spec.rb +0 -0
  454. metadata +496 -97
  455. data/bin/math.proto +0 -80
  456. data/bin/math.rb +0 -61
  457. data/ext/grpc/rb_credentials.c +0 -294
  458. data/lib/grpc/grpc.so +0 -0
  459. data/spec/testdata/server1.pem +0 -16
@@ -0,0 +1,120 @@
1
+ /*
2
+ *
3
+ * Copyright 2015, Google Inc.
4
+ * All rights reserved.
5
+ *
6
+ * Redistribution and use in source and binary forms, with or without
7
+ * modification, are permitted provided that the following conditions are
8
+ * met:
9
+ *
10
+ * * Redistributions of source code must retain the above copyright
11
+ * notice, this list of conditions and the following disclaimer.
12
+ * * Redistributions in binary form must reproduce the above
13
+ * copyright notice, this list of conditions and the following disclaimer
14
+ * in the documentation and/or other materials provided with the
15
+ * distribution.
16
+ * * Neither the name of Google Inc. nor the names of its
17
+ * contributors may be used to endorse or promote products derived from
18
+ * this software without specific prior written permission.
19
+ *
20
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ *
32
+ */
33
+
34
+ #ifndef GRPC_BYTE_BUFFER_H
35
+ #define GRPC_BYTE_BUFFER_H
36
+
37
+ #include <grpc/compression.h>
38
+ #include <grpc/support/slice_buffer.h>
39
+
40
+ #ifdef __cplusplus
41
+ extern "C" {
42
+ #endif
43
+
44
+ typedef enum {
45
+ GRPC_BB_RAW
46
+ /* Future types may include GRPC_BB_PROTOBUF, etc. */
47
+ } grpc_byte_buffer_type;
48
+
49
+ struct grpc_byte_buffer {
50
+ void *reserved;
51
+ grpc_byte_buffer_type type;
52
+ union {
53
+ struct {
54
+ void *reserved[8];
55
+ } reserved;
56
+ struct {
57
+ grpc_compression_algorithm compression;
58
+ gpr_slice_buffer slice_buffer;
59
+ } raw;
60
+ } data;
61
+ };
62
+ typedef struct grpc_byte_buffer grpc_byte_buffer;
63
+
64
+ /** Returns a RAW byte buffer instance over the given slices (up to \a nslices).
65
+ *
66
+ * Increases the reference count for all \a slices processed. The user is
67
+ * responsible for invoking grpc_byte_buffer_destroy on the returned instance.*/
68
+ grpc_byte_buffer *grpc_raw_byte_buffer_create(gpr_slice *slices,
69
+ size_t nslices);
70
+
71
+ /** Returns a *compressed* RAW byte buffer instance over the given slices (up to
72
+ * \a nslices). The \a compression argument defines the compression algorithm
73
+ * used to generate the data in \a slices.
74
+ *
75
+ * Increases the reference count for all \a slices processed. The user is
76
+ * responsible for invoking grpc_byte_buffer_destroy on the returned instance.*/
77
+ grpc_byte_buffer *grpc_raw_compressed_byte_buffer_create(
78
+ gpr_slice *slices, size_t nslices, grpc_compression_algorithm compression);
79
+
80
+ /** Copies input byte buffer \a bb.
81
+ *
82
+ * Increases the reference count of all the source slices. The user is
83
+ * responsible for calling grpc_byte_buffer_destroy over the returned copy. */
84
+ grpc_byte_buffer *grpc_byte_buffer_copy(grpc_byte_buffer *bb);
85
+
86
+ /** Returns the size of the given byte buffer, in bytes. */
87
+ size_t grpc_byte_buffer_length(grpc_byte_buffer *bb);
88
+
89
+ /** Destroys \a byte_buffer deallocating all its memory. */
90
+ void grpc_byte_buffer_destroy(grpc_byte_buffer *byte_buffer);
91
+
92
+ /** Reader for byte buffers. Iterates over slices in the byte buffer */
93
+ struct grpc_byte_buffer_reader;
94
+ typedef struct grpc_byte_buffer_reader grpc_byte_buffer_reader;
95
+
96
+ /** Initialize \a reader to read over \a buffer */
97
+ void grpc_byte_buffer_reader_init(grpc_byte_buffer_reader *reader,
98
+ grpc_byte_buffer *buffer);
99
+
100
+ /** Cleanup and destroy \a reader */
101
+ void grpc_byte_buffer_reader_destroy(grpc_byte_buffer_reader *reader);
102
+
103
+ /** Updates \a slice with the next piece of data from from \a reader and returns
104
+ * 1. Returns 0 at the end of the stream. Caller is responsible for calling
105
+ * gpr_slice_unref on the result. */
106
+ int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader *reader,
107
+ gpr_slice *slice);
108
+
109
+ /** Merge all data from \a reader into single slice */
110
+ gpr_slice grpc_byte_buffer_reader_readall(grpc_byte_buffer_reader *reader);
111
+
112
+ /** Returns a RAW byte buffer instance from the output of \a reader. */
113
+ grpc_byte_buffer *grpc_raw_byte_buffer_from_reader(
114
+ grpc_byte_buffer_reader *reader);
115
+
116
+ #ifdef __cplusplus
117
+ }
118
+ #endif
119
+
120
+ #endif /* GRPC_BYTE_BUFFER_H */
@@ -0,0 +1,58 @@
1
+ /*
2
+ *
3
+ * Copyright 2015, Google Inc.
4
+ * All rights reserved.
5
+ *
6
+ * Redistribution and use in source and binary forms, with or without
7
+ * modification, are permitted provided that the following conditions are
8
+ * met:
9
+ *
10
+ * * Redistributions of source code must retain the above copyright
11
+ * notice, this list of conditions and the following disclaimer.
12
+ * * Redistributions in binary form must reproduce the above
13
+ * copyright notice, this list of conditions and the following disclaimer
14
+ * in the documentation and/or other materials provided with the
15
+ * distribution.
16
+ * * Neither the name of Google Inc. nor the names of its
17
+ * contributors may be used to endorse or promote products derived from
18
+ * this software without specific prior written permission.
19
+ *
20
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ *
32
+ */
33
+
34
+ #ifndef GRPC_BYTE_BUFFER_READER_H
35
+ #define GRPC_BYTE_BUFFER_READER_H
36
+
37
+ #include <grpc/grpc.h>
38
+ #include <grpc/byte_buffer.h>
39
+
40
+ #ifdef __cplusplus
41
+ extern "C" {
42
+ #endif
43
+
44
+ struct grpc_byte_buffer_reader {
45
+ grpc_byte_buffer *buffer_in;
46
+ grpc_byte_buffer *buffer_out;
47
+ /* Different current objects correspond to different types of byte buffers */
48
+ union {
49
+ /* Index into a slice buffer's array of slices */
50
+ unsigned index;
51
+ } current;
52
+ };
53
+
54
+ #ifdef __cplusplus
55
+ }
56
+ #endif
57
+
58
+ #endif /* GRPC_BYTE_BUFFER_READER_H */
@@ -0,0 +1,488 @@
1
+ /*
2
+ *
3
+ * Copyright 2015, Google Inc.
4
+ * All rights reserved.
5
+ *
6
+ * Redistribution and use in source and binary forms, with or without
7
+ * modification, are permitted provided that the following conditions are
8
+ * met:
9
+ *
10
+ * * Redistributions of source code must retain the above copyright
11
+ * notice, this list of conditions and the following disclaimer.
12
+ * * Redistributions in binary form must reproduce the above
13
+ * copyright notice, this list of conditions and the following disclaimer
14
+ * in the documentation and/or other materials provided with the
15
+ * distribution.
16
+ * * Neither the name of Google Inc. nor the names of its
17
+ * contributors may be used to endorse or promote products derived from
18
+ * this software without specific prior written permission.
19
+ *
20
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ *
32
+ */
33
+
34
+ /* RPC-internal Census API's. These are designed to be generic enough that
35
+ * they can (ultimately) be used in many different RPC systems (with differing
36
+ * implementations). */
37
+
38
+ #ifndef CENSUS_CENSUS_H
39
+ #define CENSUS_CENSUS_H
40
+
41
+ #include <grpc/grpc.h>
42
+
43
+ #ifdef __cplusplus
44
+ extern "C" {
45
+ #endif
46
+
47
+ /* Identify census features that can be enabled via census_initialize(). */
48
+ enum census_features {
49
+ CENSUS_FEATURE_NONE = 0, /* Do not enable census. */
50
+ CENSUS_FEATURE_TRACING = 1, /* Enable census tracing. */
51
+ CENSUS_FEATURE_STATS = 2, /* Enable Census stats collection. */
52
+ CENSUS_FEATURE_CPU = 4, /* Enable Census CPU usage collection. */
53
+ CENSUS_FEATURE_ALL =
54
+ CENSUS_FEATURE_TRACING | CENSUS_FEATURE_STATS | CENSUS_FEATURE_CPU
55
+ };
56
+
57
+ /** Shutdown and startup census subsystem. The 'features' argument should be
58
+ * the OR (|) of census_features values. If census fails to initialize, then
59
+ * census_initialize() will return a non-zero value. It is an error to call
60
+ * census_initialize() more than once (without an intervening
61
+ * census_shutdown()). */
62
+ int census_initialize(int features);
63
+ void census_shutdown(void);
64
+
65
+ /** Return the features supported by the current census implementation (not all
66
+ * features will be available on all platforms). */
67
+ int census_supported(void);
68
+
69
+ /** Return the census features currently enabled. */
70
+ int census_enabled(void);
71
+
72
+ /**
73
+ Context is a handle used by census to represent the current tracing and
74
+ tagging information. Contexts should be propagated across RPC's. Contexts
75
+ are created by any of the census_start_*_op() functions. A context is
76
+ typically used as argument to most census functions. Conceptually, contexts
77
+ should be thought of as specific to single RPC/thread. The context can be
78
+ serialized for passing across the wire, via census_context_serialize().
79
+ */
80
+ typedef struct census_context census_context;
81
+
82
+ /* This function is called by the RPC subsystem whenever it needs to get a
83
+ * serialized form of the current census context (presumably to pass across
84
+ * the wire). Arguments:
85
+ * 'buffer': pointer to memory into which serialized context will be placed
86
+ * 'buf_size': size of 'buffer'
87
+ *
88
+ * Returns: the number of bytes used in buffer if successful, or 0 if the
89
+ * buffer is of insufficient size.
90
+ *
91
+ * TODO(aveitch): determine how best to communicate required/max buffer size
92
+ * so caller doesn't have to guess. */
93
+ size_t census_context_serialize(const census_context *context, char *buffer,
94
+ size_t buf_size);
95
+
96
+ /* Distributed traces can have a number of options. */
97
+ enum census_trace_mask_values {
98
+ CENSUS_TRACE_MASK_NONE = 0, /* Default, empty flags */
99
+ CENSUS_TRACE_MASK_IS_SAMPLED = 1 /* RPC tracing enabled for this context. */
100
+ };
101
+
102
+ /** Get the current trace mask associated with this context. The value returned
103
+ will be the logical or of census_trace_mask_values values. */
104
+ int census_trace_mask(const census_context *context);
105
+
106
+ /** Set the trace mask associated with a context. */
107
+ void census_set_trace_mask(int trace_mask);
108
+
109
+ /* The concept of "operation" is a fundamental concept for Census. In an RPC
110
+ system, and operation typcially represents a single RPC, or a significant
111
+ sub-part thereof (e.g. a single logical "read" RPC to a distributed storage
112
+ system might do several other actions in parallel, from looking up metadata
113
+ indices to making requests of other services - each of these could be a
114
+ sub-operation with the larger RPC operation). Census uses operations for the
115
+ following:
116
+
117
+ CPU accounting: If enabled, census will measure the thread CPU time
118
+ consumed between operation start and end times.
119
+
120
+ Active operations: Census will maintain information on all currently
121
+ active operations.
122
+
123
+ Distributed tracing: Each operation serves as a logical trace span.
124
+
125
+ Stats collection: Stats are broken down by operation (e.g. latency
126
+ breakdown for each unique RPC path).
127
+
128
+ The following functions serve to delineate the start and stop points for
129
+ each logical operation. */
130
+
131
+ /**
132
+ This structure represents a timestamp as used by census to record the time
133
+ at which an operation begins.
134
+ */
135
+ typedef struct {
136
+ /* Use gpr_timespec for default implementation. High performance
137
+ * implementations should use a cycle-counter based timestamp. */
138
+ gpr_timespec ts;
139
+ } census_timestamp;
140
+
141
+ /**
142
+ Mark the beginning of an RPC operation. The information required to call the
143
+ functions to record the start of RPC operations (both client and server) may
144
+ not be callable at the true start time of the operation, due to information
145
+ not being available (e.g. the census context data will not be available in a
146
+ server RPC until at least initial metadata has been processed). To ensure
147
+ correct CPU accounting and latency recording, RPC systems can call this
148
+ function to get the timestamp of operation beginning. This can later be used
149
+ as an argument to census_start_{client,server}_rpc_op(). NB: for correct
150
+ CPU accounting, the system must guarantee that the same thread is used
151
+ for all request processing after this function is called.
152
+
153
+ @return A timestamp representing the operation start time.
154
+ */
155
+ census_timestamp census_start_rpc_op_timestamp(void);
156
+
157
+ /**
158
+ Represent functions to map RPC name ID to service/method names. Census
159
+ breaks down all RPC stats by service and method names. We leave the
160
+ definition and format of these to the RPC system. For efficiency purposes,
161
+ we encode these as a single 64 bit identifier, and allow the RPC system to
162
+ provide a structure for functions that can convert these to service and
163
+ method strings.
164
+
165
+ TODO(aveitch): Instead of providing this as an argument to the rpc_start_op()
166
+ functions, maybe it should be set once at census initialization.
167
+ */
168
+ typedef struct {
169
+ const char *(*get_rpc_service_name)(gpr_int64 id);
170
+ const char *(*get_rpc_method_name)(gpr_int64 id);
171
+ } census_rpc_name_info;
172
+
173
+ /**
174
+ Start a client rpc operation. This function should be called as early in the
175
+ client RPC path as possible. This function will create a new context. If
176
+ the context argument is non-null, then the new context will inherit all
177
+ its properties, with the following changes:
178
+ - create a new operation ID for the new context, marking it as a child of
179
+ the previous operation.
180
+ - use the new RPC path and peer information for tracing and stats
181
+ collection purposes, rather than those from the original context
182
+
183
+ If the context argument is NULL, then a new root context is created. This
184
+ is particularly important for tracing purposes (the trace spans generated
185
+ will be unassociated with any other trace spans, except those
186
+ downstream). The trace_mask will be used for tracing operations associated
187
+ with the new context.
188
+
189
+ In some RPC systems (e.g. where load balancing is used), peer information
190
+ may not be available at the time the operation starts. In this case, use a
191
+ NULL value for peer, and set it later using the
192
+ census_set_rpc_client_peer() function.
193
+
194
+ @param context The parent context. Can be NULL.
195
+ @param rpc_name_id The rpc name identifier to be associated with this RPC.
196
+ @param rpc_name_info Used to decode rpc_name_id.
197
+ @param peer RPC peer. If not available at the time, NULL can be used,
198
+ and a later census_set_rpc_client_peer() call made.
199
+ @param trace_mask An OR of census_trace_mask_values values. Only used in
200
+ the creation of a new root context (context == NULL).
201
+ @param start_time A timestamp returned from census_start_rpc_op_timestamp().
202
+ Can be NULL. Used to set the true time the operation
203
+ begins.
204
+
205
+ @return A new census context.
206
+ */
207
+ census_context *census_start_client_rpc_op(
208
+ const census_context *context, gpr_int64 rpc_name_id,
209
+ const census_rpc_name_info *rpc_name_info, const char *peer, int trace_mask,
210
+ const census_timestamp *start_time);
211
+
212
+ /**
213
+ Add peer information to a context representing a client RPC operation.
214
+ */
215
+ void census_set_rpc_client_peer(census_context *context, const char *peer);
216
+
217
+ /**
218
+ Start a server RPC operation. Returns a new context to be used in future
219
+ census calls. If buffer is non-NULL, then the buffer contents should
220
+ represent the client context, as generated by census_context_serialize().
221
+ If buffer is NULL, a new root context is created.
222
+
223
+ @param buffer Buffer containing bytes output from census_context_serialize().
224
+ @param rpc_name_id The rpc name identifier to be associated with this RPC.
225
+ @param rpc_name_info Used to decode rpc_name_id.
226
+ @param peer RPC peer.
227
+ @param trace_mask An OR of census_trace_mask_values values. Only used in
228
+ the creation of a new root context (buffer == NULL).
229
+ @param start_time A timestamp returned from census_start_rpc_op_timestamp().
230
+ Can be NULL. Used to set the true time the operation
231
+ begins.
232
+
233
+ @return A new census context.
234
+ */
235
+ census_context *census_start_server_rpc_op(
236
+ const char *buffer, gpr_int64 rpc_name_id,
237
+ const census_rpc_name_info *rpc_name_info, const char *peer, int trace_mask,
238
+ census_timestamp *start_time);
239
+
240
+ /**
241
+ Start a new, non-RPC operation. In general, this function works very
242
+ similarly to census_start_client_rpc_op, with the primary difference being
243
+ the replacement of host/path information with the more generic family/name
244
+ tags. If the context argument is non-null, then the new context will
245
+ inherit all its properties, with the following changes:
246
+ - create a new operation ID for the new context, marking it as a child of
247
+ the previous operation.
248
+ - use the family and name information for tracing and stats collection
249
+ purposes, rather than those from the original context
250
+
251
+ If the context argument is NULL, then a new root context is created. This
252
+ is particularly important for tracing purposes (the trace spans generated
253
+ will be unassociated with any other trace spans, except those
254
+ downstream). The trace_mask will be used for tracing
255
+ operations associated with the new context.
256
+
257
+ @param context The base context. Can be NULL.
258
+ @param family Family name to associate with the trace
259
+ @param name Name within family to associated with traces/stats
260
+ @param trace_mask An OR of census_trace_mask_values values. Only used if
261
+ context is NULL.
262
+
263
+ @return A new census context.
264
+ */
265
+ census_context *census_start_op(census_context *context, const char *family,
266
+ const char *name, int trace_mask);
267
+
268
+ /**
269
+ End an operation started by any of the census_start_*_op*() calls. The
270
+ context used in this call will no longer be valid once this function
271
+ completes.
272
+
273
+ @param context Context associated with operation which is ending.
274
+ @param status status associated with the operation. Not interpreted by
275
+ census.
276
+ */
277
+ void census_end_op(census_context *context, int status);
278
+
279
+ #define CENSUS_TRACE_RECORD_START_OP ((gpr_uint32)0)
280
+ #define CENSUS_TRACE_RECORD_END_OP ((gpr_uint32)1)
281
+
282
+ /** Insert a trace record into the trace stream. The record consists of an
283
+ arbitrary size buffer, the size of which is provided in 'n'.
284
+ @param context Trace context
285
+ @param type User-defined type to associate with trace entry.
286
+ @param buffer Pointer to buffer to use
287
+ @param n Number of bytes in buffer
288
+ */
289
+ void census_trace_print(census_context *context, gpr_uint32 type,
290
+ const char *buffer, size_t n);
291
+
292
+ /** Trace record. */
293
+ typedef struct {
294
+ census_timestamp timestamp; /* Time of record creation */
295
+ gpr_uint64 trace_id; /* Trace ID associated with record */
296
+ gpr_uint64 op_id; /* Operation ID associated with record */
297
+ gpr_uint32 type; /* Type (as used in census_trace_print() */
298
+ const char *buffer; /* Buffer (from census_trace_print() */
299
+ size_t buf_size; /* Number of bytes inside buffer */
300
+ } census_trace_record;
301
+
302
+ /** Start a scan of existing trace records. While a scan is ongoing, addition
303
+ of new trace records will be blocked if the underlying trace buffers
304
+ fill up, so trace processing systems should endeavor to complete
305
+ reading as soon as possible.
306
+ @param consume if non-zero, indicates that reading records also "consumes"
307
+ the previously read record - i.e. releases space in the trace log
308
+ while scanning is ongoing.
309
+ @returns 0 on success, non-zero on failure (e.g. if a scan is already ongoing)
310
+ */
311
+ int census_trace_scan_start(int consume);
312
+
313
+ /** Get a trace record. The data pointed to by the trace buffer is guaranteed
314
+ stable until the next census_get_trace_record() call (if the consume
315
+ argument to census_trace_scan_start was non-zero) or census_trace_scan_end()
316
+ is called (otherwise).
317
+ @param trace_record structure that will be filled in with oldest trace record.
318
+ @returns -1 if an error occurred (e.g. no previous call to
319
+ census_trace_scan_start()), 0 if there is no more trace data (and
320
+ trace_record will not be modified) or 1 otherwise.
321
+ */
322
+ int census_get_trace_record(census_trace_record *trace_record);
323
+
324
+ /** End a scan previously started by census_trace_scan_start() */
325
+ void census_trace_scan_end();
326
+
327
+ /* Max number of characters in tag key */
328
+ #define CENSUS_MAX_TAG_KEY_LENGTH 20
329
+ /* Max number of tag value characters */
330
+ #define CENSUS_MAX_TAG_VALUE_LENGTH 50
331
+
332
+ /* A Census tag set is a collection of key:value string pairs; these form the
333
+ basis against which Census metrics will be recorded. Keys are unique within
334
+ a tag set. All contexts have an associated tag set. */
335
+ typedef struct census_tag_set census_tag_set;
336
+
337
+ /* Returns a pointer to a newly created, empty tag set. If size_hint > 0,
338
+ indicates that the tag set is intended to hold approximately that number
339
+ of tags. */
340
+ census_tag_set *census_tag_set_create(size_t size_hint);
341
+
342
+ /* Add a new tag key/value to an existing tag set; if the tag key already exists
343
+ in the tag set, then its value is overwritten with the new one. Can also be
344
+ used to delete a tag, by specifying a NULL value. If key is NULL, returns
345
+ the number of tags in the tag set.
346
+ Return values:
347
+ -1: invalid length key or value
348
+ non-negative value: the number of tags in the tag set. */
349
+ int census_tag_set_add(census_tag_set *tags, const char *key,
350
+ const char *value);
351
+
352
+ /* Destroys a tag set. This function must be called to prevent memory leaks.
353
+ Once called, the tag set cannot be used again. */
354
+ void census_tag_set_destroy(census_tag_set *tags);
355
+
356
+ /* Get a contexts tag set. */
357
+ census_tag_set *census_context_tag_set(census_context *context);
358
+
359
+ /* A read-only representation of a tag for use by census clients. */
360
+ typedef struct {
361
+ size_t key_len; /* Number of bytes in tag key. */
362
+ const char *key; /* A pointer to the tag key. May not be null-terminated. */
363
+ size_t value_len; /* Number of bytes in tag value. */
364
+ const char *value; /* Pointer to the tag value. May not be null-terminated. */
365
+ } census_tag_const;
366
+
367
+ /* Used to iterate through a tag sets contents. */
368
+ typedef struct census_tag_set_iterator census_tag_set_iterator;
369
+
370
+ /* Open a tag set for iteration. The tag set must not be modified while
371
+ iteration is ongoing. Returns an iterator for use in following functions. */
372
+ census_tag_set_iterator *census_tag_set_open(census_tag_set *tags);
373
+
374
+ /* Get the next tag in the tag set, by writing into the 'tag' argument. Returns
375
+ 1 if there is a "next" tag, 0 if there are no more tags. */
376
+ int census_tag_set_next(census_tag_set_iterator *it, census_tag_const *tag);
377
+
378
+ /* Close an iterator opened by census_tag_set_open(). The iterator will be
379
+ invalidated, and should not be used once close is called. */
380
+ void census_tag_set_close(census_tag_set_iterator *it);
381
+
382
+ /* Core stats collection API's. The following concepts are used:
383
+ * Aggregation: A collection of values. Census supports the following
384
+ aggregation types:
385
+ Sum - a single summation type. Typically used for keeping (e.g.)
386
+ counts of events.
387
+ Distribution - statistical distribution information, used for
388
+ recording average, standard deviation etc.
389
+ Histogram - a histogram of measurements falling in defined bucket
390
+ boundaries.
391
+ Window - a count of events that happen in reolling time window.
392
+ New aggregation types can be added by the user, if desired (see
393
+ census_register_aggregation()).
394
+ * Metric: Each measurement is for a single metric. Examples include RPC
395
+ latency, CPU seconds consumed, and bytes transmitted.
396
+ * View: A view is a combination of a metric, a tag set (in which the tag
397
+ values are regular expressions) and a set of aggregations. When a
398
+ measurement for a metric matches the view tags, it is recorded (for each
399
+ unique set of tags) against each aggregation. Each metric can have an
400
+ arbitrary number of views by which it will be broken down.
401
+ */
402
+
403
+ /* A single value to be recorded comprises two parts: an ID for the particular
404
+ * metric and the value to be recorded against it. */
405
+ typedef struct {
406
+ gpr_uint32 metric_id;
407
+ double value;
408
+ } census_value;
409
+
410
+ /* Record new usage values against the given context. */
411
+ void census_record_values(census_context *context, census_value *values,
412
+ size_t nvalues);
413
+
414
+ /** Type representing a particular aggregation */
415
+ typedef struct census_aggregation_ops census_aggregation_ops;
416
+
417
+ /* Predefined aggregation types, for use with census_view_create(). */
418
+ extern census_aggregation_ops census_agg_sum;
419
+ extern census_aggregation_ops census_agg_distribution;
420
+ extern census_aggregation_ops census_agg_histogram;
421
+ extern census_aggregation_ops census_agg_window;
422
+
423
+ /** Information needed to instantiate a new aggregation. Used in view
424
+ construction via census_define_view(). */
425
+ typedef struct {
426
+ const census_aggregation_ops *ops;
427
+ const void *
428
+ create_arg; /* Argument to be used for aggregation initialization. */
429
+ } census_aggregation;
430
+
431
+ /** A census view type. Opaque. */
432
+ typedef struct census_view census_view;
433
+
434
+ /** Create a new view.
435
+ @param metric_id Metric with which this view is associated.
436
+ @param tags tags that define the view
437
+ @param aggregations aggregations to associate with the view
438
+ @param naggregations number of aggregations
439
+
440
+ @return A new census view
441
+ */
442
+ census_view *census_view_create(gpr_uint32 metric_id,
443
+ const census_tag_set *tags,
444
+ const census_aggregation *aggregations,
445
+ size_t naggregations);
446
+
447
+ /** Destroy a previously created view. */
448
+ void census_view_delete(census_view *view);
449
+
450
+ /** Metric ID associated with a view */
451
+ size_t census_view_metric(const census_view *view);
452
+
453
+ /** Number of aggregations associated with view. */
454
+ size_t census_view_naggregations(const census_view *view);
455
+
456
+ /** Get tags associated with view. */
457
+ const census_tag_set *census_view_tags(const census_view *view);
458
+
459
+ /** Get aggregation descriptors associated with a view. */
460
+ const census_aggregation *census_view_aggregrations(const census_view *view);
461
+
462
+ /** Holds all the aggregation data for a particular view instantiation. Forms
463
+ part of the data returned by census_view_data(). */
464
+ typedef struct {
465
+ const census_tag_set *tags; /* Tags for this set of aggregations. */
466
+ const void **data; /* One data set for every aggregation in the view. */
467
+ } census_view_aggregation_data;
468
+
469
+ /** Census view data as returned by census_view_get_data(). */
470
+ typedef struct {
471
+ size_t n_tag_sets; /* Number of unique tag sets that matched view. */
472
+ const census_view_aggregation_data *data; /* n_tag_sets entries */
473
+ } census_view_data;
474
+
475
+ /** Get data from aggregations associated with a view.
476
+ @param view View from which to get data.
477
+ @return Full set of data for all aggregations for the view.
478
+ */
479
+ const census_view_data *census_view_get_data(const census_view *view);
480
+
481
+ /** Reset all view data to zero for the specified view */
482
+ void census_view_reset(census_view *view);
483
+
484
+ #ifdef __cplusplus
485
+ }
486
+ #endif
487
+
488
+ #endif /* CENSUS_CENSUS_H */