grpc-flamingo 1.11.0 → 1.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (452) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1150 -176
  3. data/etc/roots.pem +40 -196
  4. data/include/grpc/grpc.h +49 -8
  5. data/include/grpc/grpc_security.h +123 -2
  6. data/include/grpc/grpc_security_constants.h +6 -0
  7. data/include/grpc/impl/codegen/fork.h +4 -4
  8. data/include/grpc/impl/codegen/grpc_types.h +26 -5
  9. data/include/grpc/impl/codegen/log.h +112 -0
  10. data/include/grpc/impl/codegen/port_platform.h +55 -4
  11. data/include/grpc/module.modulemap +2 -0
  12. data/include/grpc/support/log.h +2 -80
  13. data/include/grpc/support/string_util.h +2 -0
  14. data/include/grpc/support/sync.h +0 -16
  15. data/src/boringssl/err_data.c +602 -588
  16. data/src/core/ext/{census → filters/census}/grpc_context.cc +0 -0
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +1 -1
  18. data/src/core/ext/filters/client_channel/client_channel.cc +1234 -1070
  19. data/src/core/ext/filters/client_channel/client_channel.h +5 -0
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +113 -0
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +71 -0
  22. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -0
  23. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  24. data/src/core/ext/filters/client_channel/http_proxy.cc +22 -5
  25. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -2
  26. data/src/core/ext/filters/client_channel/lb_policy.h +30 -10
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +11 -9
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +120 -127
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +36 -0
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +36 -102
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +37 -32
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +25 -22
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +4 -2
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c +19 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h +54 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c +19 -0
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h +54 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +4 -17
  39. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +37 -63
  40. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +306 -239
  41. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +444 -392
  42. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +538 -98
  43. data/src/core/ext/filters/client_channel/lb_policy_factory.cc +8 -0
  44. data/src/core/ext/filters/client_channel/lb_policy_factory.h +4 -0
  45. data/src/core/ext/filters/client_channel/method_params.h +4 -0
  46. data/src/core/ext/filters/client_channel/resolver.h +10 -0
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +36 -19
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +320 -0
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +62 -9
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +49 -294
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +537 -0
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +112 -87
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +17 -2
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +6 -5
  55. data/src/core/ext/filters/{load_reporting/server_load_reporting_filter.h → client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc} +7 -8
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +29 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +32 -15
  58. data/src/core/ext/filters/client_channel/retry_throttle.h +4 -0
  59. data/src/core/ext/filters/client_channel/subchannel.cc +58 -15
  60. data/src/core/ext/filters/client_channel/subchannel.h +11 -0
  61. data/src/core/ext/filters/deadline/deadline_filter.cc +18 -15
  62. data/src/core/ext/filters/deadline/deadline_filter.h +5 -5
  63. data/src/core/ext/filters/http/client/http_client_filter.cc +10 -9
  64. data/src/core/ext/filters/http/client_authority_filter.cc +6 -5
  65. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +6 -6
  66. data/src/core/ext/filters/http/server/http_server_filter.cc +123 -131
  67. data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
  68. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  69. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +1 -1
  70. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +3 -2
  71. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +9 -8
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +97 -48
  73. data/src/core/ext/transport/chttp2/transport/flow_control.cc +10 -7
  74. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +3 -3
  75. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +12 -8
  76. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -3
  77. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -2
  78. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +2 -2
  79. data/src/core/ext/transport/chttp2/transport/parsing.cc +14 -12
  80. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
  81. data/src/core/ext/transport/chttp2/transport/writing.cc +32 -27
  82. data/src/core/ext/transport/inproc/inproc_transport.cc +87 -49
  83. data/src/core/lib/channel/channel_args.cc +28 -0
  84. data/src/core/lib/channel/channel_args.h +4 -0
  85. data/src/core/lib/channel/channel_stack.cc +22 -29
  86. data/src/core/lib/channel/channel_stack.h +2 -2
  87. data/src/core/lib/channel/channel_stack_builder.cc +0 -3
  88. data/src/core/lib/channel/channel_stack_builder.h +0 -2
  89. data/src/core/lib/channel/channel_trace.cc +28 -63
  90. data/src/core/lib/channel/channel_trace.h +13 -17
  91. data/src/core/lib/channel/channelz.cc +153 -0
  92. data/src/core/lib/channel/channelz.h +133 -0
  93. data/src/core/lib/channel/channelz_registry.cc +145 -0
  94. data/src/core/lib/channel/channelz_registry.h +120 -0
  95. data/src/core/lib/channel/connected_channel.cc +8 -1
  96. data/src/core/lib/channel/handshaker.cc +71 -0
  97. data/src/core/lib/channel/handshaker.h +4 -0
  98. data/src/core/lib/debug/stats.h +7 -0
  99. data/src/core/lib/debug/stats_data.cc +5 -0
  100. data/src/core/lib/debug/stats_data.h +120 -0
  101. data/src/core/lib/debug/trace.cc +2 -1
  102. data/src/core/lib/debug/trace.h +12 -1
  103. data/src/core/lib/gpr/alloc.h +28 -0
  104. data/src/core/lib/gpr/arena.cc +38 -45
  105. data/src/core/lib/gpr/log.cc +8 -2
  106. data/src/core/lib/gpr/log_android.cc +4 -0
  107. data/src/core/lib/gpr/log_linux.cc +4 -0
  108. data/src/core/lib/gpr/log_posix.cc +4 -0
  109. data/src/core/lib/gpr/log_windows.cc +5 -0
  110. data/src/core/lib/gpr/string.cc +28 -0
  111. data/src/core/lib/gpr/string.h +10 -0
  112. data/src/core/lib/gprpp/abstract.h +5 -2
  113. data/src/core/lib/gprpp/fork.cc +268 -0
  114. data/src/core/lib/gprpp/fork.h +88 -0
  115. data/src/core/lib/gprpp/inlined_vector.h +87 -37
  116. data/src/core/lib/gprpp/memory.h +12 -0
  117. data/src/core/lib/gprpp/mutex_lock.h +42 -0
  118. data/src/core/lib/gprpp/orphanable.h +10 -12
  119. data/src/core/lib/gprpp/ref_counted.h +10 -12
  120. data/src/core/lib/gprpp/ref_counted_ptr.h +65 -8
  121. data/src/core/lib/gprpp/thd.h +0 -3
  122. data/src/core/lib/gprpp/thd_posix.cc +5 -54
  123. data/src/core/lib/gprpp/thd_windows.cc +0 -7
  124. data/src/core/lib/http/httpcli_security_connector.cc +1 -3
  125. data/src/core/lib/iomgr/call_combiner.cc +13 -13
  126. data/src/core/lib/iomgr/call_combiner.h +84 -1
  127. data/src/core/lib/iomgr/closure.h +6 -5
  128. data/src/core/lib/iomgr/combiner.cc +30 -13
  129. data/src/core/lib/iomgr/combiner.h +1 -1
  130. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
  131. data/src/core/lib/iomgr/error.cc +12 -0
  132. data/src/core/lib/iomgr/error.h +5 -0
  133. data/src/core/lib/iomgr/ev_epoll1_linux.cc +138 -51
  134. data/src/core/lib/iomgr/ev_epollex_linux.cc +276 -93
  135. data/src/core/lib/iomgr/ev_epollsig_linux.cc +58 -50
  136. data/src/core/lib/iomgr/ev_poll_posix.cc +163 -42
  137. data/src/core/lib/iomgr/ev_posix.cc +88 -24
  138. data/src/core/lib/iomgr/ev_posix.h +48 -12
  139. data/src/core/lib/iomgr/exec_ctx.cc +15 -9
  140. data/src/core/lib/iomgr/exec_ctx.h +48 -20
  141. data/src/core/lib/iomgr/executor.cc +274 -142
  142. data/src/core/lib/iomgr/executor.h +82 -16
  143. data/src/core/lib/iomgr/fork_posix.cc +42 -19
  144. data/src/core/lib/iomgr/iocp_windows.cc +9 -4
  145. data/src/core/lib/iomgr/iomgr.cc +2 -0
  146. data/src/core/lib/iomgr/iomgr.h +5 -0
  147. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  148. data/src/core/lib/iomgr/is_epollexclusive_available.cc +1 -0
  149. data/src/core/lib/iomgr/lockfree_event.cc +5 -1
  150. data/src/core/lib/iomgr/polling_entity.cc +11 -2
  151. data/src/core/lib/iomgr/pollset_custom.cc +2 -2
  152. data/src/core/lib/iomgr/port.h +51 -1
  153. data/src/core/lib/iomgr/resolve_address.h +1 -1
  154. data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
  155. data/src/core/lib/iomgr/resolve_address_windows.cc +3 -2
  156. data/src/core/lib/iomgr/resource_quota.cc +89 -12
  157. data/src/core/lib/iomgr/resource_quota.h +16 -0
  158. data/src/core/lib/iomgr/sockaddr_posix.h +1 -1
  159. data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
  160. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  161. data/src/core/lib/iomgr/socket_mutator.h +1 -1
  162. data/src/core/lib/iomgr/socket_utils.h +9 -0
  163. data/src/core/lib/iomgr/socket_utils_common_posix.cc +29 -1
  164. data/src/core/lib/iomgr/socket_utils_linux.cc +0 -1
  165. data/src/core/lib/iomgr/socket_utils_posix.cc +2 -3
  166. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  167. data/src/core/lib/iomgr/socket_utils_uv.cc +4 -0
  168. data/src/core/lib/iomgr/socket_utils_windows.cc +4 -0
  169. data/src/core/lib/iomgr/socket_windows.cc +33 -0
  170. data/src/core/lib/iomgr/socket_windows.h +6 -0
  171. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -5
  172. data/src/core/lib/iomgr/tcp_client_posix.cc +10 -11
  173. data/src/core/lib/iomgr/tcp_custom.cc +11 -11
  174. data/src/core/lib/iomgr/tcp_posix.cc +49 -36
  175. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  176. data/src/core/lib/iomgr/tcp_server_posix.cc +16 -36
  177. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  178. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +17 -5
  179. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -0
  180. data/src/core/lib/iomgr/tcp_uv.cc +3 -0
  181. data/src/core/lib/iomgr/tcp_windows.cc +18 -2
  182. data/src/core/lib/iomgr/tcp_windows.h +2 -0
  183. data/src/core/lib/iomgr/timer.h +4 -3
  184. data/src/core/lib/iomgr/timer_generic.cc +133 -51
  185. data/src/core/lib/iomgr/timer_manager.cc +12 -14
  186. data/src/core/lib/iomgr/timer_uv.cc +3 -0
  187. data/src/core/lib/iomgr/udp_server.cc +106 -52
  188. data/src/core/lib/iomgr/udp_server.h +8 -4
  189. data/src/core/lib/json/json.cc +12 -1
  190. data/src/core/lib/json/json.h +5 -0
  191. data/src/core/lib/profiling/basic_timers.cc +1 -0
  192. data/src/core/lib/security/context/security_context.cc +8 -8
  193. data/src/core/lib/security/context/security_context.h +6 -2
  194. data/src/core/lib/security/credentials/alts/alts_credentials.h +0 -20
  195. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +3 -2
  196. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +7 -7
  197. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +1 -38
  198. data/src/core/lib/security/credentials/credentials.h +1 -0
  199. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +89 -115
  200. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +16 -0
  201. data/src/core/lib/security/credentials/jwt/json_token.h +2 -0
  202. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +2 -0
  203. data/src/core/lib/security/credentials/local/local_credentials.cc +77 -0
  204. data/src/core/lib/security/credentials/local/local_credentials.h +40 -0
  205. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +11 -7
  206. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  207. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +17 -3
  208. data/src/core/lib/security/security_connector/alts_security_connector.cc +2 -1
  209. data/src/core/lib/security/security_connector/load_system_roots.h +29 -0
  210. data/src/core/lib/{gpr/fork.h → security/security_connector/load_system_roots_fallback.cc} +10 -13
  211. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +165 -0
  212. data/src/core/lib/security/security_connector/load_system_roots_linux.h +44 -0
  213. data/src/core/lib/security/security_connector/local_security_connector.cc +245 -0
  214. data/src/core/lib/security/security_connector/local_security_connector.h +58 -0
  215. data/src/core/lib/security/security_connector/security_connector.cc +79 -32
  216. data/src/core/lib/security/security_connector/security_connector.h +5 -3
  217. data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
  218. data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
  219. data/src/core/lib/security/transport/security_handshaker.cc +7 -2
  220. data/src/core/lib/security/transport/server_auth_filter.cc +4 -7
  221. data/src/core/lib/security/util/json_util.cc +4 -0
  222. data/src/core/lib/slice/slice.cc +6 -2
  223. data/src/core/lib/slice/slice_buffer.cc +27 -7
  224. data/src/core/lib/slice/slice_hash_table.h +4 -0
  225. data/src/core/lib/slice/slice_weak_hash_table.h +4 -0
  226. data/src/core/lib/surface/call.cc +119 -58
  227. data/src/core/lib/surface/call.h +7 -0
  228. data/src/core/lib/surface/channel.cc +50 -18
  229. data/src/core/lib/surface/channel.h +4 -0
  230. data/src/core/lib/surface/completion_queue.cc +153 -18
  231. data/src/core/lib/surface/completion_queue.h +20 -2
  232. data/src/core/lib/surface/completion_queue_factory.cc +13 -4
  233. data/src/core/lib/surface/init.cc +7 -8
  234. data/src/core/lib/surface/init.h +0 -1
  235. data/src/core/lib/surface/server.cc +16 -0
  236. data/src/core/lib/surface/version.cc +1 -1
  237. data/src/core/lib/transport/bdp_estimator.cc +3 -3
  238. data/src/core/lib/transport/bdp_estimator.h +2 -2
  239. data/src/core/lib/transport/byte_stream.cc +1 -1
  240. data/src/core/lib/transport/connectivity_state.cc +6 -7
  241. data/src/core/lib/transport/service_config.cc +2 -2
  242. data/src/core/lib/transport/service_config.h +3 -3
  243. data/src/core/lib/transport/transport.cc +22 -10
  244. data/src/core/lib/transport/transport.h +18 -18
  245. data/src/core/lib/transport/transport_op_string.cc +1 -8
  246. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -4
  247. data/src/core/tsi/alts/crypt/aes_gcm.cc +2 -0
  248. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +19 -7
  249. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +10 -0
  250. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +2 -2
  251. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +38 -3
  252. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +3 -0
  253. data/src/core/tsi/alts/handshaker/altscontext.pb.c +0 -1
  254. data/src/core/tsi/alts/handshaker/altscontext.pb.h +1 -2
  255. data/src/core/tsi/alts/handshaker/handshaker.pb.c +0 -1
  256. data/src/core/tsi/alts/handshaker/handshaker.pb.h +1 -2
  257. data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +0 -1
  258. data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +1 -1
  259. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
  260. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +47 -1
  261. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +3 -1
  262. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -11
  263. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +7 -2
  264. data/src/core/tsi/fake_transport_security.cc +1 -0
  265. data/src/core/tsi/grpc_shadow_boringssl.h +3006 -0
  266. data/src/core/tsi/local_transport_security.cc +209 -0
  267. data/src/core/tsi/local_transport_security.h +51 -0
  268. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
  269. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +5 -5
  270. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -0
  271. data/src/core/tsi/ssl_transport_security.cc +245 -116
  272. data/src/core/tsi/ssl_types.h +2 -0
  273. data/src/core/tsi/transport_security.cc +14 -0
  274. data/src/core/tsi/transport_security.h +2 -0
  275. data/src/core/tsi/transport_security_interface.h +11 -1
  276. data/src/ruby/bin/math_client.rb +17 -9
  277. data/src/ruby/ext/grpc/extconf.rb +1 -26
  278. data/src/ruby/ext/grpc/rb_channel_credentials.c +3 -3
  279. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +42 -16
  280. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +65 -26
  281. data/src/ruby/lib/grpc/generic/active_call.rb +19 -23
  282. data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -1
  283. data/src/ruby/lib/grpc/version.rb +1 -1
  284. data/src/ruby/pb/generate_proto_ruby.sh +7 -1
  285. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +4 -1
  286. data/src/ruby/spec/call_credentials_spec.rb +1 -1
  287. data/src/ruby/spec/call_spec.rb +1 -1
  288. data/src/ruby/spec/channel_credentials_spec.rb +1 -1
  289. data/src/ruby/spec/channel_spec.rb +1 -1
  290. data/src/ruby/spec/client_auth_spec.rb +1 -12
  291. data/src/ruby/spec/client_server_spec.rb +1 -1
  292. data/src/ruby/spec/compression_options_spec.rb +1 -1
  293. data/src/ruby/spec/error_sanity_spec.rb +1 -1
  294. data/src/ruby/spec/generic/client_stub_spec.rb +16 -4
  295. data/src/ruby/spec/generic/rpc_desc_spec.rb +1 -1
  296. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
  297. data/src/ruby/spec/generic/service_spec.rb +1 -1
  298. data/src/ruby/spec/google_rpc_status_utils_spec.rb +1 -12
  299. data/src/ruby/spec/pb/duplicate/codegen_spec.rb +1 -0
  300. data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
  301. data/src/ruby/spec/server_credentials_spec.rb +1 -1
  302. data/src/ruby/spec/server_spec.rb +1 -1
  303. data/src/ruby/spec/spec_helper.rb +1 -0
  304. data/src/ruby/spec/support/services.rb +1 -1
  305. data/src/ruby/spec/time_consts_spec.rb +1 -1
  306. data/third_party/address_sorting/address_sorting.c +17 -11
  307. data/third_party/address_sorting/address_sorting_windows.c +43 -3
  308. data/third_party/address_sorting/include/address_sorting/address_sorting.h +3 -0
  309. data/third_party/boringssl/crypto/asn1/a_int.c +33 -28
  310. data/third_party/boringssl/crypto/asn1/a_mbstr.c +24 -22
  311. data/third_party/boringssl/crypto/asn1/a_utf8.c +13 -11
  312. data/third_party/boringssl/crypto/asn1/asn1_locl.h +3 -0
  313. data/third_party/boringssl/crypto/asn1/tasn_dec.c +40 -19
  314. data/third_party/boringssl/crypto/bio/fd.c +1 -0
  315. data/third_party/boringssl/crypto/bio/file.c +2 -0
  316. data/third_party/boringssl/crypto/bn_extra/convert.c +6 -5
  317. data/third_party/boringssl/crypto/bytestring/ber.c +1 -4
  318. data/third_party/boringssl/crypto/bytestring/cbb.c +116 -16
  319. data/third_party/boringssl/crypto/bytestring/cbs.c +151 -20
  320. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +203 -0
  321. data/third_party/boringssl/crypto/cipher_extra/e_rc2.c +2 -0
  322. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +1 -2
  323. data/third_party/boringssl/crypto/cpu-aarch64-fuchsia.c +55 -0
  324. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +2 -1
  325. data/third_party/boringssl/crypto/dsa/dsa.c +16 -54
  326. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +9 -10
  327. data/third_party/boringssl/crypto/ecdh/ecdh.c +4 -3
  328. data/third_party/boringssl/crypto/fipsmodule/bcm.c +11 -542
  329. data/third_party/boringssl/crypto/fipsmodule/bn/add.c +57 -112
  330. data/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.c +4 -3
  331. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +128 -70
  332. data/third_party/boringssl/crypto/fipsmodule/bn/bytes.c +32 -71
  333. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +64 -118
  334. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +284 -122
  335. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +31 -65
  336. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +274 -218
  337. data/third_party/boringssl/crypto/fipsmodule/bn/generic.c +2 -1
  338. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +187 -27
  339. data/third_party/boringssl/crypto/fipsmodule/bn/jacobi.c +1 -1
  340. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +124 -81
  341. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +8 -30
  342. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +321 -347
  343. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +326 -66
  344. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +77 -25
  345. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +199 -222
  346. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +27 -47
  347. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +155 -96
  348. data/third_party/boringssl/crypto/fipsmodule/bn/sqrt.c +1 -1
  349. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +10 -10
  350. data/third_party/boringssl/crypto/fipsmodule/des/internal.h +2 -0
  351. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +78 -47
  352. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +99 -163
  353. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +3 -10
  354. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +44 -23
  355. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +59 -90
  356. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +38 -65
  357. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +5378 -5418
  358. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +17 -26
  359. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +15 -11
  360. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +45 -51
  361. data/third_party/boringssl/crypto/fipsmodule/ec/{util-64.c → util.c} +0 -5
  362. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +144 -264
  363. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +78 -62
  364. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +256 -0
  365. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +36 -32
  366. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +9 -7
  367. data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +16 -40
  368. data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +1 -6
  369. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +57 -39
  370. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +309 -142
  371. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +581 -0
  372. data/third_party/boringssl/crypto/fipsmodule/tls/internal.h +39 -0
  373. data/third_party/boringssl/crypto/fipsmodule/tls/kdf.c +165 -0
  374. data/third_party/boringssl/crypto/internal.h +65 -2
  375. data/third_party/boringssl/crypto/mem.c +0 -2
  376. data/third_party/boringssl/crypto/obj/obj.c +6 -73
  377. data/third_party/boringssl/crypto/thread_pthread.c +35 -5
  378. data/third_party/boringssl/crypto/x509/a_strex.c +11 -11
  379. data/third_party/boringssl/crypto/x509/vpm_int.h +1 -0
  380. data/third_party/boringssl/crypto/x509/x509_vfy.c +4 -0
  381. data/third_party/boringssl/crypto/x509/x509_vpm.c +44 -22
  382. data/third_party/boringssl/crypto/x509/x_name.c +13 -0
  383. data/third_party/boringssl/include/openssl/aead.h +10 -0
  384. data/third_party/boringssl/include/openssl/asn1.h +2 -3
  385. data/third_party/boringssl/include/openssl/base.h +5 -14
  386. data/third_party/boringssl/include/openssl/bio.h +1 -1
  387. data/third_party/boringssl/include/openssl/bn.h +62 -18
  388. data/third_party/boringssl/include/openssl/bytestring.h +53 -28
  389. data/third_party/boringssl/include/openssl/crypto.h +4 -0
  390. data/third_party/boringssl/include/openssl/ec.h +10 -4
  391. data/third_party/boringssl/include/openssl/ec_key.h +7 -6
  392. data/third_party/boringssl/include/openssl/err.h +9 -9
  393. data/third_party/boringssl/include/openssl/evp.h +1 -1
  394. data/third_party/boringssl/include/openssl/rsa.h +35 -10
  395. data/third_party/boringssl/include/openssl/ssl.h +167 -19
  396. data/third_party/boringssl/include/openssl/ssl3.h +0 -1
  397. data/third_party/boringssl/include/openssl/stack.h +1 -1
  398. data/third_party/boringssl/include/openssl/tls1.h +10 -2
  399. data/third_party/boringssl/include/openssl/x509.h +4 -0
  400. data/third_party/boringssl/include/openssl/x509v3.h +1 -0
  401. data/third_party/boringssl/ssl/d1_both.cc +16 -2
  402. data/third_party/boringssl/ssl/dtls_method.cc +1 -1
  403. data/third_party/boringssl/ssl/handoff.cc +285 -0
  404. data/third_party/boringssl/ssl/handshake.cc +26 -12
  405. data/third_party/boringssl/ssl/handshake_client.cc +101 -95
  406. data/third_party/boringssl/ssl/handshake_server.cc +14 -2
  407. data/third_party/boringssl/ssl/internal.h +132 -79
  408. data/third_party/boringssl/ssl/s3_both.cc +2 -2
  409. data/third_party/boringssl/ssl/s3_lib.cc +3 -1
  410. data/third_party/boringssl/ssl/s3_pkt.cc +0 -18
  411. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +1 -4
  412. data/third_party/boringssl/ssl/ssl_asn1.cc +47 -43
  413. data/third_party/boringssl/ssl/ssl_cipher.cc +12 -8
  414. data/third_party/boringssl/ssl/ssl_key_share.cc +3 -1
  415. data/third_party/boringssl/ssl/ssl_lib.cc +83 -14
  416. data/third_party/boringssl/ssl/ssl_privkey.cc +6 -0
  417. data/third_party/boringssl/ssl/ssl_stat.cc +6 -6
  418. data/third_party/boringssl/ssl/ssl_versions.cc +12 -85
  419. data/third_party/boringssl/ssl/ssl_x509.cc +59 -61
  420. data/third_party/boringssl/ssl/t1_enc.cc +73 -124
  421. data/third_party/boringssl/ssl/t1_lib.cc +367 -41
  422. data/third_party/boringssl/ssl/tls13_both.cc +8 -0
  423. data/third_party/boringssl/ssl/tls13_client.cc +98 -184
  424. data/third_party/boringssl/ssl/tls13_enc.cc +88 -158
  425. data/third_party/boringssl/ssl/tls13_server.cc +91 -137
  426. data/third_party/boringssl/ssl/tls_method.cc +0 -17
  427. data/third_party/boringssl/ssl/tls_record.cc +1 -10
  428. data/third_party/boringssl/third_party/fiat/curve25519.c +921 -2753
  429. data/third_party/boringssl/third_party/fiat/curve25519_tables.h +7880 -0
  430. data/third_party/boringssl/third_party/fiat/internal.h +32 -20
  431. data/third_party/boringssl/third_party/fiat/p256.c +1824 -0
  432. metadata +86 -71
  433. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +0 -253
  434. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +0 -222
  435. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +0 -71
  436. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +0 -61
  437. data/src/core/lib/channel/channel_trace_registry.cc +0 -80
  438. data/src/core/lib/channel/channel_trace_registry.h +0 -43
  439. data/src/core/lib/gpr/fork.cc +0 -78
  440. data/src/core/tsi/transport_security_adapter.cc +0 -235
  441. data/src/core/tsi/transport_security_adapter.h +0 -41
  442. data/src/ruby/bin/apis/google/protobuf/empty.rb +0 -29
  443. data/src/ruby/bin/apis/pubsub_demo.rb +0 -241
  444. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +0 -159
  445. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +0 -88
  446. data/src/ruby/pb/test/client.rb +0 -764
  447. data/src/ruby/pb/test/server.rb +0 -252
  448. data/src/ruby/spec/pb/package_with_underscore/checker_spec.rb +0 -54
  449. data/src/ruby/spec/pb/package_with_underscore/data.proto +0 -23
  450. data/src/ruby/spec/pb/package_with_underscore/service.proto +0 -23
  451. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +0 -247
  452. data/third_party/boringssl/crypto/fipsmodule/ec/p256-64.c +0 -1674
@@ -151,8 +151,9 @@ static void windows_resolve_address(const char* name, const char* default_port,
151
151
  grpc_closure* on_done,
152
152
  grpc_resolved_addresses** addresses) {
153
153
  request* r = (request*)gpr_malloc(sizeof(request));
154
- GRPC_CLOSURE_INIT(&r->request_closure, do_request_thread, r,
155
- grpc_executor_scheduler(GRPC_EXECUTOR_SHORT));
154
+ GRPC_CLOSURE_INIT(
155
+ &r->request_closure, do_request_thread, r,
156
+ grpc_executor_scheduler(GRPC_RESOLVER_EXECUTOR, GRPC_EXECUTOR_SHORT));
156
157
  r->name = gpr_strdup(name);
157
158
  r->default_port = gpr_strdup(default_port);
158
159
  r->on_done = on_done;
@@ -96,6 +96,9 @@ struct grpc_resource_user {
96
96
  list, false otherwise */
97
97
  bool added_to_free_pool;
98
98
 
99
+ /* The number of threads currently allocated to this resource user */
100
+ gpr_atm num_threads_allocated;
101
+
99
102
  /* Reclaimers: index 0 is the benign reclaimer, 1 is the destructive reclaimer
100
103
  */
101
104
  grpc_closure* reclaimers[2];
@@ -135,12 +138,33 @@ struct grpc_resource_quota {
135
138
 
136
139
  gpr_atm last_size;
137
140
 
141
+ /* Mutex to protect max_threads and num_threads_allocated */
142
+ /* Note: We could have used gpr_atm for max_threads and num_threads_allocated
143
+ * and avoid having this mutex; but in that case, each invocation of the
144
+ * function grpc_resource_user_allocate_threads() would have had to do at
145
+ * least two atomic loads (for max_threads and num_threads_allocated) followed
146
+ * by a CAS (on num_threads_allocated).
147
+ * Moreover, we expect grpc_resource_user_allocate_threads() to be often
148
+ * called concurrently thereby increasing the chances of failing the CAS
149
+ * operation. This additional complexity is not worth the tiny perf gain we
150
+ * may (or may not) have by using atomics */
151
+ gpr_mu thread_count_mu;
152
+
153
+ /* Max number of threads allowed */
154
+ int max_threads;
155
+
156
+ /* Number of threads currently allocated via this resource_quota object */
157
+ int num_threads_allocated;
158
+
138
159
  /* Has rq_step been scheduled to occur? */
139
160
  bool step_scheduled;
161
+
140
162
  /* Are we currently reclaiming memory */
141
163
  bool reclaiming;
164
+
142
165
  /* Closure around rq_step */
143
166
  grpc_closure rq_step_closure;
167
+
144
168
  /* Closure around rq_reclamation_done */
145
169
  grpc_closure rq_reclamation_done_closure;
146
170
 
@@ -289,7 +313,7 @@ static bool rq_alloc(grpc_resource_quota* resource_quota) {
289
313
  GRPC_RULIST_AWAITING_ALLOCATION))) {
290
314
  gpr_mu_lock(&resource_user->mu);
291
315
  if (grpc_resource_quota_trace.enabled()) {
292
- gpr_log(GPR_DEBUG,
316
+ gpr_log(GPR_INFO,
293
317
  "RQ: check allocation for user %p shutdown=%" PRIdPTR
294
318
  " free_pool=%" PRId64,
295
319
  resource_user, gpr_atm_no_barrier_load(&resource_user->shutdown),
@@ -315,7 +339,7 @@ static bool rq_alloc(grpc_resource_quota* resource_quota) {
315
339
  resource_quota->free_pool -= amt;
316
340
  rq_update_estimate(resource_quota);
317
341
  if (grpc_resource_quota_trace.enabled()) {
318
- gpr_log(GPR_DEBUG,
342
+ gpr_log(GPR_INFO,
319
343
  "RQ %s %s: grant alloc %" PRId64
320
344
  " bytes; rq_free_pool -> %" PRId64,
321
345
  resource_quota->name, resource_user->name, amt,
@@ -323,7 +347,7 @@ static bool rq_alloc(grpc_resource_quota* resource_quota) {
323
347
  }
324
348
  } else if (grpc_resource_quota_trace.enabled() &&
325
349
  resource_user->free_pool >= 0) {
326
- gpr_log(GPR_DEBUG, "RQ %s %s: discard already satisfied alloc request",
350
+ gpr_log(GPR_INFO, "RQ %s %s: discard already satisfied alloc request",
327
351
  resource_quota->name, resource_user->name);
328
352
  }
329
353
  if (resource_user->free_pool >= 0) {
@@ -353,7 +377,7 @@ static bool rq_reclaim_from_per_user_free_pool(
353
377
  resource_quota->free_pool += amt;
354
378
  rq_update_estimate(resource_quota);
355
379
  if (grpc_resource_quota_trace.enabled()) {
356
- gpr_log(GPR_DEBUG,
380
+ gpr_log(GPR_INFO,
357
381
  "RQ %s %s: reclaim_from_per_user_free_pool %" PRId64
358
382
  " bytes; rq_free_pool -> %" PRId64,
359
383
  resource_quota->name, resource_user->name, amt,
@@ -376,9 +400,8 @@ static bool rq_reclaim(grpc_resource_quota* resource_quota, bool destructive) {
376
400
  grpc_resource_user* resource_user = rulist_pop_head(resource_quota, list);
377
401
  if (resource_user == nullptr) return false;
378
402
  if (grpc_resource_quota_trace.enabled()) {
379
- gpr_log(GPR_DEBUG, "RQ %s %s: initiate %s reclamation",
380
- resource_quota->name, resource_user->name,
381
- destructive ? "destructive" : "benign");
403
+ gpr_log(GPR_INFO, "RQ %s %s: initiate %s reclamation", resource_quota->name,
404
+ resource_user->name, destructive ? "destructive" : "benign");
382
405
  }
383
406
  resource_quota->reclaiming = true;
384
407
  grpc_resource_quota_ref_internal(resource_quota);
@@ -387,7 +410,7 @@ static bool rq_reclaim(grpc_resource_quota* resource_quota, bool destructive) {
387
410
  resource_quota->debug_only_last_reclaimer_resource_user = resource_user;
388
411
  resource_quota->debug_only_last_initiated_reclaimer = c;
389
412
  resource_user->reclaimers[destructive] = nullptr;
390
- GRPC_CLOSURE_RUN(c, GRPC_ERROR_NONE);
413
+ GRPC_CLOSURE_SCHED(c, GRPC_ERROR_NONE);
391
414
  return true;
392
415
  }
393
416
 
@@ -506,7 +529,7 @@ static void ru_post_destructive_reclaimer(void* ru, grpc_error* error) {
506
529
 
507
530
  static void ru_shutdown(void* ru, grpc_error* error) {
508
531
  if (grpc_resource_quota_trace.enabled()) {
509
- gpr_log(GPR_DEBUG, "RU shutdown %p", ru);
532
+ gpr_log(GPR_INFO, "RU shutdown %p", ru);
510
533
  }
511
534
  grpc_resource_user* resource_user = static_cast<grpc_resource_user*>(ru);
512
535
  gpr_mu_lock(&resource_user->mu);
@@ -525,6 +548,11 @@ static void ru_shutdown(void* ru, grpc_error* error) {
525
548
  static void ru_destroy(void* ru, grpc_error* error) {
526
549
  grpc_resource_user* resource_user = static_cast<grpc_resource_user*>(ru);
527
550
  GPR_ASSERT(gpr_atm_no_barrier_load(&resource_user->refs) == 0);
551
+ // Free all the remaining thread quota
552
+ grpc_resource_user_free_threads(resource_user,
553
+ static_cast<int>(gpr_atm_no_barrier_load(
554
+ &resource_user->num_threads_allocated)));
555
+
528
556
  for (int i = 0; i < GRPC_RULIST_COUNT; i++) {
529
557
  rulist_remove(resource_user, static_cast<grpc_rulist>(i));
530
558
  }
@@ -595,6 +623,9 @@ grpc_resource_quota* grpc_resource_quota_create(const char* name) {
595
623
  resource_quota->free_pool = INT64_MAX;
596
624
  resource_quota->size = INT64_MAX;
597
625
  gpr_atm_no_barrier_store(&resource_quota->last_size, GPR_ATM_MAX);
626
+ gpr_mu_init(&resource_quota->thread_count_mu);
627
+ resource_quota->max_threads = INT_MAX;
628
+ resource_quota->num_threads_allocated = 0;
598
629
  resource_quota->step_scheduled = false;
599
630
  resource_quota->reclaiming = false;
600
631
  gpr_atm_no_barrier_store(&resource_quota->memory_usage_estimation, 0);
@@ -617,6 +648,8 @@ grpc_resource_quota* grpc_resource_quota_create(const char* name) {
617
648
 
618
649
  void grpc_resource_quota_unref_internal(grpc_resource_quota* resource_quota) {
619
650
  if (gpr_unref(&resource_quota->refs)) {
651
+ // No outstanding thread quota
652
+ GPR_ASSERT(resource_quota->num_threads_allocated == 0);
620
653
  GRPC_COMBINER_UNREF(resource_quota->combiner, "resource_quota");
621
654
  gpr_free(resource_quota->name);
622
655
  gpr_free(resource_quota);
@@ -647,6 +680,15 @@ double grpc_resource_quota_get_memory_pressure(
647
680
  (static_cast<double>(MEMORY_USAGE_ESTIMATION_MAX));
648
681
  }
649
682
 
683
+ /* Public API */
684
+ void grpc_resource_quota_set_max_threads(grpc_resource_quota* resource_quota,
685
+ int new_max_threads) {
686
+ GPR_ASSERT(new_max_threads >= 0);
687
+ gpr_mu_lock(&resource_quota->thread_count_mu);
688
+ resource_quota->max_threads = new_max_threads;
689
+ gpr_mu_unlock(&resource_quota->thread_count_mu);
690
+ }
691
+
650
692
  /* Public API */
651
693
  void grpc_resource_quota_resize(grpc_resource_quota* resource_quota,
652
694
  size_t size) {
@@ -732,6 +774,7 @@ grpc_resource_user* grpc_resource_user_create(
732
774
  grpc_closure_list_init(&resource_user->on_allocated);
733
775
  resource_user->allocating = false;
734
776
  resource_user->added_to_free_pool = false;
777
+ gpr_atm_no_barrier_store(&resource_user->num_threads_allocated, 0);
735
778
  resource_user->reclaimers[0] = nullptr;
736
779
  resource_user->reclaimers[1] = nullptr;
737
780
  resource_user->new_reclaimers[0] = nullptr;
@@ -786,6 +829,40 @@ void grpc_resource_user_shutdown(grpc_resource_user* resource_user) {
786
829
  }
787
830
  }
788
831
 
832
+ bool grpc_resource_user_allocate_threads(grpc_resource_user* resource_user,
833
+ int thread_count) {
834
+ GPR_ASSERT(thread_count >= 0);
835
+ bool is_success = false;
836
+ gpr_mu_lock(&resource_user->resource_quota->thread_count_mu);
837
+ grpc_resource_quota* rq = resource_user->resource_quota;
838
+ if (rq->num_threads_allocated + thread_count <= rq->max_threads) {
839
+ rq->num_threads_allocated += thread_count;
840
+ gpr_atm_no_barrier_fetch_add(&resource_user->num_threads_allocated,
841
+ thread_count);
842
+ is_success = true;
843
+ }
844
+ gpr_mu_unlock(&resource_user->resource_quota->thread_count_mu);
845
+ return is_success;
846
+ }
847
+
848
+ void grpc_resource_user_free_threads(grpc_resource_user* resource_user,
849
+ int thread_count) {
850
+ GPR_ASSERT(thread_count >= 0);
851
+ gpr_mu_lock(&resource_user->resource_quota->thread_count_mu);
852
+ grpc_resource_quota* rq = resource_user->resource_quota;
853
+ rq->num_threads_allocated -= thread_count;
854
+ int old_count = static_cast<int>(gpr_atm_no_barrier_fetch_add(
855
+ &resource_user->num_threads_allocated, -thread_count));
856
+ if (old_count < thread_count || rq->num_threads_allocated < 0) {
857
+ gpr_log(GPR_ERROR,
858
+ "Releasing more threads (%d) than currently allocated (rq threads: "
859
+ "%d, ru threads: %d)",
860
+ thread_count, rq->num_threads_allocated + thread_count, old_count);
861
+ abort();
862
+ }
863
+ gpr_mu_unlock(&resource_user->resource_quota->thread_count_mu);
864
+ }
865
+
789
866
  void grpc_resource_user_alloc(grpc_resource_user* resource_user, size_t size,
790
867
  grpc_closure* optional_on_done) {
791
868
  gpr_mu_lock(&resource_user->mu);
@@ -793,7 +870,7 @@ void grpc_resource_user_alloc(grpc_resource_user* resource_user, size_t size,
793
870
  resource_user->free_pool -= static_cast<int64_t>(size);
794
871
  resource_user->outstanding_allocations += static_cast<int64_t>(size);
795
872
  if (grpc_resource_quota_trace.enabled()) {
796
- gpr_log(GPR_DEBUG, "RQ %s %s: alloc %" PRIdPTR "; free_pool -> %" PRId64,
873
+ gpr_log(GPR_INFO, "RQ %s %s: alloc %" PRIdPTR "; free_pool -> %" PRId64,
797
874
  resource_user->resource_quota->name, resource_user->name, size,
798
875
  resource_user->free_pool);
799
876
  }
@@ -816,7 +893,7 @@ void grpc_resource_user_free(grpc_resource_user* resource_user, size_t size) {
816
893
  bool was_zero_or_negative = resource_user->free_pool <= 0;
817
894
  resource_user->free_pool += static_cast<int64_t>(size);
818
895
  if (grpc_resource_quota_trace.enabled()) {
819
- gpr_log(GPR_DEBUG, "RQ %s %s: free %" PRIdPTR "; free_pool -> %" PRId64,
896
+ gpr_log(GPR_INFO, "RQ %s %s: free %" PRIdPTR "; free_pool -> %" PRId64,
820
897
  resource_user->resource_quota->name, resource_user->name, size,
821
898
  resource_user->free_pool);
822
899
  }
@@ -842,7 +919,7 @@ void grpc_resource_user_post_reclaimer(grpc_resource_user* resource_user,
842
919
 
843
920
  void grpc_resource_user_finish_reclamation(grpc_resource_user* resource_user) {
844
921
  if (grpc_resource_quota_trace.enabled()) {
845
- gpr_log(GPR_DEBUG, "RQ %s %s: reclamation complete",
922
+ gpr_log(GPR_INFO, "RQ %s %s: reclamation complete",
846
923
  resource_user->resource_quota->name, resource_user->name);
847
924
  }
848
925
  GRPC_CLOSURE_SCHED(
@@ -93,6 +93,22 @@ void grpc_resource_user_ref(grpc_resource_user* resource_user);
93
93
  void grpc_resource_user_unref(grpc_resource_user* resource_user);
94
94
  void grpc_resource_user_shutdown(grpc_resource_user* resource_user);
95
95
 
96
+ /* Attempts to get quota from the resource_user to create 'thread_count' number
97
+ * of threads. Returns true if successful (i.e the caller is now free to create
98
+ * 'thread_count' number of threads) or false if quota is not available */
99
+ bool grpc_resource_user_allocate_threads(grpc_resource_user* resource_user,
100
+ int thread_count);
101
+ /* Releases 'thread_count' worth of quota back to the resource user. The quota
102
+ * should have been previously obtained successfully by calling
103
+ * grpc_resource_user_allocate_threads().
104
+ *
105
+ * Note: There need not be an exact one-to-one correspondence between
106
+ * grpc_resource_user_allocate_threads() and grpc_resource_user_free_threads()
107
+ * calls. The only requirement is that the number of threads allocated should
108
+ * all be eventually released */
109
+ void grpc_resource_user_free_threads(grpc_resource_user* resource_user,
110
+ int thread_count);
111
+
96
112
  /* Allocate from the resource user (and its quota).
97
113
  If optional_on_done is NULL, then allocate immediately. This may push the
98
114
  quota over-limit, at which point reclamation will kick in.
@@ -23,7 +23,7 @@
23
23
 
24
24
  #include "src/core/lib/iomgr/port.h"
25
25
 
26
- #ifdef GRPC_POSIX_SOCKET
26
+ #ifdef GRPC_POSIX_SOCKET_SOCKADDR
27
27
  #include <arpa/inet.h>
28
28
  #include <netdb.h>
29
29
  #include <netinet/in.h>
@@ -20,7 +20,7 @@
20
20
 
21
21
  #include "src/core/lib/iomgr/port.h"
22
22
 
23
- #ifdef GRPC_POSIX_SOCKET
23
+ #ifdef GRPC_POSIX_SOCKET_SOCKET_FACTORY
24
24
 
25
25
  #include "src/core/lib/channel/channel_args.h"
26
26
  #include "src/core/lib/gpr/useful.h"
@@ -57,7 +57,7 @@ int grpc_socket_mutator_compare(grpc_socket_mutator* a,
57
57
 
58
58
  void grpc_socket_mutator_unref(grpc_socket_mutator* mutator) {
59
59
  if (gpr_unref(&mutator->refcount)) {
60
- mutator->vtable->destory(mutator);
60
+ mutator->vtable->destroy(mutator);
61
61
  }
62
62
  }
63
63
 
@@ -33,7 +33,7 @@ typedef struct {
33
33
  /** Compare socket mutator \a a and \a b */
34
34
  int (*compare)(grpc_socket_mutator* a, grpc_socket_mutator* b);
35
35
  /** Destroys the socket mutator instance */
36
- void (*destory)(grpc_socket_mutator* mutator);
36
+ void (*destroy)(grpc_socket_mutator* mutator);
37
37
  } grpc_socket_mutator_vtable;
38
38
 
39
39
  /** The Socket Mutator interface allows changes on socket options */
@@ -23,12 +23,21 @@
23
23
 
24
24
  #include <stddef.h>
25
25
 
26
+ // TODO(juanlishen): The following functions might be simple enough to implement
27
+ // ourselves, so that they don't cause any portability hassle.
28
+
26
29
  /* A wrapper for htons on POSIX and Windows */
27
30
  uint16_t grpc_htons(uint16_t hostshort);
28
31
 
29
32
  /* A wrapper for ntohs on POSIX and WINDOWS */
30
33
  uint16_t grpc_ntohs(uint16_t netshort);
31
34
 
35
+ /* A wrapper for htonl on POSIX and Windows */
36
+ uint32_t grpc_htonl(uint32_t hostlong);
37
+
38
+ /* A wrapper for ntohl on POSIX and WINDOWS */
39
+ uint32_t grpc_ntohl(uint32_t netlong);
40
+
32
41
  /* A wrapper for inet_pton on POSIX and WINDOWS */
33
42
  int grpc_inet_pton(int af, const char* src, void* dst);
34
43
 
@@ -20,7 +20,7 @@
20
20
 
21
21
  #include "src/core/lib/iomgr/port.h"
22
22
 
23
- #ifdef GRPC_POSIX_SOCKET
23
+ #ifdef GRPC_POSIX_SOCKET_UTILS_COMMON
24
24
 
25
25
  #include "src/core/lib/iomgr/socket_utils.h"
26
26
  #include "src/core/lib/iomgr/socket_utils_posix.h"
@@ -181,6 +181,30 @@ grpc_error* grpc_set_socket_reuse_port(int fd, int reuse) {
181
181
  #endif
182
182
  }
183
183
 
184
+ static gpr_once g_probe_so_reuesport_once = GPR_ONCE_INIT;
185
+ static int g_support_so_reuseport = false;
186
+
187
+ void probe_so_reuseport_once(void) {
188
+ #ifndef GPR_MANYLINUX1
189
+ int s = socket(AF_INET, SOCK_STREAM, 0);
190
+ if (s < 0) {
191
+ /* This might be an ipv6-only environment in which case 'socket(AF_INET,..)'
192
+ call would fail. Try creating IPv6 socket in that case */
193
+ s = socket(AF_INET6, SOCK_STREAM, 0);
194
+ }
195
+ if (s >= 0) {
196
+ g_support_so_reuseport = GRPC_LOG_IF_ERROR(
197
+ "check for SO_REUSEPORT", grpc_set_socket_reuse_port(s, 1));
198
+ close(s);
199
+ }
200
+ #endif
201
+ }
202
+
203
+ bool grpc_is_socket_reuse_port_supported() {
204
+ gpr_once_init(&g_probe_so_reuesport_once, probe_so_reuseport_once);
205
+ return g_support_so_reuseport;
206
+ }
207
+
184
208
  /* disable nagle */
185
209
  grpc_error* grpc_set_socket_low_latency(int fd, int low_latency) {
186
210
  int val = (low_latency != 0);
@@ -315,6 +339,10 @@ uint16_t grpc_htons(uint16_t hostshort) { return htons(hostshort); }
315
339
 
316
340
  uint16_t grpc_ntohs(uint16_t netshort) { return ntohs(netshort); }
317
341
 
342
+ uint32_t grpc_htonl(uint32_t hostlong) { return htonl(hostlong); }
343
+
344
+ uint32_t grpc_ntohl(uint32_t netlong) { return ntohl(netlong); }
345
+
318
346
  int grpc_inet_pton(int af, const char* src, void* dst) {
319
347
  return inet_pton(af, src, dst);
320
348
  }
@@ -33,7 +33,6 @@
33
33
  int grpc_accept4(int sockfd, grpc_resolved_address* resolved_addr, int nonblock,
34
34
  int cloexec) {
35
35
  int flags = 0;
36
- GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t));
37
36
  flags |= nonblock ? SOCK_NONBLOCK : 0;
38
37
  flags |= cloexec ? SOCK_CLOEXEC : 0;
39
38
  return accept4(sockfd, reinterpret_cast<grpc_sockaddr*>(resolved_addr->addr),
@@ -34,9 +34,8 @@
34
34
  int grpc_accept4(int sockfd, grpc_resolved_address* resolved_addr, int nonblock,
35
35
  int cloexec) {
36
36
  int fd, flags;
37
- GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t));
38
- fd = accept(sockfd, (grpc_sockaddr*)resolved_addr->addr,
39
- (socklen_t*)&resolved_addr->len);
37
+ fd = accept(sockfd, reinterpret_cast<grpc_sockaddr*>(resolved_addr->addr),
38
+ &resolved_addr->len);
40
39
  if (fd >= 0) {
41
40
  if (nonblock) {
42
41
  flags = fcntl(fd, F_GETFL, 0);
@@ -44,6 +44,9 @@ grpc_error* grpc_set_socket_cloexec(int fd, int close_on_exec);
44
44
  /* set a socket to reuse old addresses */
45
45
  grpc_error* grpc_set_socket_reuse_addr(int fd, int reuse);
46
46
 
47
+ /* return true if SO_REUSEPORT is supported */
48
+ bool grpc_is_socket_reuse_port_supported();
49
+
47
50
  /* disable nagle */
48
51
  grpc_error* grpc_set_socket_low_latency(int fd, int low_latency);
49
52
 
@@ -33,6 +33,10 @@ uint16_t grpc_htons(uint16_t hostshort) { return htons(hostshort); }
33
33
 
34
34
  uint16_t grpc_ntohs(uint16_t netshort) { return ntohs(netshort); }
35
35
 
36
+ uint32_t grpc_htonl(uint32_t hostlong) { return htonl(hostlong); }
37
+
38
+ uint32_t grpc_ntohl(uint32_t netlong) { return ntohl(netlong); }
39
+
36
40
  int grpc_inet_pton(int af, const char* src, void* dst) {
37
41
  return inet_pton(af, src, dst);
38
42
  }
@@ -31,6 +31,10 @@ uint16_t grpc_htons(uint16_t hostshort) { return htons(hostshort); }
31
31
 
32
32
  uint16_t grpc_ntohs(uint16_t netshort) { return ntohs(netshort); }
33
33
 
34
+ uint32_t grpc_htonl(uint32_t hostlong) { return htonl(hostlong); }
35
+
36
+ uint32_t grpc_ntohl(uint32_t netlong) { return ntohl(netlong); }
37
+
34
38
  int grpc_inet_pton(int af, const char* src, void* dst) {
35
39
  return inet_pton(af, src, dst);
36
40
  }
@@ -36,6 +36,7 @@
36
36
  #include "src/core/lib/iomgr/iomgr_internal.h"
37
37
  #include "src/core/lib/iomgr/pollset.h"
38
38
  #include "src/core/lib/iomgr/pollset_windows.h"
39
+ #include "src/core/lib/iomgr/sockaddr_windows.h"
39
40
  #include "src/core/lib/iomgr/socket_windows.h"
40
41
 
41
42
  grpc_winsocket* grpc_winsocket_create(SOCKET socket, const char* name) {
@@ -51,6 +52,10 @@ grpc_winsocket* grpc_winsocket_create(SOCKET socket, const char* name) {
51
52
  return r;
52
53
  }
53
54
 
55
+ SOCKET grpc_winsocket_wrapped_socket(grpc_winsocket* socket) {
56
+ return socket->socket;
57
+ }
58
+
54
59
  /* Schedule a shutdown of the socket operations. Will call the pending
55
60
  operations to abort them. We need to do that this way because of the
56
61
  various callsites of that function, which happens to be in various
@@ -148,4 +153,32 @@ void grpc_socket_become_ready(grpc_winsocket* socket,
148
153
  if (should_destroy) destroy(socket);
149
154
  }
150
155
 
156
+ static gpr_once g_probe_ipv6_once = GPR_ONCE_INIT;
157
+ static bool g_ipv6_loopback_available = false;
158
+
159
+ static void probe_ipv6_once(void) {
160
+ SOCKET s = socket(AF_INET6, SOCK_STREAM, 0);
161
+ g_ipv6_loopback_available = 0;
162
+ if (s == INVALID_SOCKET) {
163
+ gpr_log(GPR_INFO, "Disabling AF_INET6 sockets because socket() failed.");
164
+ } else {
165
+ grpc_sockaddr_in6 addr;
166
+ memset(&addr, 0, sizeof(addr));
167
+ addr.sin6_family = AF_INET6;
168
+ addr.sin6_addr.s6_addr[15] = 1; /* [::1]:0 */
169
+ if (bind(s, reinterpret_cast<grpc_sockaddr*>(&addr), sizeof(addr)) == 0) {
170
+ g_ipv6_loopback_available = 1;
171
+ } else {
172
+ gpr_log(GPR_INFO,
173
+ "Disabling AF_INET6 sockets because ::1 is not available.");
174
+ }
175
+ closesocket(s);
176
+ }
177
+ }
178
+
179
+ int grpc_ipv6_loopback_available(void) {
180
+ gpr_once_init(&g_probe_ipv6_once, probe_ipv6_once);
181
+ return g_ipv6_loopback_available;
182
+ }
183
+
151
184
  #endif /* GRPC_WINSOCK_SOCKET */