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,97 @@
1
+ //
2
+ //
3
+ // Copyright 2018 gRPC authors.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+ // You may obtain a copy of the License at
8
+ //
9
+ // http://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing, software
12
+ // distributed under the License is distributed on an "AS IS" BASIS,
13
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ // See the License for the specific language governing permissions and
15
+ // limitations under the License.
16
+ //
17
+ //
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include "src/core/ext/filters/client_channel/subchannel_pool_interface.h"
22
+
23
+ #include "src/core/lib/gpr/useful.h"
24
+
25
+ // The subchannel pool to reuse subchannels.
26
+ #define GRPC_ARG_SUBCHANNEL_POOL "grpc.subchannel_pool"
27
+ // The subchannel key ID that is only used in test to make each key unique.
28
+ #define GRPC_ARG_SUBCHANNEL_KEY_TEST_ONLY_ID "grpc.subchannel_key_test_only_id"
29
+
30
+ namespace grpc_core {
31
+
32
+ TraceFlag grpc_subchannel_pool_trace(false, "subchannel_pool");
33
+
34
+ SubchannelKey::SubchannelKey(const grpc_channel_args* args) {
35
+ Init(args, grpc_channel_args_normalize);
36
+ }
37
+
38
+ SubchannelKey::~SubchannelKey() {
39
+ grpc_channel_args_destroy(const_cast<grpc_channel_args*>(args_));
40
+ }
41
+
42
+ SubchannelKey::SubchannelKey(const SubchannelKey& other) {
43
+ Init(other.args_, grpc_channel_args_copy);
44
+ }
45
+
46
+ SubchannelKey& SubchannelKey::operator=(const SubchannelKey& other) {
47
+ grpc_channel_args_destroy(const_cast<grpc_channel_args*>(args_));
48
+ Init(other.args_, grpc_channel_args_copy);
49
+ return *this;
50
+ }
51
+
52
+ int SubchannelKey::Cmp(const SubchannelKey& other) const {
53
+ return grpc_channel_args_compare(args_, other.args_);
54
+ }
55
+
56
+ void SubchannelKey::Init(
57
+ const grpc_channel_args* args,
58
+ grpc_channel_args* (*copy_channel_args)(const grpc_channel_args* args)) {
59
+ args_ = copy_channel_args(args);
60
+ }
61
+
62
+ namespace {
63
+
64
+ void* arg_copy(void* p) {
65
+ auto* subchannel_pool = static_cast<SubchannelPoolInterface*>(p);
66
+ subchannel_pool->Ref().release();
67
+ return p;
68
+ }
69
+
70
+ void arg_destroy(void* p) {
71
+ auto* subchannel_pool = static_cast<SubchannelPoolInterface*>(p);
72
+ subchannel_pool->Unref();
73
+ }
74
+
75
+ int arg_cmp(void* a, void* b) { return GPR_ICMP(a, b); }
76
+
77
+ const grpc_arg_pointer_vtable subchannel_pool_arg_vtable = {
78
+ arg_copy, arg_destroy, arg_cmp};
79
+
80
+ } // namespace
81
+
82
+ grpc_arg SubchannelPoolInterface::CreateChannelArg(
83
+ SubchannelPoolInterface* subchannel_pool) {
84
+ return grpc_channel_arg_pointer_create(
85
+ const_cast<char*>(GRPC_ARG_SUBCHANNEL_POOL), subchannel_pool,
86
+ &subchannel_pool_arg_vtable);
87
+ }
88
+
89
+ SubchannelPoolInterface*
90
+ SubchannelPoolInterface::GetSubchannelPoolFromChannelArgs(
91
+ const grpc_channel_args* args) {
92
+ const grpc_arg* arg = grpc_channel_args_find(args, GRPC_ARG_SUBCHANNEL_POOL);
93
+ if (arg == nullptr || arg->type != GRPC_ARG_POINTER) return nullptr;
94
+ return static_cast<SubchannelPoolInterface*>(arg->value.pointer.p);
95
+ }
96
+
97
+ } // namespace grpc_core
@@ -0,0 +1,94 @@
1
+ /*
2
+ *
3
+ * Copyright 2018 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_POOL_INTERFACE_H
20
+ #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_POOL_INTERFACE_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include "src/core/lib/avl/avl.h"
25
+ #include "src/core/lib/channel/channel_args.h"
26
+ #include "src/core/lib/gprpp/abstract.h"
27
+ #include "src/core/lib/gprpp/ref_counted.h"
28
+
29
+ namespace grpc_core {
30
+
31
+ class Subchannel;
32
+
33
+ extern TraceFlag grpc_subchannel_pool_trace;
34
+
35
+ // A key that can uniquely identify a subchannel.
36
+ class SubchannelKey {
37
+ public:
38
+ explicit SubchannelKey(const grpc_channel_args* args);
39
+ ~SubchannelKey();
40
+
41
+ // Copyable.
42
+ SubchannelKey(const SubchannelKey& other);
43
+ SubchannelKey& operator=(const SubchannelKey& other);
44
+ // Not movable.
45
+ SubchannelKey(SubchannelKey&&) = delete;
46
+ SubchannelKey& operator=(SubchannelKey&&) = delete;
47
+
48
+ int Cmp(const SubchannelKey& other) const;
49
+
50
+ private:
51
+ // Initializes the subchannel key with the given \a args and the function to
52
+ // copy channel args.
53
+ void Init(
54
+ const grpc_channel_args* args,
55
+ grpc_channel_args* (*copy_channel_args)(const grpc_channel_args* args));
56
+
57
+ const grpc_channel_args* args_;
58
+ };
59
+
60
+ // Interface for subchannel pool.
61
+ // TODO(juanlishen): This refcounting mechanism may lead to memory leak.
62
+ // To solve that, we should force polling to flush any pending callbacks, then
63
+ // shut down safely. See https://github.com/grpc/grpc/issues/12560.
64
+ class SubchannelPoolInterface : public RefCounted<SubchannelPoolInterface> {
65
+ public:
66
+ SubchannelPoolInterface() : RefCounted(&grpc_subchannel_pool_trace) {}
67
+ virtual ~SubchannelPoolInterface() {}
68
+
69
+ // Registers a subchannel against a key. Returns the subchannel registered
70
+ // with \a key, which may be different from \a constructed because we reuse
71
+ // (instead of update) any existing subchannel already registered with \a key.
72
+ virtual Subchannel* RegisterSubchannel(SubchannelKey* key,
73
+ Subchannel* constructed) GRPC_ABSTRACT;
74
+
75
+ // Removes the registered subchannel found by \a key.
76
+ virtual void UnregisterSubchannel(SubchannelKey* key) GRPC_ABSTRACT;
77
+
78
+ // Finds the subchannel registered for the given subchannel key. Returns NULL
79
+ // if no such channel exists. Thread-safe.
80
+ virtual Subchannel* FindSubchannel(SubchannelKey* key) GRPC_ABSTRACT;
81
+
82
+ // Creates a channel arg from \a subchannel pool.
83
+ static grpc_arg CreateChannelArg(SubchannelPoolInterface* subchannel_pool);
84
+
85
+ // Gets the subchannel pool from the channel args.
86
+ static SubchannelPoolInterface* GetSubchannelPoolFromChannelArgs(
87
+ const grpc_channel_args* args);
88
+
89
+ GRPC_ABSTRACT_BASE_CLASS
90
+ };
91
+
92
+ } // namespace grpc_core
93
+
94
+ #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_POOL_INTERFACE_H */
@@ -68,8 +68,7 @@ static void timer_callback(void* arg, grpc_error* error) {
68
68
  error = grpc_error_set_int(
69
69
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Deadline Exceeded"),
70
70
  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_DEADLINE_EXCEEDED);
71
- grpc_call_combiner_cancel(deadline_state->call_combiner,
72
- GRPC_ERROR_REF(error));
71
+ deadline_state->call_combiner->Cancel(GRPC_ERROR_REF(error));
73
72
  GRPC_CLOSURE_INIT(&deadline_state->timer_callback,
74
73
  send_cancel_op_in_call_combiner, elem,
75
74
  grpc_schedule_on_exec_ctx);
@@ -124,7 +123,7 @@ static void cancel_timer_if_needed(grpc_deadline_state* deadline_state) {
124
123
  deadline_state->timer_state = GRPC_DEADLINE_STATE_FINISHED;
125
124
  grpc_timer_cancel(&deadline_state->timer);
126
125
  } else {
127
- // timer was either in STATE_INITAL (nothing to cancel)
126
+ // timer was either in STATE_INITIAL (nothing to cancel)
128
127
  // OR in STATE_FINISHED (again nothing to cancel)
129
128
  }
130
129
  }
@@ -183,7 +182,7 @@ static void start_timer_after_init(void* arg, grpc_error* error) {
183
182
 
184
183
  grpc_deadline_state::grpc_deadline_state(grpc_call_element* elem,
185
184
  grpc_call_stack* call_stack,
186
- grpc_call_combiner* call_combiner,
185
+ grpc_core::CallCombiner* call_combiner,
187
186
  grpc_millis deadline)
188
187
  : call_stack(call_stack), call_combiner(call_combiner) {
189
188
  // Deadline will always be infinite on servers, so the timer will only be
@@ -32,12 +32,13 @@ enum grpc_deadline_timer_state {
32
32
  // Must be the first field in the filter's call_data.
33
33
  struct grpc_deadline_state {
34
34
  grpc_deadline_state(grpc_call_element* elem, grpc_call_stack* call_stack,
35
- grpc_call_combiner* call_combiner, grpc_millis deadline);
35
+ grpc_core::CallCombiner* call_combiner,
36
+ grpc_millis deadline);
36
37
  ~grpc_deadline_state();
37
38
 
38
39
  // We take a reference to the call stack for the timer callback.
39
40
  grpc_call_stack* call_stack;
40
- grpc_call_combiner* call_combiner;
41
+ grpc_core::CallCombiner* call_combiner;
41
42
  grpc_deadline_timer_state timer_state = GRPC_DEADLINE_STATE_INITIAL;
42
43
  grpc_timer timer;
43
44
  grpc_closure timer_callback;
@@ -36,7 +36,7 @@
36
36
  #define EXPECTED_CONTENT_TYPE "application/grpc"
37
37
  #define EXPECTED_CONTENT_TYPE_LENGTH sizeof(EXPECTED_CONTENT_TYPE) - 1
38
38
 
39
- /* default maximum size of payload eligable for GET request */
39
+ /* default maximum size of payload eligible for GET request */
40
40
  static constexpr size_t kMaxPayloadSizeForGet = 2048;
41
41
 
42
42
  static void recv_initial_metadata_ready(void* user_data, grpc_error* error);
@@ -62,7 +62,7 @@ struct call_data {
62
62
 
63
63
  ~call_data() { GRPC_ERROR_UNREF(recv_initial_metadata_error); }
64
64
 
65
- grpc_call_combiner* call_combiner;
65
+ grpc_core::CallCombiner* call_combiner;
66
66
  // State for handling send_initial_metadata ops.
67
67
  grpc_linked_mdelem method;
68
68
  grpc_linked_mdelem scheme;
@@ -107,7 +107,8 @@ static grpc_error* client_filter_incoming_metadata(grpc_call_element* elem,
107
107
  * https://github.com/grpc/grpc/blob/master/doc/http-grpc-status-mapping.md.
108
108
  */
109
109
  if (b->idx.named.grpc_status != nullptr ||
110
- grpc_mdelem_eq(b->idx.named.status->md, GRPC_MDELEM_STATUS_200)) {
110
+ grpc_mdelem_static_value_eq(b->idx.named.status->md,
111
+ GRPC_MDELEM_STATUS_200)) {
111
112
  grpc_metadata_batch_remove(b, b->idx.named.status);
112
113
  } else {
113
114
  char* val = grpc_dump_slice(GRPC_MDVALUE(b->idx.named.status->md),
@@ -140,8 +141,9 @@ static grpc_error* client_filter_incoming_metadata(grpc_call_element* elem,
140
141
  }
141
142
 
142
143
  if (b->idx.named.content_type != nullptr) {
143
- if (!grpc_mdelem_eq(b->idx.named.content_type->md,
144
- GRPC_MDELEM_CONTENT_TYPE_APPLICATION_SLASH_GRPC)) {
144
+ if (!grpc_mdelem_static_value_eq(
145
+ b->idx.named.content_type->md,
146
+ GRPC_MDELEM_CONTENT_TYPE_APPLICATION_SLASH_GRPC)) {
145
147
  if (grpc_slice_buf_start_eq(GRPC_MDVALUE(b->idx.named.content_type->md),
146
148
  EXPECTED_CONTENT_TYPE,
147
149
  EXPECTED_CONTENT_TYPE_LENGTH) &&
@@ -25,7 +25,7 @@
25
25
  /* Processes metadata on the client side for HTTP2 transports */
26
26
  extern const grpc_channel_filter grpc_http_client_filter;
27
27
 
28
- /* Channel arg to determine maximum size of payload eligable for GET request */
28
+ /* Channel arg to determine maximum size of payload eligible for GET request */
29
29
  #define GRPC_ARG_MAX_PAYLOAD_SIZE_FOR_GET "grpc.max_payload_size_for_get"
30
30
 
31
31
  #endif /* GRPC_CORE_EXT_FILTERS_HTTP_CLIENT_HTTP_CLIENT_FILTER_H */
@@ -40,11 +40,12 @@ namespace {
40
40
 
41
41
  struct call_data {
42
42
  grpc_linked_mdelem authority_storage;
43
- grpc_call_combiner* call_combiner;
43
+ grpc_core::CallCombiner* call_combiner;
44
44
  };
45
45
 
46
46
  struct channel_data {
47
47
  grpc_slice default_authority;
48
+ grpc_mdelem default_authority_mdelem;
48
49
  };
49
50
 
50
51
  void authority_start_transport_stream_op_batch(
@@ -59,8 +60,7 @@ void authority_start_transport_stream_op_batch(
59
60
  initial_metadata->idx.named.authority == nullptr) {
60
61
  grpc_error* error = grpc_metadata_batch_add_head(
61
62
  initial_metadata, &calld->authority_storage,
62
- grpc_mdelem_create(GRPC_MDSTR_AUTHORITY, chand->default_authority,
63
- nullptr));
63
+ GRPC_MDELEM_REF(chand->default_authority_mdelem));
64
64
  if (error != GRPC_ERROR_NONE) {
65
65
  grpc_transport_stream_op_batch_finish_with_failure(batch, error,
66
66
  calld->call_combiner);
@@ -103,6 +103,8 @@ grpc_error* init_channel_elem(grpc_channel_element* elem,
103
103
  }
104
104
  chand->default_authority =
105
105
  grpc_slice_intern(grpc_slice_from_static_string(default_authority_str));
106
+ chand->default_authority_mdelem = grpc_mdelem_create(
107
+ GRPC_MDSTR_AUTHORITY, chand->default_authority, nullptr);
106
108
  GPR_ASSERT(!args->is_last);
107
109
  return GRPC_ERROR_NONE;
108
110
  }
@@ -111,6 +113,7 @@ grpc_error* init_channel_elem(grpc_channel_element* elem,
111
113
  void destroy_channel_elem(grpc_channel_element* elem) {
112
114
  channel_data* chand = static_cast<channel_data*>(elem->channel_data);
113
115
  grpc_slice_unref_internal(chand->default_authority);
116
+ GRPC_MDELEM_UNREF(chand->default_authority_mdelem);
114
117
  }
115
118
  } // namespace
116
119
 
@@ -29,6 +29,7 @@
29
29
  #include "src/core/ext/filters/http/message_compress/message_compress_filter.h"
30
30
  #include "src/core/lib/channel/channel_args.h"
31
31
  #include "src/core/lib/compression/algorithm_metadata.h"
32
+ #include "src/core/lib/compression/compression_args.h"
32
33
  #include "src/core/lib/compression/compression_internal.h"
33
34
  #include "src/core/lib/compression/message_compress.h"
34
35
  #include "src/core/lib/gpr/string.h"
@@ -71,7 +72,7 @@ struct call_data {
71
72
  GRPC_ERROR_UNREF(cancel_error);
72
73
  }
73
74
 
74
- grpc_call_combiner* call_combiner;
75
+ grpc_core::CallCombiner* call_combiner;
75
76
  grpc_linked_mdelem compression_algorithm_storage;
76
77
  grpc_linked_mdelem stream_compression_algorithm_storage;
77
78
  grpc_linked_mdelem accept_encoding_storage;
@@ -248,7 +249,7 @@ static void finish_send_message(grpc_call_element* elem) {
248
249
  bool did_compress = grpc_msg_compress(calld->message_compression_algorithm,
249
250
  &calld->slices, &tmp);
250
251
  if (did_compress) {
251
- if (grpc_compression_trace.enabled()) {
252
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
252
253
  const char* algo_name;
253
254
  const size_t before_size = calld->slices.length;
254
255
  const size_t after_size = tmp.length;
@@ -264,7 +265,7 @@ static void finish_send_message(grpc_call_element* elem) {
264
265
  grpc_slice_buffer_swap(&calld->slices, &tmp);
265
266
  send_flags |= GRPC_WRITE_INTERNAL_COMPRESS;
266
267
  } else {
267
- if (grpc_compression_trace.enabled()) {
268
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
268
269
  const char* algo_name;
269
270
  GPR_ASSERT(grpc_message_compression_algorithm_name(
270
271
  calld->message_compression_algorithm, &algo_name));
@@ -61,7 +61,7 @@ struct call_data {
61
61
  }
62
62
  }
63
63
 
64
- grpc_call_combiner* call_combiner;
64
+ grpc_core::CallCombiner* call_combiner;
65
65
 
66
66
  // Outgoing headers to add to send_initial_metadata.
67
67
  grpc_linked_mdelem status;
@@ -131,18 +131,19 @@ static grpc_error* hs_filter_incoming_metadata(grpc_call_element* elem,
131
131
  static const char* error_name = "Failed processing incoming headers";
132
132
 
133
133
  if (b->idx.named.method != nullptr) {
134
- if (grpc_mdelem_eq(b->idx.named.method->md, GRPC_MDELEM_METHOD_POST)) {
134
+ if (grpc_mdelem_static_value_eq(b->idx.named.method->md,
135
+ GRPC_MDELEM_METHOD_POST)) {
135
136
  *calld->recv_initial_metadata_flags &=
136
137
  ~(GRPC_INITIAL_METADATA_CACHEABLE_REQUEST |
137
138
  GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST);
138
- } else if (grpc_mdelem_eq(b->idx.named.method->md,
139
- GRPC_MDELEM_METHOD_PUT)) {
139
+ } else if (grpc_mdelem_static_value_eq(b->idx.named.method->md,
140
+ GRPC_MDELEM_METHOD_PUT)) {
140
141
  *calld->recv_initial_metadata_flags &=
141
142
  ~GRPC_INITIAL_METADATA_CACHEABLE_REQUEST;
142
143
  *calld->recv_initial_metadata_flags |=
143
144
  GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST;
144
- } else if (grpc_mdelem_eq(b->idx.named.method->md,
145
- GRPC_MDELEM_METHOD_GET)) {
145
+ } else if (grpc_mdelem_static_value_eq(b->idx.named.method->md,
146
+ GRPC_MDELEM_METHOD_GET)) {
146
147
  *calld->recv_initial_metadata_flags |=
147
148
  GRPC_INITIAL_METADATA_CACHEABLE_REQUEST;
148
149
  *calld->recv_initial_metadata_flags &=
@@ -163,7 +164,8 @@ static grpc_error* hs_filter_incoming_metadata(grpc_call_element* elem,
163
164
  }
164
165
 
165
166
  if (b->idx.named.te != nullptr) {
166
- if (!grpc_mdelem_eq(b->idx.named.te->md, GRPC_MDELEM_TE_TRAILERS)) {
167
+ if (!grpc_mdelem_static_value_eq(b->idx.named.te->md,
168
+ GRPC_MDELEM_TE_TRAILERS)) {
167
169
  hs_add_error(error_name, &error,
168
170
  grpc_attach_md_to_error(
169
171
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Bad header"),
@@ -178,9 +180,12 @@ static grpc_error* hs_filter_incoming_metadata(grpc_call_element* elem,
178
180
  }
179
181
 
180
182
  if (b->idx.named.scheme != nullptr) {
181
- if (!grpc_mdelem_eq(b->idx.named.scheme->md, GRPC_MDELEM_SCHEME_HTTP) &&
182
- !grpc_mdelem_eq(b->idx.named.scheme->md, GRPC_MDELEM_SCHEME_HTTPS) &&
183
- !grpc_mdelem_eq(b->idx.named.scheme->md, GRPC_MDELEM_SCHEME_GRPC)) {
183
+ if (!grpc_mdelem_static_value_eq(b->idx.named.scheme->md,
184
+ GRPC_MDELEM_SCHEME_HTTP) &&
185
+ !grpc_mdelem_static_value_eq(b->idx.named.scheme->md,
186
+ GRPC_MDELEM_SCHEME_HTTPS) &&
187
+ !grpc_mdelem_static_value_eq(b->idx.named.scheme->md,
188
+ GRPC_MDELEM_SCHEME_GRPC)) {
184
189
  hs_add_error(error_name, &error,
185
190
  grpc_attach_md_to_error(
186
191
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Bad header"),
@@ -196,8 +201,9 @@ static grpc_error* hs_filter_incoming_metadata(grpc_call_element* elem,
196
201
  }
197
202
 
198
203
  if (b->idx.named.content_type != nullptr) {
199
- if (!grpc_mdelem_eq(b->idx.named.content_type->md,
200
- GRPC_MDELEM_CONTENT_TYPE_APPLICATION_SLASH_GRPC)) {
204
+ if (!grpc_mdelem_static_value_eq(
205
+ b->idx.named.content_type->md,
206
+ GRPC_MDELEM_CONTENT_TYPE_APPLICATION_SLASH_GRPC)) {
201
207
  if (grpc_slice_buf_start_eq(GRPC_MDVALUE(b->idx.named.content_type->md),
202
208
  EXPECTED_CONTENT_TYPE,
203
209
  EXPECTED_CONTENT_TYPE_LENGTH) &&
@@ -106,7 +106,7 @@ struct channel_data {
106
106
  +--------------------------------+----------------+---------+
107
107
 
108
108
  MAX_IDLE_STATE_INIT: The initial and final state of 'idle_state'. The
109
- channel has 1 or 1+ active calls, and the the timer is not set. Note that
109
+ channel has 1 or 1+ active calls, and the timer is not set. Note that
110
110
  we may put a virtual call to hold this state at channel initialization or
111
111
  shutdown, so that the channel won't enter other states.
112
112
 
@@ -499,7 +499,10 @@ static grpc_error* init_channel_elem(grpc_channel_element* elem,
499
499
  }
500
500
 
501
501
  /* Destructor for channel_data. */
502
- static void destroy_channel_elem(grpc_channel_element* elem) {}
502
+ static void destroy_channel_elem(grpc_channel_element* elem) {
503
+ channel_data* chand = static_cast<channel_data*>(elem->channel_data);
504
+ gpr_mu_destroy(&chand->max_age_timer_mu);
505
+ }
503
506
 
504
507
  const grpc_channel_filter grpc_max_age_filter = {
505
508
  grpc_call_next_op,