grpc 1.18.0 → 1.22.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (428) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +4731 -7404
  3. data/etc/roots.pem +146 -0
  4. data/include/grpc/grpc.h +11 -6
  5. data/include/grpc/grpc_security.h +297 -4
  6. data/include/grpc/grpc_security_constants.h +1 -1
  7. data/include/grpc/impl/codegen/byte_buffer.h +13 -0
  8. data/include/grpc/impl/codegen/gpr_types.h +1 -1
  9. data/include/grpc/impl/codegen/grpc_types.h +30 -7
  10. data/include/grpc/impl/codegen/port_platform.h +88 -7
  11. data/include/grpc/impl/codegen/slice.h +2 -22
  12. data/include/grpc/impl/codegen/status.h +2 -1
  13. data/include/grpc/impl/codegen/sync_posix.h +18 -0
  14. data/include/grpc/slice.h +3 -3
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +21 -16
  16. data/src/core/ext/filters/client_channel/backup_poller.h +8 -2
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +3 -1
  18. data/src/core/ext/filters/client_channel/client_channel.cc +2435 -1557
  19. data/src/core/ext/filters/client_channel/client_channel.h +2 -10
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -89
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +8 -33
  22. data/src/core/ext/filters/client_channel/client_channel_factory.cc +22 -34
  23. data/src/core/ext/filters/client_channel/client_channel_factory.h +19 -38
  24. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -11
  25. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +179 -0
  26. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +68 -0
  27. data/src/core/ext/filters/client_channel/health/health_check_client.cc +59 -55
  28. data/src/core/ext/filters/client_channel/health/health_check_client.h +20 -9
  29. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +146 -157
  30. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +29 -32
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +844 -859
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +3 -1
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +2 -6
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +6 -2
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +14 -12
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +16 -12
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +3 -3
  39. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +185 -312
  40. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +143 -375
  41. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +192 -245
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +1554 -955
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc +0 -43
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +14 -10
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +2 -2
  46. data/src/core/ext/filters/client_channel/lb_policy.cc +115 -22
  47. data/src/core/ext/filters/client_channel/lb_policy.h +260 -129
  48. data/src/core/ext/filters/client_channel/lb_policy_factory.h +5 -2
  49. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +107 -4
  50. data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -3
  51. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +96 -0
  52. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +56 -0
  53. data/src/core/ext/filters/client_channel/parse_address.cc +24 -5
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +121 -122
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +84 -2
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +179 -0
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +24 -10
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +111 -47
  60. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +7 -13
  61. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +39 -0
  63. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +0 -6
  64. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -64
  65. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +28 -0
  66. data/src/core/{lib/iomgr/network_status_tracker.cc → ext/filters/client_channel/resolver/dns/dns_resolver_selection.h} +8 -15
  67. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +36 -82
  68. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +111 -72
  69. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +13 -8
  70. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +28 -63
  71. data/src/core/ext/filters/client_channel/resolver.cc +54 -1
  72. data/src/core/ext/filters/client_channel/resolver.h +52 -23
  73. data/src/core/ext/filters/client_channel/resolver_factory.h +3 -1
  74. data/src/core/ext/filters/client_channel/resolver_registry.cc +5 -2
  75. data/src/core/ext/filters/client_channel/resolver_registry.h +5 -4
  76. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +368 -241
  77. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +58 -76
  78. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +543 -0
  79. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +139 -0
  80. data/src/core/ext/filters/client_channel/server_address.cc +4 -54
  81. data/src/core/ext/filters/client_channel/server_address.h +1 -13
  82. data/src/core/ext/filters/client_channel/service_config.cc +329 -0
  83. data/src/core/ext/filters/client_channel/service_config.h +205 -0
  84. data/src/core/ext/filters/client_channel/subchannel.cc +803 -838
  85. data/src/core/ext/filters/client_channel/subchannel.h +295 -128
  86. data/src/core/ext/filters/client_channel/subchannel_interface.h +113 -0
  87. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +97 -0
  88. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +94 -0
  89. data/src/core/ext/filters/deadline/deadline_filter.cc +3 -4
  90. data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
  91. data/src/core/ext/filters/http/client/http_client_filter.cc +7 -5
  92. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  93. data/src/core/ext/filters/http/client_authority_filter.cc +6 -3
  94. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +4 -3
  95. data/src/core/ext/filters/http/server/http_server_filter.cc +18 -12
  96. data/src/core/ext/filters/max_age/max_age_filter.cc +5 -2
  97. data/src/core/ext/filters/message_size/message_size_filter.cc +119 -77
  98. data/src/core/ext/filters/message_size/message_size_filter.h +33 -0
  99. data/src/core/ext/transport/chttp2/alpn/alpn.h +1 -1
  100. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +13 -12
  101. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +45 -47
  102. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +134 -143
  103. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +68 -21
  104. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -4
  105. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +4 -4
  106. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +7 -6
  107. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +4 -3
  108. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +9 -7
  109. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +156 -94
  110. data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -2
  111. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
  112. data/src/core/ext/transport/chttp2/transport/frame_data.cc +33 -37
  113. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  114. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +6 -5
  115. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -2
  116. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -4
  117. data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -1
  118. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +8 -6
  119. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -1
  120. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -4
  121. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
  122. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -6
  123. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +1 -1
  124. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +74 -55
  125. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +33 -11
  126. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -2
  127. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +7 -14
  128. data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -1
  129. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +9 -5
  130. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +9 -3
  131. data/src/core/ext/transport/chttp2/transport/internal.h +43 -30
  132. data/src/core/ext/transport/chttp2/transport/parsing.cc +52 -70
  133. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
  134. data/src/core/ext/transport/chttp2/transport/writing.cc +70 -33
  135. data/src/core/ext/transport/inproc/inproc_transport.cc +26 -18
  136. data/src/core/lib/channel/channel_args.cc +2 -101
  137. data/src/core/lib/channel/channel_args.h +3 -37
  138. data/src/core/lib/channel/channel_stack.h +10 -6
  139. data/src/core/lib/channel/channel_trace.cc +4 -4
  140. data/src/core/lib/channel/channel_trace.h +4 -4
  141. data/src/core/lib/channel/channelz.cc +168 -38
  142. data/src/core/lib/channel/channelz.h +40 -44
  143. data/src/core/lib/channel/channelz_registry.cc +75 -107
  144. data/src/core/lib/channel/channelz_registry.h +10 -28
  145. data/src/core/lib/channel/connected_channel.cc +2 -2
  146. data/src/core/lib/channel/context.h +2 -2
  147. data/src/core/lib/channel/handshaker.cc +151 -218
  148. data/src/core/lib/channel/handshaker.h +110 -101
  149. data/src/core/lib/channel/handshaker_factory.h +11 -19
  150. data/src/core/lib/channel/handshaker_registry.cc +67 -51
  151. data/src/core/lib/channel/handshaker_registry.h +21 -16
  152. data/src/core/lib/compression/algorithm_metadata.h +3 -3
  153. data/src/core/lib/compression/compression.cc +14 -9
  154. data/src/core/lib/compression/compression_args.cc +127 -0
  155. data/src/core/lib/compression/compression_args.h +55 -0
  156. data/src/core/lib/compression/compression_internal.cc +16 -12
  157. data/src/core/lib/compression/compression_internal.h +1 -1
  158. data/src/core/lib/compression/stream_compression.cc +3 -2
  159. data/src/core/lib/compression/stream_compression.h +2 -2
  160. data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
  161. data/src/core/lib/debug/trace.cc +13 -7
  162. data/src/core/lib/debug/trace.h +14 -1
  163. data/src/core/lib/gpr/arena.h +13 -9
  164. data/src/core/lib/gpr/cpu_posix.cc +5 -3
  165. data/src/core/lib/gpr/env.h +3 -6
  166. data/src/core/lib/gpr/env_linux.cc +6 -1
  167. data/src/core/lib/gpr/env_posix.cc +5 -0
  168. data/src/core/lib/gpr/env_windows.cc +7 -5
  169. data/src/core/lib/gpr/log.cc +9 -13
  170. data/src/core/lib/gpr/log_posix.cc +2 -1
  171. data/src/core/lib/gpr/string.cc +20 -7
  172. data/src/core/lib/gpr/string.h +10 -3
  173. data/src/core/lib/gpr/sync_posix.cc +65 -4
  174. data/src/core/lib/gpr/time.cc +8 -0
  175. data/src/core/lib/gpr/time_posix.cc +21 -2
  176. data/src/core/lib/gprpp/arena.cc +103 -0
  177. data/src/core/lib/gprpp/arena.h +121 -0
  178. data/src/core/lib/gprpp/atomic.h +75 -5
  179. data/src/core/lib/gprpp/fork.cc +13 -32
  180. data/src/core/lib/gprpp/fork.h +5 -1
  181. data/src/core/lib/gprpp/global_config.h +96 -0
  182. data/src/core/lib/gprpp/global_config_custom.h +29 -0
  183. data/src/core/lib/gprpp/global_config_env.cc +135 -0
  184. data/src/core/lib/gprpp/global_config_env.h +131 -0
  185. data/src/core/lib/gprpp/global_config_generic.h +44 -0
  186. data/src/core/lib/gprpp/inlined_vector.h +8 -0
  187. data/src/core/lib/gprpp/map.h +436 -0
  188. data/src/core/lib/gprpp/memory.h +2 -2
  189. data/src/core/lib/gprpp/optional.h +48 -0
  190. data/src/core/lib/gprpp/orphanable.h +6 -5
  191. data/src/core/lib/gprpp/{mutex_lock.h → pair.h} +15 -19
  192. data/src/core/lib/gprpp/ref_counted.h +36 -17
  193. data/src/core/lib/gprpp/sync.h +126 -0
  194. data/src/core/lib/gprpp/thd.h +42 -7
  195. data/src/core/lib/gprpp/thd_posix.cc +31 -13
  196. data/src/core/lib/gprpp/thd_windows.cc +47 -34
  197. data/src/core/lib/http/httpcli.cc +6 -5
  198. data/src/core/lib/http/httpcli_security_connector.cc +13 -15
  199. data/src/core/lib/http/parser.cc +3 -2
  200. data/src/core/lib/http/parser.h +2 -1
  201. data/src/core/lib/iomgr/buffer_list.cc +182 -24
  202. data/src/core/lib/iomgr/buffer_list.h +72 -10
  203. data/src/core/lib/iomgr/call_combiner.cc +84 -90
  204. data/src/core/lib/iomgr/call_combiner.h +75 -82
  205. data/src/core/lib/iomgr/cfstream_handle.cc +203 -0
  206. data/src/core/lib/iomgr/cfstream_handle.h +86 -0
  207. data/src/core/lib/iomgr/combiner.cc +11 -3
  208. data/src/core/lib/iomgr/combiner.h +1 -1
  209. data/src/core/lib/iomgr/endpoint.cc +2 -2
  210. data/src/core/lib/iomgr/endpoint.h +3 -2
  211. data/src/core/lib/iomgr/endpoint_cfstream.cc +375 -0
  212. data/src/core/lib/iomgr/endpoint_cfstream.h +49 -0
  213. data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
  214. data/src/core/lib/iomgr/error.cc +21 -17
  215. data/src/core/lib/iomgr/error.h +36 -6
  216. data/src/core/lib/iomgr/error_cfstream.cc +52 -0
  217. data/src/core/lib/iomgr/error_cfstream.h +31 -0
  218. data/src/core/lib/iomgr/error_internal.h +1 -1
  219. data/src/core/lib/iomgr/ev_epoll1_linux.cc +44 -28
  220. data/src/core/lib/iomgr/ev_epollex_linux.cc +173 -194
  221. data/src/core/lib/iomgr/ev_poll_posix.cc +16 -487
  222. data/src/core/lib/iomgr/ev_posix.cc +29 -19
  223. data/src/core/lib/iomgr/ev_posix.h +19 -3
  224. data/src/core/lib/iomgr/ev_windows.cc +2 -2
  225. data/src/core/lib/iomgr/exec_ctx.cc +1 -0
  226. data/src/core/lib/iomgr/exec_ctx.h +137 -8
  227. data/src/core/lib/iomgr/executor.cc +147 -95
  228. data/src/core/lib/iomgr/executor.h +55 -49
  229. data/src/core/lib/iomgr/fork_posix.cc +6 -5
  230. data/src/core/lib/{gprpp/atomic_with_std.h → iomgr/grpc_if_nametoindex.h} +8 -13
  231. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +42 -0
  232. data/src/core/lib/iomgr/{network_status_tracker.h → grpc_if_nametoindex_unsupported.cc} +15 -9
  233. data/src/core/lib/iomgr/internal_errqueue.cc +3 -5
  234. data/src/core/lib/iomgr/internal_errqueue.h +105 -3
  235. data/src/core/lib/iomgr/iomgr.cc +20 -13
  236. data/src/core/lib/iomgr/iomgr.h +15 -0
  237. data/src/core/lib/iomgr/iomgr_custom.cc +17 -3
  238. data/src/core/lib/iomgr/iomgr_custom.h +2 -0
  239. data/src/core/lib/iomgr/iomgr_internal.cc +10 -0
  240. data/src/core/lib/iomgr/iomgr_internal.h +12 -0
  241. data/src/core/lib/iomgr/iomgr_posix.cc +19 -2
  242. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +93 -0
  243. data/src/core/lib/iomgr/iomgr_windows.cc +18 -2
  244. data/src/core/lib/iomgr/lockfree_event.cc +4 -4
  245. data/src/core/lib/iomgr/port.h +35 -0
  246. data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
  247. data/src/core/lib/iomgr/resolve_address_windows.cc +2 -1
  248. data/src/core/lib/iomgr/resource_quota.cc +40 -37
  249. data/src/core/lib/iomgr/socket_utils_common_posix.cc +6 -2
  250. data/src/core/lib/iomgr/socket_windows.cc +19 -0
  251. data/src/core/lib/iomgr/socket_windows.h +8 -0
  252. data/src/core/lib/iomgr/tcp_client_cfstream.cc +216 -0
  253. data/src/core/lib/iomgr/tcp_client_custom.cc +2 -2
  254. data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
  255. data/src/core/lib/iomgr/tcp_client_windows.cc +7 -5
  256. data/src/core/lib/iomgr/tcp_custom.cc +10 -14
  257. data/src/core/lib/iomgr/tcp_posix.cc +256 -140
  258. data/src/core/lib/iomgr/tcp_server.cc +5 -0
  259. data/src/core/lib/iomgr/tcp_server.h +24 -0
  260. data/src/core/lib/iomgr/tcp_server_custom.cc +14 -12
  261. data/src/core/lib/iomgr/tcp_server_posix.cc +86 -12
  262. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
  263. data/src/core/lib/iomgr/tcp_server_windows.cc +13 -11
  264. data/src/core/lib/iomgr/tcp_uv.cc +5 -7
  265. data/src/core/lib/iomgr/tcp_windows.cc +8 -14
  266. data/src/core/lib/iomgr/timer.h +2 -1
  267. data/src/core/lib/iomgr/timer_generic.cc +16 -16
  268. data/src/core/lib/iomgr/timer_manager.cc +20 -11
  269. data/src/core/lib/iomgr/udp_server.cc +8 -6
  270. data/src/core/lib/iomgr/wakeup_fd_posix.cc +1 -19
  271. data/src/core/lib/json/json.cc +1 -4
  272. data/src/core/lib/profiling/basic_timers.cc +10 -4
  273. data/src/core/lib/security/context/security_context.cc +6 -7
  274. data/src/core/lib/security/context/security_context.h +3 -4
  275. data/src/core/lib/security/credentials/alts/alts_credentials.cc +1 -1
  276. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
  277. data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -0
  278. data/src/core/lib/security/credentials/credentials.h +9 -1
  279. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +15 -3
  280. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -0
  281. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  282. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +2 -1
  283. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +10 -6
  284. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -1
  285. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +3 -3
  286. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +9 -8
  287. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -2
  288. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -2
  289. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +192 -0
  290. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +210 -0
  291. data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +129 -0
  292. data/src/core/lib/security/credentials/tls/spiffe_credentials.h +62 -0
  293. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -8
  294. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -12
  295. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +7 -5
  296. data/src/core/lib/security/security_connector/local/local_security_connector.cc +10 -8
  297. data/src/core/lib/security/security_connector/security_connector.cc +0 -1
  298. data/src/core/lib/security/security_connector/security_connector.h +3 -3
  299. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +39 -38
  300. data/src/core/lib/security/security_connector/ssl_utils.cc +164 -26
  301. data/src/core/lib/security/security_connector/ssl_utils.h +70 -1
  302. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +426 -0
  303. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +122 -0
  304. data/src/core/lib/security/transport/auth_filters.h +5 -2
  305. data/src/core/lib/security/transport/client_auth_filter.cc +55 -50
  306. data/src/core/lib/security/transport/secure_endpoint.cc +6 -6
  307. data/src/core/lib/security/transport/security_handshaker.cc +271 -303
  308. data/src/core/lib/security/transport/security_handshaker.h +11 -2
  309. data/src/core/lib/security/transport/server_auth_filter.cc +3 -3
  310. data/src/core/lib/slice/b64.h +2 -2
  311. data/src/core/lib/slice/percent_encoding.cc +3 -3
  312. data/src/core/lib/slice/percent_encoding.h +3 -3
  313. data/src/core/lib/slice/slice.cc +174 -122
  314. data/src/core/lib/slice/slice_buffer.cc +54 -21
  315. data/src/core/lib/slice/slice_hash_table.h +4 -4
  316. data/src/core/lib/slice/slice_intern.cc +49 -107
  317. data/src/core/lib/slice/slice_internal.h +264 -3
  318. data/src/core/lib/slice/slice_string_helpers.cc +10 -1
  319. data/src/core/lib/slice/slice_string_helpers.h +3 -1
  320. data/src/core/lib/slice/slice_utils.h +50 -0
  321. data/src/core/lib/slice/slice_weak_hash_table.h +6 -6
  322. data/src/core/lib/surface/api_trace.h +1 -1
  323. data/src/core/lib/surface/byte_buffer_reader.cc +17 -0
  324. data/src/core/lib/surface/call.cc +67 -46
  325. data/src/core/lib/surface/call.h +7 -2
  326. data/src/core/lib/surface/call_details.cc +0 -1
  327. data/src/core/lib/surface/channel.cc +89 -97
  328. data/src/core/lib/surface/channel.h +60 -6
  329. data/src/core/lib/surface/channel_init.h +5 -0
  330. data/src/core/lib/surface/completion_queue.cc +221 -216
  331. data/src/core/lib/surface/completion_queue.h +2 -1
  332. data/src/core/lib/surface/init.cc +82 -33
  333. data/src/core/lib/surface/init.h +1 -0
  334. data/src/core/lib/surface/init_secure.cc +1 -1
  335. data/src/core/lib/surface/lame_client.cc +5 -7
  336. data/src/core/lib/surface/server.cc +42 -47
  337. data/src/core/lib/surface/validate_metadata.cc +14 -8
  338. data/src/core/lib/surface/validate_metadata.h +13 -2
  339. data/src/core/lib/surface/version.cc +1 -1
  340. data/src/core/lib/transport/bdp_estimator.cc +3 -3
  341. data/src/core/lib/transport/bdp_estimator.h +2 -2
  342. data/src/core/lib/transport/connectivity_state.cc +10 -40
  343. data/src/core/lib/transport/connectivity_state.h +0 -8
  344. data/src/core/lib/transport/error_utils.cc +12 -0
  345. data/src/core/lib/transport/metadata.cc +258 -267
  346. data/src/core/lib/transport/metadata.h +227 -16
  347. data/src/core/lib/transport/metadata_batch.cc +1 -1
  348. data/src/core/lib/transport/metadata_batch.h +1 -1
  349. data/src/core/lib/transport/static_metadata.cc +477 -399
  350. data/src/core/lib/transport/static_metadata.h +273 -182
  351. data/src/core/lib/transport/status_metadata.cc +3 -3
  352. data/src/core/lib/transport/timeout_encoding.cc +1 -1
  353. data/src/core/lib/transport/timeout_encoding.h +1 -1
  354. data/src/core/lib/transport/transport.cc +39 -72
  355. data/src/core/lib/transport/transport.h +59 -24
  356. data/src/core/lib/transport/transport_impl.h +1 -1
  357. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
  358. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  359. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -1
  360. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +4 -3
  361. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
  362. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +1 -1
  363. data/src/core/tsi/fake_transport_security.cc +4 -4
  364. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +1 -1
  365. data/src/core/tsi/ssl_transport_security.cc +12 -10
  366. data/src/core/tsi/ssl_transport_security.h +24 -4
  367. data/src/ruby/bin/math_pb.rb +18 -16
  368. data/src/ruby/ext/grpc/extconf.rb +12 -4
  369. data/src/ruby/ext/grpc/rb_call_credentials.c +8 -5
  370. data/src/ruby/ext/grpc/rb_channel.c +14 -10
  371. data/src/ruby/ext/grpc/rb_channel_credentials.c +8 -4
  372. data/src/ruby/ext/grpc/rb_compression_options.c +9 -7
  373. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  374. data/src/ruby/ext/grpc/rb_grpc.c +23 -24
  375. data/src/ruby/ext/grpc/rb_grpc.h +4 -2
  376. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +24 -0
  377. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -0
  378. data/src/ruby/ext/grpc/rb_server.c +8 -4
  379. data/src/ruby/lib/grpc/errors.rb +22 -3
  380. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  381. data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -2
  382. data/src/ruby/lib/grpc/version.rb +1 -1
  383. data/src/ruby/pb/README.md +1 -1
  384. data/src/ruby/pb/grpc/health/v1/health_pb.rb +13 -10
  385. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +18 -0
  386. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +3 -1
  387. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +58 -56
  388. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -0
  389. data/src/ruby/spec/errors_spec.rb +141 -0
  390. data/third_party/cares/cares/ares.h +12 -0
  391. data/third_party/cares/cares/ares_create_query.c +5 -1
  392. data/third_party/cares/cares/ares_data.c +74 -73
  393. data/third_party/cares/cares/ares_destroy.c +6 -1
  394. data/third_party/cares/cares/ares_gethostbyaddr.c +5 -5
  395. data/third_party/cares/cares/ares_gethostbyname.c +15 -4
  396. data/third_party/cares/cares/ares_getnameinfo.c +11 -0
  397. data/third_party/cares/cares/ares_init.c +274 -173
  398. data/third_party/cares/cares/ares_library_init.c +21 -3
  399. data/third_party/cares/cares/ares_options.c +6 -2
  400. data/third_party/cares/cares/ares_parse_naptr_reply.c +7 -6
  401. data/third_party/cares/cares/ares_parse_ptr_reply.c +4 -2
  402. data/third_party/cares/cares/ares_platform.c +7 -0
  403. data/third_party/cares/cares/ares_private.h +19 -11
  404. data/third_party/cares/cares/ares_process.c +27 -2
  405. data/third_party/cares/cares/ares_rules.h +1 -1
  406. data/third_party/cares/cares/ares_search.c +7 -0
  407. data/third_party/cares/cares/ares_send.c +6 -0
  408. data/third_party/cares/cares/ares_strsplit.c +174 -0
  409. data/third_party/cares/cares/ares_strsplit.h +43 -0
  410. data/third_party/cares/cares/ares_version.h +4 -4
  411. data/third_party/cares/cares/config-win32.h +1 -1
  412. data/third_party/cares/cares/inet_ntop.c +2 -3
  413. data/third_party/cares/config_darwin/ares_config.h +3 -0
  414. data/third_party/cares/config_freebsd/ares_config.h +3 -0
  415. data/third_party/cares/config_linux/ares_config.h +3 -0
  416. data/third_party/cares/config_openbsd/ares_config.h +3 -0
  417. metadata +83 -48
  418. data/src/core/ext/filters/client_channel/request_routing.cc +0 -936
  419. data/src/core/ext/filters/client_channel/request_routing.h +0 -177
  420. data/src/core/ext/filters/client_channel/subchannel_index.cc +0 -248
  421. data/src/core/ext/filters/client_channel/subchannel_index.h +0 -76
  422. data/src/core/lib/channel/handshaker_factory.cc +0 -42
  423. data/src/core/lib/gpr/arena.cc +0 -192
  424. data/src/core/lib/gprpp/atomic_with_atm.h +0 -57
  425. data/src/core/lib/iomgr/wakeup_fd_cv.cc +0 -107
  426. data/src/core/lib/iomgr/wakeup_fd_cv.h +0 -69
  427. data/src/core/lib/transport/service_config.cc +0 -106
  428. data/src/core/lib/transport/service_config.h +0 -249
@@ -0,0 +1,127 @@
1
+ /*
2
+ *
3
+ * Copyright 2015 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include <limits.h>
22
+ #include <string.h>
23
+
24
+ #include <grpc/compression.h>
25
+ #include <grpc/grpc.h>
26
+ #include <grpc/support/alloc.h>
27
+ #include <grpc/support/log.h>
28
+ #include <grpc/support/string_util.h>
29
+
30
+ #include "src/core/lib/channel/channel_args.h"
31
+ #include "src/core/lib/compression/compression_args.h"
32
+ #include "src/core/lib/gpr/string.h"
33
+ #include "src/core/lib/gpr/useful.h"
34
+
35
+ grpc_compression_algorithm grpc_channel_args_get_compression_algorithm(
36
+ const grpc_channel_args* a) {
37
+ size_t i;
38
+ if (a == nullptr) return GRPC_COMPRESS_NONE;
39
+ for (i = 0; i < a->num_args; ++i) {
40
+ if (a->args[i].type == GRPC_ARG_INTEGER &&
41
+ !strcmp(GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM, a->args[i].key)) {
42
+ return static_cast<grpc_compression_algorithm>(a->args[i].value.integer);
43
+ break;
44
+ }
45
+ }
46
+ return GRPC_COMPRESS_NONE;
47
+ }
48
+
49
+ grpc_channel_args* grpc_channel_args_set_compression_algorithm(
50
+ grpc_channel_args* a, grpc_compression_algorithm algorithm) {
51
+ GPR_ASSERT(algorithm < GRPC_COMPRESS_ALGORITHMS_COUNT);
52
+ grpc_arg tmp;
53
+ tmp.type = GRPC_ARG_INTEGER;
54
+ tmp.key = (char*)GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM;
55
+ tmp.value.integer = algorithm;
56
+ return grpc_channel_args_copy_and_add(a, &tmp, 1);
57
+ }
58
+
59
+ /** Returns 1 if the argument for compression algorithm's enabled states bitset
60
+ * was found in \a a, returning the arg's value in \a states. Otherwise, returns
61
+ * 0. */
62
+ static int find_compression_algorithm_states_bitset(const grpc_channel_args* a,
63
+ int** states_arg) {
64
+ if (a != nullptr) {
65
+ size_t i;
66
+ for (i = 0; i < a->num_args; ++i) {
67
+ if (a->args[i].type == GRPC_ARG_INTEGER &&
68
+ !strcmp(GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET,
69
+ a->args[i].key)) {
70
+ *states_arg = &a->args[i].value.integer;
71
+ **states_arg |= 0x1; /* forcefully enable support for no compression */
72
+ return 1;
73
+ }
74
+ }
75
+ }
76
+ return 0; /* GPR_FALSE */
77
+ }
78
+
79
+ grpc_channel_args* grpc_channel_args_compression_algorithm_set_state(
80
+ grpc_channel_args** a, grpc_compression_algorithm algorithm, int state) {
81
+ int* states_arg = nullptr;
82
+ grpc_channel_args* result = *a;
83
+ const int states_arg_found =
84
+ find_compression_algorithm_states_bitset(*a, &states_arg);
85
+
86
+ if (grpc_channel_args_get_compression_algorithm(*a) == algorithm &&
87
+ state == 0) {
88
+ const char* algo_name = nullptr;
89
+ GPR_ASSERT(grpc_compression_algorithm_name(algorithm, &algo_name) != 0);
90
+ gpr_log(GPR_ERROR,
91
+ "Tried to disable default compression algorithm '%s'. The "
92
+ "operation has been ignored.",
93
+ algo_name);
94
+ } else if (states_arg_found) {
95
+ if (state != 0) {
96
+ GPR_BITSET((unsigned*)states_arg, algorithm);
97
+ } else if (algorithm != GRPC_COMPRESS_NONE) {
98
+ GPR_BITCLEAR((unsigned*)states_arg, algorithm);
99
+ }
100
+ } else {
101
+ /* create a new arg */
102
+ grpc_arg tmp;
103
+ tmp.type = GRPC_ARG_INTEGER;
104
+ tmp.key = (char*)GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET;
105
+ /* all enabled by default */
106
+ tmp.value.integer = (1u << GRPC_COMPRESS_ALGORITHMS_COUNT) - 1;
107
+ if (state != 0) {
108
+ GPR_BITSET((unsigned*)&tmp.value.integer, algorithm);
109
+ } else if (algorithm != GRPC_COMPRESS_NONE) {
110
+ GPR_BITCLEAR((unsigned*)&tmp.value.integer, algorithm);
111
+ }
112
+ result = grpc_channel_args_copy_and_add(*a, &tmp, 1);
113
+ grpc_channel_args_destroy(*a);
114
+ *a = result;
115
+ }
116
+ return result;
117
+ }
118
+
119
+ uint32_t grpc_channel_args_compression_algorithm_get_states(
120
+ const grpc_channel_args* a) {
121
+ int* states_arg;
122
+ if (find_compression_algorithm_states_bitset(a, &states_arg)) {
123
+ return static_cast<uint32_t>(*states_arg);
124
+ } else {
125
+ return (1u << GRPC_COMPRESS_ALGORITHMS_COUNT) - 1; /* All algs. enabled */
126
+ }
127
+ }
@@ -0,0 +1,55 @@
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
+ #ifndef GRPC_CORE_LIB_COMPRESSION_COMPRESSION_ARGS_H
20
+ #define GRPC_CORE_LIB_COMPRESSION_COMPRESSION_ARGS_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include <grpc/compression.h>
25
+ #include <grpc/impl/codegen/grpc_types.h>
26
+
27
+ /** Returns the compression algorithm set in \a a. */
28
+ grpc_compression_algorithm grpc_channel_args_get_compression_algorithm(
29
+ const grpc_channel_args* a);
30
+
31
+ /** Returns a channel arg instance with compression enabled. If \a a is
32
+ * non-NULL, its args are copied. N.B. GRPC_COMPRESS_NONE disables compression
33
+ * for the channel. */
34
+ grpc_channel_args* grpc_channel_args_set_compression_algorithm(
35
+ grpc_channel_args* a, grpc_compression_algorithm algorithm);
36
+
37
+ /** Sets the support for the given compression algorithm. By default, all
38
+ * compression algorithms are enabled. It's an error to disable an algorithm set
39
+ * by grpc_channel_args_set_compression_algorithm.
40
+ *
41
+ * Returns an instance with the updated algorithm states. The \a a pointer is
42
+ * modified to point to the returned instance (which may be different from the
43
+ * input value of \a a). */
44
+ grpc_channel_args* grpc_channel_args_compression_algorithm_set_state(
45
+ grpc_channel_args** a, grpc_compression_algorithm algorithm, int state);
46
+
47
+ /** Returns the bitset representing the support state (true for enabled, false
48
+ * for disabled) for compression algorithms.
49
+ *
50
+ * The i-th bit of the returned bitset corresponds to the i-th entry in the
51
+ * grpc_compression_algorithm enum. */
52
+ uint32_t grpc_channel_args_compression_algorithm_get_states(
53
+ const grpc_channel_args* a);
54
+
55
+ #endif /* GRPC_CORE_LIB_COMPRESSION_COMPRESSION_ARGS_H */
@@ -26,25 +26,29 @@
26
26
  #include "src/core/lib/compression/algorithm_metadata.h"
27
27
  #include "src/core/lib/compression/compression_internal.h"
28
28
  #include "src/core/lib/gpr/useful.h"
29
+ #include "src/core/lib/slice/slice_utils.h"
29
30
  #include "src/core/lib/surface/api_trace.h"
30
31
  #include "src/core/lib/transport/static_metadata.h"
31
32
 
32
33
  /* Interfaces related to MD */
33
34
 
34
35
  grpc_message_compression_algorithm
35
- grpc_message_compression_algorithm_from_slice(grpc_slice str) {
36
- if (grpc_slice_eq(str, GRPC_MDSTR_IDENTITY))
36
+ grpc_message_compression_algorithm_from_slice(const grpc_slice& str) {
37
+ if (grpc_slice_eq_static_interned(str, GRPC_MDSTR_IDENTITY))
37
38
  return GRPC_MESSAGE_COMPRESS_NONE;
38
- if (grpc_slice_eq(str, GRPC_MDSTR_DEFLATE))
39
+ if (grpc_slice_eq_static_interned(str, GRPC_MDSTR_DEFLATE))
39
40
  return GRPC_MESSAGE_COMPRESS_DEFLATE;
40
- if (grpc_slice_eq(str, GRPC_MDSTR_GZIP)) return GRPC_MESSAGE_COMPRESS_GZIP;
41
+ if (grpc_slice_eq_static_interned(str, GRPC_MDSTR_GZIP))
42
+ return GRPC_MESSAGE_COMPRESS_GZIP;
41
43
  return GRPC_MESSAGE_COMPRESS_ALGORITHMS_COUNT;
42
44
  }
43
45
 
44
46
  grpc_stream_compression_algorithm grpc_stream_compression_algorithm_from_slice(
45
- grpc_slice str) {
46
- if (grpc_slice_eq(str, GRPC_MDSTR_IDENTITY)) return GRPC_STREAM_COMPRESS_NONE;
47
- if (grpc_slice_eq(str, GRPC_MDSTR_GZIP)) return GRPC_STREAM_COMPRESS_GZIP;
47
+ const grpc_slice& str) {
48
+ if (grpc_slice_eq_static_interned(str, GRPC_MDSTR_IDENTITY))
49
+ return GRPC_STREAM_COMPRESS_NONE;
50
+ if (grpc_slice_eq_static_interned(str, GRPC_MDSTR_GZIP))
51
+ return GRPC_STREAM_COMPRESS_GZIP;
48
52
  return GRPC_STREAM_COMPRESS_ALGORITHMS_COUNT;
49
53
  }
50
54
 
@@ -244,13 +248,13 @@ grpc_message_compression_algorithm grpc_message_compression_algorithm_for_level(
244
248
 
245
249
  int grpc_message_compression_algorithm_parse(
246
250
  grpc_slice value, grpc_message_compression_algorithm* algorithm) {
247
- if (grpc_slice_eq(value, GRPC_MDSTR_IDENTITY)) {
251
+ if (grpc_slice_eq_static_interned(value, GRPC_MDSTR_IDENTITY)) {
248
252
  *algorithm = GRPC_MESSAGE_COMPRESS_NONE;
249
253
  return 1;
250
- } else if (grpc_slice_eq(value, GRPC_MDSTR_DEFLATE)) {
254
+ } else if (grpc_slice_eq_static_interned(value, GRPC_MDSTR_DEFLATE)) {
251
255
  *algorithm = GRPC_MESSAGE_COMPRESS_DEFLATE;
252
256
  return 1;
253
- } else if (grpc_slice_eq(value, GRPC_MDSTR_GZIP)) {
257
+ } else if (grpc_slice_eq_static_interned(value, GRPC_MDSTR_GZIP)) {
254
258
  *algorithm = GRPC_MESSAGE_COMPRESS_GZIP;
255
259
  return 1;
256
260
  } else {
@@ -263,10 +267,10 @@ int grpc_message_compression_algorithm_parse(
263
267
 
264
268
  int grpc_stream_compression_algorithm_parse(
265
269
  grpc_slice value, grpc_stream_compression_algorithm* algorithm) {
266
- if (grpc_slice_eq(value, GRPC_MDSTR_IDENTITY)) {
270
+ if (grpc_slice_eq_static_interned(value, GRPC_MDSTR_IDENTITY)) {
267
271
  *algorithm = GRPC_STREAM_COMPRESS_NONE;
268
272
  return 1;
269
- } else if (grpc_slice_eq(value, GRPC_MDSTR_GZIP)) {
273
+ } else if (grpc_slice_eq_static_interned(value, GRPC_MDSTR_GZIP)) {
270
274
  *algorithm = GRPC_STREAM_COMPRESS_GZIP;
271
275
  return 1;
272
276
  } else {
@@ -35,7 +35,7 @@ typedef enum {
35
35
  GRPC_MESSAGE_COMPRESS_ALGORITHMS_COUNT
36
36
  } grpc_message_compression_algorithm;
37
37
 
38
- /** Stream compresssion algorithms supported by gRPC */
38
+ /** Stream compression algorithms supported by gRPC */
39
39
  typedef enum {
40
40
  GRPC_STREAM_COMPRESS_NONE = 0,
41
41
  GRPC_STREAM_COMPRESS_GZIP,
@@ -22,6 +22,7 @@
22
22
 
23
23
  #include "src/core/lib/compression/stream_compression.h"
24
24
  #include "src/core/lib/compression/stream_compression_gzip.h"
25
+ #include "src/core/lib/slice/slice_utils.h"
25
26
 
26
27
  extern const grpc_stream_compression_vtable
27
28
  grpc_stream_compression_identity_vtable;
@@ -65,11 +66,11 @@ void grpc_stream_compression_context_destroy(
65
66
  int grpc_stream_compression_method_parse(
66
67
  grpc_slice value, bool is_compress,
67
68
  grpc_stream_compression_method* method) {
68
- if (grpc_slice_eq(value, GRPC_MDSTR_IDENTITY)) {
69
+ if (grpc_slice_eq_static_interned(value, GRPC_MDSTR_IDENTITY)) {
69
70
  *method = is_compress ? GRPC_STREAM_COMPRESSION_IDENTITY_COMPRESS
70
71
  : GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS;
71
72
  return 1;
72
- } else if (grpc_slice_eq(value, GRPC_MDSTR_GZIP)) {
73
+ } else if (grpc_slice_eq_static_interned(value, GRPC_MDSTR_GZIP)) {
73
74
  *method = is_compress ? GRPC_STREAM_COMPRESSION_GZIP_COMPRESS
74
75
  : GRPC_STREAM_COMPRESSION_GZIP_DECOMPRESS;
75
76
  return 1;
@@ -68,7 +68,7 @@ struct grpc_stream_compression_vtable {
68
68
  * at the end of compression. Emits at most \a max_output_size compressed bytes
69
69
  * into \a out. If all the bytes in input buffer \a in are depleted and \a flush
70
70
  * is not GRPC_STREAM_COMPRESSION_FLUSH_NONE, the corresponding flush method is
71
- * executed. The total number of bytes emitted is outputed in \a output_size.
71
+ * executed. The total number of bytes emitted is outputted in \a output_size.
72
72
  *
73
73
  * A SYNC flush indicates that the entire messages in \a in can be decompressed
74
74
  * from \a out. A FINISH flush implies a SYNC flush, and that any further
@@ -85,7 +85,7 @@ bool grpc_stream_compress(grpc_stream_compression_context* ctx,
85
85
  * Decompress bytes provided in \a in with a given context. Emits at most \a
86
86
  * max_output_size decompressed bytes into \a out. If decompression process
87
87
  * reached the end of a gzip stream, \a end_of_context is set to true; otherwise
88
- * it is set to false. The total number of bytes emitted is outputed in \a
88
+ * it is set to false. The total number of bytes emitted is outputted in \a
89
89
  * output_size.
90
90
  */
91
91
  bool grpc_stream_decompress(grpc_stream_compression_context* ctx,
@@ -53,25 +53,25 @@ static bool gzip_flate(grpc_stream_compression_context_gzip* ctx,
53
53
  ctx->zs.avail_out = static_cast<uInt>(slice_size);
54
54
  ctx->zs.next_out = GRPC_SLICE_START_PTR(slice_out);
55
55
  while (ctx->zs.avail_out > 0 && in->length > 0 && !eoc) {
56
- grpc_slice slice = grpc_slice_buffer_take_first(in);
57
- ctx->zs.avail_in = static_cast<uInt> GRPC_SLICE_LENGTH(slice);
58
- ctx->zs.next_in = GRPC_SLICE_START_PTR(slice);
56
+ grpc_slice* slice = grpc_slice_buffer_peek_first(in);
57
+ ctx->zs.avail_in = static_cast<uInt> GRPC_SLICE_LENGTH(*slice);
58
+ ctx->zs.next_in = GRPC_SLICE_START_PTR(*slice);
59
59
  r = ctx->flate(&ctx->zs, Z_NO_FLUSH);
60
60
  if (r < 0 && r != Z_BUF_ERROR) {
61
61
  gpr_log(GPR_ERROR, "zlib error (%d)", r);
62
62
  grpc_slice_unref_internal(slice_out);
63
-
63
+ grpc_slice_buffer_remove_first(in);
64
64
  return false;
65
65
  } else if (r == Z_STREAM_END && ctx->flate == inflate) {
66
66
  eoc = true;
67
67
  }
68
68
  if (ctx->zs.avail_in > 0) {
69
- grpc_slice_buffer_undo_take_first(
70
- in,
71
- grpc_slice_sub(slice, GRPC_SLICE_LENGTH(slice) - ctx->zs.avail_in,
72
- GRPC_SLICE_LENGTH(slice)));
69
+ grpc_slice_buffer_sub_first(
70
+ in, GRPC_SLICE_LENGTH(*slice) - ctx->zs.avail_in,
71
+ GRPC_SLICE_LENGTH(*slice));
72
+ } else {
73
+ grpc_slice_buffer_remove_first(in);
73
74
  }
74
- grpc_slice_unref_internal(slice);
75
75
  }
76
76
  if (flush != 0 && ctx->zs.avail_out > 0 && !eoc) {
77
77
  GPR_ASSERT(in->length == 0);
@@ -26,7 +26,11 @@
26
26
  #include <grpc/grpc.h>
27
27
  #include <grpc/support/alloc.h>
28
28
  #include <grpc/support/log.h>
29
- #include "src/core/lib/gpr/env.h"
29
+
30
+ GPR_GLOBAL_CONFIG_DEFINE_STRING(
31
+ grpc_trace, "",
32
+ "A comma separated list of tracers that provide additional insight into "
33
+ "how gRPC C core is processing requests via debug logs.");
30
34
 
31
35
  int grpc_tracer_set_enabled(const char* name, int enabled);
32
36
 
@@ -133,12 +137,14 @@ static void parse(const char* s) {
133
137
  gpr_free(strings);
134
138
  }
135
139
 
136
- void grpc_tracer_init(const char* env_var) {
137
- char* e = gpr_getenv(env_var);
138
- if (e != nullptr) {
139
- parse(e);
140
- gpr_free(e);
141
- }
140
+ void grpc_tracer_init(const char* env_var_name) {
141
+ (void)env_var_name; // suppress unused variable error
142
+ grpc_tracer_init();
143
+ }
144
+
145
+ void grpc_tracer_init() {
146
+ grpc_core::UniquePtr<char> value = GPR_GLOBAL_CONFIG_GET(grpc_trace);
147
+ parse(value.get());
142
148
  }
143
149
 
144
150
  void grpc_tracer_shutdown(void) {}
@@ -24,7 +24,15 @@
24
24
  #include <grpc/support/atm.h>
25
25
  #include <stdbool.h>
26
26
 
27
+ #include "src/core/lib/gprpp/global_config.h"
28
+
29
+ GPR_GLOBAL_CONFIG_DECLARE_STRING(grpc_trace);
30
+
31
+ // TODO(veblush): Remove this deprecated function once codes depending on this
32
+ // function are updated in the internal repo.
27
33
  void grpc_tracer_init(const char* env_var_name);
34
+
35
+ void grpc_tracer_init();
28
36
  void grpc_tracer_shutdown(void);
29
37
 
30
38
  #if defined(__has_feature)
@@ -53,7 +61,8 @@ void grpc_tracer_enable_flag(grpc_core::TraceFlag* flag);
53
61
  class TraceFlag {
54
62
  public:
55
63
  TraceFlag(bool default_enabled, const char* name);
56
- // This needs to be trivially destructible as it is used as global variable.
64
+ // TraceFlag needs to be trivially destructible since it is used as global
65
+ // variable.
57
66
  ~TraceFlag() = default;
58
67
 
59
68
  const char* name() const { return name_; }
@@ -64,6 +73,8 @@ class TraceFlag {
64
73
  // wrapped language (wr don't want to force recompilation to get tracing).
65
74
  // Internally, however, for performance reasons, we compile them out by
66
75
  // default, since internal build systems make recompiling trivial.
76
+ //
77
+ // Prefer GRPC_TRACE_FLAG_ENABLED() macro instead of using enabled() directly.
67
78
  #define GRPC_USE_TRACERS // tracers on by default in OSS
68
79
  #if defined(GRPC_USE_TRACERS) || !defined(NDEBUG)
69
80
  bool enabled() {
@@ -98,6 +109,8 @@ class TraceFlag {
98
109
  #endif
99
110
  };
100
111
 
112
+ #define GRPC_TRACE_FLAG_ENABLED(f) GPR_UNLIKELY((f).enabled())
113
+
101
114
  #ifndef NDEBUG
102
115
  typedef TraceFlag DebugOnlyTraceFlag;
103
116
  #else
@@ -21,23 +21,27 @@
21
21
  // the arena as a whole is freed
22
22
  // Tracks the total memory allocated against it, so that future arenas can
23
23
  // pre-allocate the right amount of memory
24
+ // This transitional API is deprecated and will be removed soon in favour of
25
+ // src/core/lib/gprpp/arena.h .
24
26
 
25
27
  #ifndef GRPC_CORE_LIB_GPR_ARENA_H
26
28
  #define GRPC_CORE_LIB_GPR_ARENA_H
27
29
 
28
30
  #include <grpc/support/port_platform.h>
29
31
 
30
- #include <stddef.h>
31
-
32
- typedef struct gpr_arena gpr_arena;
32
+ #include "src/core/lib/gprpp/arena.h"
33
33
 
34
+ // TODO(arjunroy) : Remove deprecated gpr_arena API once all callers are gone.
35
+ typedef class grpc_core::Arena gpr_arena;
34
36
  // Create an arena, with \a initial_size bytes in the first allocated buffer
35
- gpr_arena* gpr_arena_create(size_t initial_size);
36
- // Allocate \a size bytes from the arena
37
- void* gpr_arena_alloc(gpr_arena* arena, size_t size);
37
+ inline gpr_arena* gpr_arena_create(size_t initial_size) {
38
+ return grpc_core::Arena::Create(initial_size);
39
+ }
38
40
  // Destroy an arena, returning the total number of bytes allocated
39
- size_t gpr_arena_destroy(gpr_arena* arena);
40
- // Initializes the Arena component.
41
- void gpr_arena_init();
41
+ inline size_t gpr_arena_destroy(gpr_arena* arena) { return arena->Destroy(); }
42
+ // Allocate \a size bytes from the arena
43
+ inline void* gpr_arena_alloc(gpr_arena* arena, size_t size) {
44
+ return arena->Alloc(size);
45
+ }
42
46
 
43
47
  #endif /* GRPC_CORE_LIB_GPR_ARENA_H */
@@ -25,7 +25,6 @@
25
25
  #include <string.h>
26
26
  #include <unistd.h>
27
27
 
28
- #include <grpc/support/alloc.h>
29
28
  #include <grpc/support/cpu.h>
30
29
  #include <grpc/support/log.h>
31
30
  #include <grpc/support/sync.h>
@@ -52,7 +51,7 @@ unsigned gpr_cpu_num_cores(void) {
52
51
 
53
52
  static void delete_thread_id(void* value) {
54
53
  if (value) {
55
- gpr_free(value);
54
+ free(value);
56
55
  }
57
56
  }
58
57
 
@@ -71,7 +70,10 @@ unsigned gpr_cpu_current_cpu(void) {
71
70
  unsigned int* thread_id =
72
71
  static_cast<unsigned int*>(pthread_getspecific(thread_id_key));
73
72
  if (thread_id == nullptr) {
74
- thread_id = static_cast<unsigned int*>(gpr_malloc(sizeof(unsigned int)));
73
+ // Note we cannot use gpr_malloc here because this allocation can happen in
74
+ // a main thread and will only be free'd when the main thread exits, which
75
+ // will cause our internal memory counters to believe it is a leak.
76
+ thread_id = static_cast<unsigned int*>(malloc(sizeof(unsigned int)));
75
77
  pthread_setspecific(thread_id_key, thread_id);
76
78
  }
77
79
 
@@ -26,7 +26,7 @@
26
26
  /* Env utility functions */
27
27
 
28
28
  /* Gets the environment variable value with the specified name.
29
- Returns a newly allocated string. It is the responsability of the caller to
29
+ Returns a newly allocated string. It is the responsibility of the caller to
30
30
  gpr_free the return value if not NULL (which means that the environment
31
31
  variable exists). */
32
32
  char* gpr_getenv(const char* name);
@@ -34,10 +34,7 @@ char* gpr_getenv(const char* name);
34
34
  /* Sets the environment with the specified name to the specified value. */
35
35
  void gpr_setenv(const char* name, const char* value);
36
36
 
37
- /* This is a version of gpr_getenv that does not produce any output if it has to
38
- use an insecure version of the function. It is ONLY to be used to solve the
39
- problem in which we need to check an env variable to configure the verbosity
40
- level of logging. So DO NOT USE THIS. */
41
- const char* gpr_getenv_silent(const char* name, char** dst);
37
+ /* Deletes the variable name from the environment. */
38
+ void gpr_unsetenv(const char* name);
42
39
 
43
40
  #endif /* GRPC_CORE_LIB_GPR_ENV_H */
@@ -38,7 +38,7 @@
38
38
  #include "src/core/lib/gpr/string.h"
39
39
  #include "src/core/lib/gpr/useful.h"
40
40
 
41
- const char* gpr_getenv_silent(const char* name, char** dst) {
41
+ static const char* gpr_getenv_silent(const char* name, char** dst) {
42
42
  const char* insecure_func_used = nullptr;
43
43
  char* result = nullptr;
44
44
  #if defined(GPR_BACKWARDS_COMPATIBILITY_MODE)
@@ -79,4 +79,9 @@ void gpr_setenv(const char* name, const char* value) {
79
79
  GPR_ASSERT(res == 0);
80
80
  }
81
81
 
82
+ void gpr_unsetenv(const char* name) {
83
+ int res = unsetenv(name);
84
+ GPR_ASSERT(res == 0);
85
+ }
86
+
82
87
  #endif /* GPR_LINUX_ENV */
@@ -44,4 +44,9 @@ void gpr_setenv(const char* name, const char* value) {
44
44
  GPR_ASSERT(res == 0);
45
45
  }
46
46
 
47
+ void gpr_unsetenv(const char* name) {
48
+ int res = unsetenv(name);
49
+ GPR_ASSERT(res == 0);
50
+ }
51
+
47
52
  #endif /* GPR_POSIX_ENV */
@@ -30,11 +30,6 @@
30
30
  #include "src/core/lib/gpr/string.h"
31
31
  #include "src/core/lib/gpr/string_windows.h"
32
32
 
33
- const char* gpr_getenv_silent(const char* name, char** dst) {
34
- *dst = gpr_getenv(name);
35
- return NULL;
36
- }
37
-
38
33
  char* gpr_getenv(const char* name) {
39
34
  char* result = NULL;
40
35
  DWORD size;
@@ -69,4 +64,11 @@ void gpr_setenv(const char* name, const char* value) {
69
64
  GPR_ASSERT(res);
70
65
  }
71
66
 
67
+ void gpr_unsetenv(const char* name) {
68
+ LPTSTR tname = gpr_char_to_tchar(name);
69
+ BOOL res = SetEnvironmentVariable(tname, NULL);
70
+ gpr_free(tname);
71
+ GPR_ASSERT(res);
72
+ }
73
+
72
74
  #endif /* GPR_WINDOWS_ENV */
@@ -22,12 +22,15 @@
22
22
  #include <grpc/support/atm.h>
23
23
  #include <grpc/support/log.h>
24
24
 
25
- #include "src/core/lib/gpr/env.h"
26
25
  #include "src/core/lib/gpr/string.h"
26
+ #include "src/core/lib/gprpp/global_config.h"
27
27
 
28
28
  #include <stdio.h>
29
29
  #include <string.h>
30
30
 
31
+ GPR_GLOBAL_CONFIG_DEFINE_STRING(grpc_verbosity, "ERROR",
32
+ "Default gRPC logging verbosity")
33
+
31
34
  void gpr_default_log(gpr_log_func_args* args);
32
35
  static gpr_atm g_log_func = (gpr_atm)gpr_default_log;
33
36
  static gpr_atm g_min_severity_to_print = GPR_LOG_VERBOSITY_UNSET;
@@ -72,29 +75,22 @@ void gpr_set_log_verbosity(gpr_log_severity min_severity_to_print) {
72
75
  }
73
76
 
74
77
  void gpr_log_verbosity_init() {
75
- char* verbosity = nullptr;
76
- const char* insecure_getenv = gpr_getenv_silent("GRPC_VERBOSITY", &verbosity);
78
+ grpc_core::UniquePtr<char> verbosity = GPR_GLOBAL_CONFIG_GET(grpc_verbosity);
77
79
 
78
80
  gpr_atm min_severity_to_print = GPR_LOG_SEVERITY_ERROR;
79
- if (verbosity != nullptr) {
80
- if (gpr_stricmp(verbosity, "DEBUG") == 0) {
81
+ if (strlen(verbosity.get()) > 0) {
82
+ if (gpr_stricmp(verbosity.get(), "DEBUG") == 0) {
81
83
  min_severity_to_print = static_cast<gpr_atm>(GPR_LOG_SEVERITY_DEBUG);
82
- } else if (gpr_stricmp(verbosity, "INFO") == 0) {
84
+ } else if (gpr_stricmp(verbosity.get(), "INFO") == 0) {
83
85
  min_severity_to_print = static_cast<gpr_atm>(GPR_LOG_SEVERITY_INFO);
84
- } else if (gpr_stricmp(verbosity, "ERROR") == 0) {
86
+ } else if (gpr_stricmp(verbosity.get(), "ERROR") == 0) {
85
87
  min_severity_to_print = static_cast<gpr_atm>(GPR_LOG_SEVERITY_ERROR);
86
88
  }
87
- gpr_free(verbosity);
88
89
  }
89
90
  if ((gpr_atm_no_barrier_load(&g_min_severity_to_print)) ==
90
91
  GPR_LOG_VERBOSITY_UNSET) {
91
92
  gpr_atm_no_barrier_store(&g_min_severity_to_print, min_severity_to_print);
92
93
  }
93
-
94
- if (insecure_getenv != nullptr) {
95
- gpr_log(GPR_DEBUG, "Warning: insecure environment read function '%s' used",
96
- insecure_getenv);
97
- }
98
94
  }
99
95
 
100
96
  void gpr_set_log_function(gpr_log_func f) {
@@ -24,6 +24,7 @@
24
24
  #include <grpc/support/log.h>
25
25
  #include <grpc/support/string_util.h>
26
26
  #include <grpc/support/time.h>
27
+ #include <inttypes.h>
27
28
  #include <pthread.h>
28
29
  #include <stdarg.h>
29
30
  #include <stdio.h>
@@ -83,7 +84,7 @@ void gpr_default_log(gpr_log_func_args* args) {
83
84
  }
84
85
 
85
86
  char* prefix;
86
- gpr_asprintf(&prefix, "%s%s.%09d %7tu %s:%d]",
87
+ gpr_asprintf(&prefix, "%s%s.%09d %7" PRIdPTR " %s:%d]",
87
88
  gpr_log_severity_string(args->severity), time_buffer,
88
89
  (int)(now.tv_nsec), gettid(), display_file, args->line);
89
90