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,436 @@
1
+ /*
2
+ *
3
+ * Copyright 2017 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #ifndef GRPC_CORE_LIB_GPRPP_MAP_H
20
+ #define GRPC_CORE_LIB_GPRPP_MAP_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include <string.h>
25
+
26
+ #include <algorithm>
27
+ #include <functional>
28
+ #include <iterator>
29
+
30
+ #include "src/core/lib/gpr/useful.h"
31
+ #include "src/core/lib/gprpp/memory.h"
32
+ #include "src/core/lib/gprpp/pair.h"
33
+
34
+ namespace grpc_core {
35
+ struct StringLess {
36
+ bool operator()(const char* a, const char* b) const {
37
+ return strcmp(a, b) < 0;
38
+ }
39
+ bool operator()(const UniquePtr<char>& k1, const UniquePtr<char>& k2) {
40
+ return strcmp(k1.get(), k2.get()) < 0;
41
+ }
42
+ };
43
+
44
+ namespace testing {
45
+ class MapTest;
46
+ }
47
+
48
+ // Alternative map implementation for grpc_core
49
+ template <class Key, class T, class Compare = std::less<Key>>
50
+ class Map {
51
+ public:
52
+ typedef Key key_type;
53
+ typedef T mapped_type;
54
+ typedef Pair<key_type, mapped_type> value_type;
55
+ typedef Compare key_compare;
56
+ class iterator;
57
+
58
+ ~Map() { clear(); }
59
+
60
+ T& operator[](key_type&& key);
61
+ T& operator[](const key_type& key);
62
+ iterator find(const key_type& k);
63
+ size_t erase(const key_type& key);
64
+ // Removes the current entry and points to the next one
65
+ iterator erase(iterator iter);
66
+
67
+ size_t size() { return size_; }
68
+
69
+ template <class... Args>
70
+ Pair<iterator, bool> emplace(Args&&... args);
71
+
72
+ Pair<iterator, bool> insert(value_type&& pair) {
73
+ return emplace(std::move(pair));
74
+ }
75
+
76
+ Pair<iterator, bool> insert(const value_type& pair) { return emplace(pair); }
77
+
78
+ bool empty() const { return root_ == nullptr; }
79
+
80
+ void clear() {
81
+ auto iter = begin();
82
+ while (!empty()) {
83
+ iter = erase(iter);
84
+ }
85
+ }
86
+
87
+ iterator begin() {
88
+ Entry* curr = GetMinEntry(root_);
89
+ return iterator(this, curr);
90
+ }
91
+
92
+ iterator end() { return iterator(this, nullptr); }
93
+
94
+ iterator lower_bound(const Key& k) {
95
+ key_compare compare;
96
+ return std::find_if(begin(), end(), [&k, &compare](const value_type& v) {
97
+ return !compare(v.first, k);
98
+ });
99
+ }
100
+
101
+ private:
102
+ friend class testing::MapTest;
103
+ struct Entry {
104
+ explicit Entry(value_type&& pair) : pair(std::move(pair)) {}
105
+ value_type pair;
106
+ Entry* left = nullptr;
107
+ Entry* right = nullptr;
108
+ int32_t height = 1;
109
+ };
110
+
111
+ static int32_t EntryHeight(const Entry* e) {
112
+ return e == nullptr ? 0 : e->height;
113
+ }
114
+
115
+ static Entry* GetMinEntry(Entry* e);
116
+ Entry* InOrderSuccessor(const Entry* e) const;
117
+ static Entry* RotateLeft(Entry* e);
118
+ static Entry* RotateRight(Entry* e);
119
+ static Entry* RebalanceTreeAfterInsertion(Entry* root, const key_type& k);
120
+ static Entry* RebalanceTreeAfterDeletion(Entry* root);
121
+ // Returns a pair with the first value being an iterator pointing to the
122
+ // inserted entry and the second value being the new root of the subtree
123
+ // after a rebalance
124
+ Pair<iterator, Entry*> InsertRecursive(Entry* root, value_type&& p);
125
+ // Returns a pair with the first value being an iterator pointing to the
126
+ // successor of the deleted entry and the second value being the new root of
127
+ // the subtree after a rebalance
128
+ Pair<iterator, Entry*> RemoveRecursive(Entry* root, const key_type& k);
129
+ // Return 0 if lhs = rhs
130
+ // 1 if lhs > rhs
131
+ // -1 if lhs < rhs
132
+ static int CompareKeys(const Key& lhs, const Key& rhs);
133
+
134
+ Entry* root_ = nullptr;
135
+ size_t size_ = 0;
136
+ };
137
+
138
+ template <class Key, class T, class Compare>
139
+ class Map<Key, T, Compare>::iterator
140
+ : public std::iterator<std::input_iterator_tag, Pair<Key, T>, int32_t,
141
+ Pair<Key, T>*, Pair<Key, T>&> {
142
+ public:
143
+ iterator(const iterator& iter) : curr_(iter.curr_), map_(iter.map_) {}
144
+ bool operator==(const iterator& rhs) const { return (curr_ == rhs.curr_); }
145
+ bool operator!=(const iterator& rhs) const { return (curr_ != rhs.curr_); }
146
+
147
+ iterator& operator++() {
148
+ curr_ = map_->InOrderSuccessor(curr_);
149
+ return *this;
150
+ }
151
+
152
+ iterator operator++(int) {
153
+ Entry* prev = curr_;
154
+ curr_ = map_->InOrderSuccessor(curr_);
155
+ return iterator(map_, prev);
156
+ }
157
+
158
+ iterator& operator=(const iterator& other) {
159
+ if (this != &other) {
160
+ this->curr_ = other.curr_;
161
+ this->map_ = other.map_;
162
+ }
163
+ return *this;
164
+ }
165
+
166
+ // operator*()
167
+ value_type& operator*() { return curr_->pair; }
168
+ const value_type& operator*() const { return curr_->pair; }
169
+
170
+ // operator->()
171
+ value_type* operator->() { return &curr_->pair; }
172
+ value_type const* operator->() const { return &curr_->pair; }
173
+
174
+ private:
175
+ friend class Map<key_type, mapped_type, key_compare>;
176
+ using GrpcMap = typename ::grpc_core::Map<Key, T, Compare>;
177
+ iterator(GrpcMap* map, Entry* curr) : curr_(curr), map_(map) {}
178
+ Entry* curr_;
179
+ GrpcMap* map_;
180
+ };
181
+
182
+ template <class Key, class T, class Compare>
183
+ T& Map<Key, T, Compare>::operator[](key_type&& key) {
184
+ auto iter = find(key);
185
+ if (iter == end()) {
186
+ return emplace(std::move(key), T()).first->second;
187
+ }
188
+ return iter->second;
189
+ }
190
+
191
+ template <class Key, class T, class Compare>
192
+ T& Map<Key, T, Compare>::operator[](const key_type& key) {
193
+ auto iter = find(key);
194
+ if (iter == end()) {
195
+ return emplace(key, T()).first->second;
196
+ }
197
+ return iter->second;
198
+ }
199
+
200
+ template <class Key, class T, class Compare>
201
+ typename Map<Key, T, Compare>::iterator Map<Key, T, Compare>::find(
202
+ const key_type& k) {
203
+ Entry* iter = root_;
204
+ while (iter != nullptr) {
205
+ int comp = CompareKeys(iter->pair.first, k);
206
+ if (comp == 0) {
207
+ return iterator(this, iter);
208
+ } else if (comp < 0) {
209
+ iter = iter->right;
210
+ } else {
211
+ iter = iter->left;
212
+ }
213
+ }
214
+ return end();
215
+ }
216
+
217
+ template <class Key, class T, class Compare>
218
+ template <class... Args>
219
+ typename ::grpc_core::Pair<typename Map<Key, T, Compare>::iterator, bool>
220
+ Map<Key, T, Compare>::emplace(Args&&... args) {
221
+ Pair<key_type, mapped_type> pair(std::forward<Args>(args)...);
222
+ iterator ret = find(pair.first);
223
+ bool insertion = false;
224
+ if (ret == end()) {
225
+ Pair<iterator, Entry*> p = InsertRecursive(root_, std::move(pair));
226
+ root_ = p.second;
227
+ ret = p.first;
228
+ insertion = true;
229
+ size_++;
230
+ }
231
+ return MakePair(ret, insertion);
232
+ }
233
+
234
+ template <class Key, class T, class Compare>
235
+ size_t Map<Key, T, Compare>::erase(const key_type& key) {
236
+ iterator it = find(key);
237
+ if (it == end()) return 0;
238
+ erase(it);
239
+ return 1;
240
+ }
241
+
242
+ // TODO(mhaidry): Modify erase to use the iterator location
243
+ // to create an efficient erase method
244
+ template <class Key, class T, class Compare>
245
+ typename Map<Key, T, Compare>::iterator Map<Key, T, Compare>::erase(
246
+ iterator iter) {
247
+ if (iter == end()) return iter;
248
+ key_type& del_key = iter->first;
249
+ Pair<iterator, Entry*> ret = RemoveRecursive(root_, del_key);
250
+ root_ = ret.second;
251
+ size_--;
252
+ return ret.first;
253
+ }
254
+
255
+ template <class Key, class T, class Compare>
256
+ typename Map<Key, T, Compare>::Entry* Map<Key, T, Compare>::InOrderSuccessor(
257
+ const Entry* e) const {
258
+ if (e->right != nullptr) {
259
+ return GetMinEntry(e->right);
260
+ }
261
+ Entry* successor = nullptr;
262
+ Entry* iter = root_;
263
+ while (iter != nullptr) {
264
+ int comp = CompareKeys(iter->pair.first, e->pair.first);
265
+ if (comp > 0) {
266
+ successor = iter;
267
+ iter = iter->left;
268
+ } else if (comp < 0) {
269
+ iter = iter->right;
270
+ } else
271
+ break;
272
+ }
273
+ return successor;
274
+ }
275
+
276
+ // Returns a pair with the first value being an iterator pointing to the
277
+ // inserted entry and the second value being the new root of the subtree
278
+ // after a rebalance
279
+ template <class Key, class T, class Compare>
280
+ typename ::grpc_core::Pair<typename Map<Key, T, Compare>::iterator,
281
+ typename Map<Key, T, Compare>::Entry*>
282
+ Map<Key, T, Compare>::InsertRecursive(Entry* root, value_type&& p) {
283
+ if (root == nullptr) {
284
+ Entry* e = New<Entry>(std::move(p));
285
+ return MakePair(iterator(this, e), e);
286
+ }
287
+ int comp = CompareKeys(root->pair.first, p.first);
288
+ if (comp > 0) {
289
+ Pair<iterator, Entry*> ret = InsertRecursive(root->left, std::move(p));
290
+ root->left = ret.second;
291
+ ret.second = RebalanceTreeAfterInsertion(root, ret.first->first);
292
+ return ret;
293
+ } else if (comp < 0) {
294
+ Pair<iterator, Entry*> ret = InsertRecursive(root->right, std::move(p));
295
+ root->right = ret.second;
296
+ ret.second = RebalanceTreeAfterInsertion(root, ret.first->first);
297
+ return ret;
298
+ } else {
299
+ root->pair = std::move(p);
300
+ return MakePair(iterator(this, root), root);
301
+ }
302
+ }
303
+
304
+ template <class Key, class T, class Compare>
305
+ typename Map<Key, T, Compare>::Entry* Map<Key, T, Compare>::GetMinEntry(
306
+ Entry* e) {
307
+ if (e != nullptr) {
308
+ while (e->left != nullptr) {
309
+ e = e->left;
310
+ }
311
+ }
312
+ return e;
313
+ }
314
+
315
+ template <class Key, class T, class Compare>
316
+ typename Map<Key, T, Compare>::Entry* Map<Key, T, Compare>::RotateLeft(
317
+ Entry* e) {
318
+ Entry* rightChild = e->right;
319
+ Entry* rightLeftChild = rightChild->left;
320
+ rightChild->left = e;
321
+ e->right = rightLeftChild;
322
+ e->height = 1 + GPR_MAX(EntryHeight(e->left), EntryHeight(e->right));
323
+ rightChild->height = 1 + GPR_MAX(EntryHeight(rightChild->left),
324
+ EntryHeight(rightChild->right));
325
+ return rightChild;
326
+ }
327
+
328
+ template <class Key, class T, class Compare>
329
+ typename Map<Key, T, Compare>::Entry* Map<Key, T, Compare>::RotateRight(
330
+ Entry* e) {
331
+ Entry* leftChild = e->left;
332
+ Entry* leftRightChild = leftChild->right;
333
+ leftChild->right = e;
334
+ e->left = leftRightChild;
335
+ e->height = 1 + GPR_MAX(EntryHeight(e->left), EntryHeight(e->right));
336
+ leftChild->height =
337
+ 1 + GPR_MAX(EntryHeight(leftChild->left), EntryHeight(leftChild->right));
338
+ return leftChild;
339
+ }
340
+
341
+ template <class Key, class T, class Compare>
342
+ typename Map<Key, T, Compare>::Entry*
343
+ Map<Key, T, Compare>::RebalanceTreeAfterInsertion(Entry* root,
344
+ const key_type& k) {
345
+ root->height = 1 + GPR_MAX(EntryHeight(root->left), EntryHeight(root->right));
346
+ int32_t heightDifference = EntryHeight(root->left) - EntryHeight(root->right);
347
+ if (heightDifference > 1 && CompareKeys(root->left->pair.first, k) > 0) {
348
+ return RotateRight(root);
349
+ }
350
+ if (heightDifference < -1 && CompareKeys(root->right->pair.first, k) < 0) {
351
+ return RotateLeft(root);
352
+ }
353
+ if (heightDifference > 1 && CompareKeys(root->left->pair.first, k) < 0) {
354
+ root->left = RotateLeft(root->left);
355
+ return RotateRight(root);
356
+ }
357
+ if (heightDifference < -1 && CompareKeys(root->right->pair.first, k) > 0) {
358
+ root->right = RotateRight(root->right);
359
+ return RotateLeft(root);
360
+ }
361
+ return root;
362
+ }
363
+
364
+ template <class Key, class T, class Compare>
365
+ typename Map<Key, T, Compare>::Entry*
366
+ Map<Key, T, Compare>::RebalanceTreeAfterDeletion(Entry* root) {
367
+ root->height = 1 + GPR_MAX(EntryHeight(root->left), EntryHeight(root->right));
368
+ int32_t heightDifference = EntryHeight(root->left) - EntryHeight(root->right);
369
+ if (heightDifference > 1) {
370
+ int leftHeightDifference =
371
+ EntryHeight(root->left->left) - EntryHeight(root->left->right);
372
+ if (leftHeightDifference < 0) {
373
+ root->left = RotateLeft(root->left);
374
+ }
375
+ return RotateRight(root);
376
+ }
377
+ if (heightDifference < -1) {
378
+ int rightHeightDifference =
379
+ EntryHeight(root->right->left) - EntryHeight(root->right->right);
380
+ if (rightHeightDifference > 0) {
381
+ root->right = RotateRight(root->right);
382
+ }
383
+ return RotateLeft(root);
384
+ }
385
+ return root;
386
+ }
387
+
388
+ template <class Key, class T, class Compare>
389
+ typename ::grpc_core::Pair<typename Map<Key, T, Compare>::iterator,
390
+ typename Map<Key, T, Compare>::Entry*>
391
+ Map<Key, T, Compare>::RemoveRecursive(Entry* root, const key_type& k) {
392
+ Pair<iterator, Entry*> ret = MakePair(end(), root);
393
+ if (root == nullptr) return ret;
394
+ int comp = CompareKeys(root->pair.first, k);
395
+ if (comp > 0) {
396
+ ret = RemoveRecursive(root->left, k);
397
+ root->left = ret.second;
398
+ } else if (comp < 0) {
399
+ ret = RemoveRecursive(root->right, k);
400
+ root->right = ret.second;
401
+ } else {
402
+ Entry* entry;
403
+ Entry* successor = InOrderSuccessor(root);
404
+ if (root->left == nullptr) {
405
+ entry = root->right;
406
+ Delete(root);
407
+ return MakePair(iterator(this, successor), entry);
408
+ } else if (root->right == nullptr) {
409
+ entry = root->left;
410
+ Delete(root);
411
+ return MakePair(iterator(this, successor), entry);
412
+ } else {
413
+ entry = successor;
414
+ root->pair.swap(entry->pair);
415
+ ret = RemoveRecursive(root->right, entry->pair.first);
416
+ root->right = ret.second;
417
+ ret.first = iterator(this, root);
418
+ }
419
+ }
420
+ return MakePair(ret.first, RebalanceTreeAfterDeletion(root));
421
+ }
422
+
423
+ template <class Key, class T, class Compare>
424
+ int Map<Key, T, Compare>::CompareKeys(const key_type& lhs,
425
+ const key_type& rhs) {
426
+ key_compare compare;
427
+ bool left_comparison = compare(lhs, rhs);
428
+ bool right_comparison = compare(rhs, lhs);
429
+ // Both values are equal
430
+ if (!left_comparison && !right_comparison) {
431
+ return 0;
432
+ }
433
+ return left_comparison ? -1 : 1;
434
+ }
435
+ } // namespace grpc_core
436
+ #endif /* GRPC_CORE_LIB_GPRPP_MAP_H */
@@ -29,12 +29,12 @@
29
29
 
30
30
  // Add this to a class that want to use Delete(), but has a private or
31
31
  // protected destructor.
32
- #define GPRC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE \
32
+ #define GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE \
33
33
  template <typename T> \
34
34
  friend void grpc_core::Delete(T*);
35
35
  // Add this to a class that want to use New(), but has a private or
36
36
  // protected constructor.
37
- #define GPRC_ALLOW_CLASS_TO_USE_NON_PUBLIC_NEW \
37
+ #define GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_NEW \
38
38
  template <typename T, typename... Args> \
39
39
  friend T* grpc_core::New(Args&&...);
40
40
 
@@ -0,0 +1,48 @@
1
+ /*
2
+ *
3
+ * Copyright 2019 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_GPRPP_OPTIONAL_H
20
+ #define GRPC_CORE_LIB_GPRPP_OPTIONAL_H
21
+
22
+ namespace grpc_core {
23
+
24
+ /* A make-shift alternative for absl::Optional. This can be removed in favor of
25
+ * that once absl dependencies can be introduced. */
26
+ template <typename T>
27
+ class Optional {
28
+ public:
29
+ Optional() : value_() {}
30
+ void set(const T& val) {
31
+ value_ = val;
32
+ set_ = true;
33
+ }
34
+
35
+ bool has_value() const { return set_; }
36
+
37
+ void reset() { set_ = false; }
38
+
39
+ T value() const { return value_; }
40
+
41
+ private:
42
+ T value_;
43
+ bool set_ = false;
44
+ };
45
+
46
+ } /* namespace grpc_core */
47
+
48
+ #endif /* GRPC_CORE_LIB_GPRPP_OPTIONAL_H */
@@ -84,7 +84,7 @@ class InternallyRefCounted : public Orphanable {
84
84
  GRPC_ABSTRACT_BASE_CLASS
85
85
 
86
86
  protected:
87
- GPRC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE
87
+ GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE
88
88
 
89
89
  // Allow RefCountedPtr<> to access Unref() and IncrementRefCount().
90
90
  template <typename T>
@@ -94,8 +94,9 @@ class InternallyRefCounted : public Orphanable {
94
94
  // Note: RefCount tracing is only enabled on debug builds, even when a
95
95
  // TraceFlag is used.
96
96
  template <typename TraceFlagT = TraceFlag>
97
- explicit InternallyRefCounted(TraceFlagT* trace_flag = nullptr)
98
- : refs_(1, trace_flag) {}
97
+ explicit InternallyRefCounted(TraceFlagT* trace_flag = nullptr,
98
+ intptr_t initial_refcount = 1)
99
+ : refs_(initial_refcount, trace_flag) {}
99
100
  virtual ~InternallyRefCounted() = default;
100
101
 
101
102
  RefCountedPtr<Child> Ref() GRPC_MUST_USE_RESULT {
@@ -109,12 +110,12 @@ class InternallyRefCounted : public Orphanable {
109
110
  }
110
111
 
111
112
  void Unref() {
112
- if (refs_.Unref()) {
113
+ if (GPR_UNLIKELY(refs_.Unref())) {
113
114
  Delete(static_cast<Child*>(this));
114
115
  }
115
116
  }
116
117
  void Unref(const DebugLocation& location, const char* reason) {
117
- if (refs_.Unref(location, reason)) {
118
+ if (GPR_UNLIKELY(refs_.Unref(location, reason))) {
118
119
  Delete(static_cast<Child*>(this));
119
120
  }
120
121
  }
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  *
3
- * Copyright 2018 gRPC authors.
3
+ * Copyright 2017 gRPC authors.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
6
6
  * you may not use this file except in compliance with the License.
@@ -16,27 +16,23 @@
16
16
  *
17
17
  */
18
18
 
19
- #ifndef GRPC_CORE_LIB_GPRPP_MUTEX_LOCK_H
20
- #define GRPC_CORE_LIB_GPRPP_MUTEX_LOCK_H
19
+ #ifndef GRPC_CORE_LIB_GPRPP_PAIR_H
20
+ #define GRPC_CORE_LIB_GPRPP_PAIR_H
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <grpc/support/sync.h>
24
+ #include <utility>
25
25
 
26
26
  namespace grpc_core {
27
-
28
- class MutexLock {
29
- public:
30
- explicit MutexLock(gpr_mu* mu) : mu_(mu) { gpr_mu_lock(mu); }
31
- ~MutexLock() { gpr_mu_unlock(mu_); }
32
-
33
- MutexLock(const MutexLock&) = delete;
34
- MutexLock& operator=(const MutexLock&) = delete;
35
-
36
- private:
37
- gpr_mu* const mu_;
38
- };
39
-
27
+ template <class T1, class T2>
28
+ using Pair = std::pair<T1, T2>;
29
+
30
+ template <class T1, class T2>
31
+ inline Pair<typename std::decay<T1>::type, typename std::decay<T2>::type>
32
+ MakePair(T1&& u, T2&& v) {
33
+ typedef typename std::decay<T1>::type V1;
34
+ typedef typename std::decay<T2>::type V2;
35
+ return Pair<V1, V2>(std::forward<T1>(u), std::forward<T2>(v));
36
+ }
40
37
  } // namespace grpc_core
41
-
42
- #endif /* GRPC_CORE_LIB_GPRPP_MUTEX_LOCK_H */
38
+ #endif /* GRPC_CORE_LIB_GPRPP_PAIR_H */