grpc 1.50.0 → 1.51.0

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

Potentially problematic release.


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

Files changed (459) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +131 -42
  3. data/include/grpc/event_engine/event_engine.h +10 -3
  4. data/include/grpc/event_engine/slice_buffer.h +17 -0
  5. data/include/grpc/grpc.h +0 -10
  6. data/include/grpc/impl/codegen/grpc_types.h +1 -5
  7. data/include/grpc/impl/codegen/port_platform.h +0 -3
  8. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +19 -13
  9. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -0
  10. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  11. data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -5
  12. data/src/core/ext/filters/client_channel/client_channel.cc +120 -140
  13. data/src/core/ext/filters/client_channel/client_channel.h +3 -4
  14. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +0 -2
  15. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  16. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  17. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
  18. data/src/core/ext/filters/client_channel/connector.h +1 -1
  19. data/src/core/ext/filters/client_channel/dynamic_filters.cc +20 -47
  20. data/src/core/ext/filters/client_channel/dynamic_filters.h +7 -8
  21. data/src/core/ext/filters/client_channel/health/health_check_client.cc +3 -4
  22. data/src/core/ext/filters/client_channel/http_proxy.cc +0 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
  24. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +5 -0
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +8 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +35 -44
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -3
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +3 -4
  30. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +41 -29
  32. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +9 -11
  34. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -12
  35. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +8 -10
  36. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +26 -27
  37. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +7 -9
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +44 -26
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +17 -27
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +13 -7
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +48 -47
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -126
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -9
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -32
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +22 -23
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +50 -52
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +2 -4
  53. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
  54. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +34 -26
  55. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
  56. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
  57. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +63 -46
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +80 -102
  59. data/src/core/ext/filters/client_channel/retry_service_config.cc +192 -234
  60. data/src/core/ext/filters/client_channel/retry_service_config.h +20 -23
  61. data/src/core/ext/filters/client_channel/retry_throttle.cc +8 -8
  62. data/src/core/ext/filters/client_channel/retry_throttle.h +8 -7
  63. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  64. data/src/core/ext/filters/client_channel/subchannel.cc +21 -25
  65. data/src/core/ext/filters/client_channel/subchannel.h +2 -2
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +11 -12
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +13 -14
  68. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -4
  70. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  71. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
  72. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -16
  73. data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
  74. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +13 -13
  75. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +34 -34
  76. data/src/core/ext/filters/http/server/http_server_filter.cc +26 -25
  77. data/src/core/ext/filters/message_size/message_size_filter.cc +86 -117
  78. data/src/core/ext/filters/message_size/message_size_filter.h +22 -15
  79. data/src/core/ext/filters/rbac/rbac_filter.cc +12 -12
  80. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +728 -530
  81. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -3
  82. data/src/core/ext/filters/server_config_selector/server_config_selector.h +1 -1
  83. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -7
  84. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +17 -21
  85. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +57 -72
  86. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
  87. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +212 -253
  89. data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -11
  90. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -3
  91. data/src/core/ext/transport/chttp2/transport/frame_data.cc +16 -15
  92. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  93. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +13 -13
  94. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -3
  95. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +10 -7
  96. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +15 -17
  97. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +5 -4
  98. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -6
  99. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -1
  100. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +31 -39
  102. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +7 -6
  103. data/src/core/ext/transport/chttp2/transport/internal.h +24 -8
  104. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -52
  105. data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
  106. data/src/core/ext/transport/chttp2/transport/varint.h +11 -8
  107. data/src/core/ext/transport/chttp2/transport/writing.cc +16 -16
  108. data/src/core/ext/transport/inproc/inproc_transport.cc +97 -115
  109. data/src/core/ext/xds/certificate_provider_store.cc +4 -4
  110. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -7
  111. data/src/core/ext/xds/xds_api.cc +15 -68
  112. data/src/core/ext/xds/xds_api.h +3 -7
  113. data/src/core/ext/xds/xds_bootstrap.h +0 -1
  114. data/src/core/ext/xds/xds_bootstrap_grpc.cc +3 -12
  115. data/src/core/ext/xds/xds_bootstrap_grpc.h +16 -1
  116. data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
  117. data/src/core/ext/xds/xds_channel_stack_modifier.cc +0 -1
  118. data/src/core/ext/xds/xds_client.cc +122 -90
  119. data/src/core/ext/xds/xds_client.h +7 -2
  120. data/src/core/ext/xds/xds_client_grpc.cc +5 -24
  121. data/src/core/ext/xds/xds_cluster.cc +291 -183
  122. data/src/core/ext/xds/xds_cluster.h +11 -15
  123. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +32 -29
  124. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +35 -16
  125. data/src/core/ext/xds/xds_common_types.cc +208 -141
  126. data/src/core/ext/xds/xds_common_types.h +19 -13
  127. data/src/core/ext/xds/xds_endpoint.cc +214 -129
  128. data/src/core/ext/xds/xds_endpoint.h +4 -7
  129. data/src/core/ext/xds/xds_http_fault_filter.cc +56 -43
  130. data/src/core/ext/xds/xds_http_fault_filter.h +13 -21
  131. data/src/core/ext/xds/xds_http_filters.cc +60 -73
  132. data/src/core/ext/xds/xds_http_filters.h +67 -19
  133. data/src/core/ext/xds/xds_http_rbac_filter.cc +152 -207
  134. data/src/core/ext/xds/xds_http_rbac_filter.h +12 -15
  135. data/src/core/ext/xds/xds_lb_policy_registry.cc +122 -169
  136. data/src/core/ext/xds/xds_lb_policy_registry.h +10 -11
  137. data/src/core/ext/xds/xds_listener.cc +459 -417
  138. data/src/core/ext/xds/xds_listener.h +43 -47
  139. data/src/core/ext/xds/xds_resource_type.h +3 -11
  140. data/src/core/ext/xds/xds_resource_type_impl.h +8 -13
  141. data/src/core/ext/xds/xds_route_config.cc +94 -80
  142. data/src/core/ext/xds/xds_route_config.h +10 -10
  143. data/src/core/ext/xds/xds_routing.cc +2 -1
  144. data/src/core/ext/xds/xds_routing.h +2 -0
  145. data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -94
  146. data/src/core/ext/xds/xds_transport_grpc.cc +4 -5
  147. data/src/core/lib/address_utils/parse_address.cc +11 -10
  148. data/src/core/lib/channel/channel_args.h +16 -1
  149. data/src/core/lib/channel/channel_stack.cc +23 -20
  150. data/src/core/lib/channel/channel_stack.h +17 -4
  151. data/src/core/lib/channel/channel_stack_builder.cc +4 -7
  152. data/src/core/lib/channel/channel_stack_builder.h +14 -6
  153. data/src/core/lib/channel/channel_stack_builder_impl.cc +25 -7
  154. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -0
  155. data/src/core/lib/channel/channel_trace.cc +4 -5
  156. data/src/core/lib/channel/channelz.cc +1 -1
  157. data/src/core/lib/channel/connected_channel.cc +695 -35
  158. data/src/core/lib/channel/connected_channel.h +0 -4
  159. data/src/core/lib/channel/promise_based_filter.cc +1004 -140
  160. data/src/core/lib/channel/promise_based_filter.h +364 -87
  161. data/src/core/lib/compression/message_compress.cc +5 -5
  162. data/src/core/lib/debug/event_log.cc +88 -0
  163. data/src/core/lib/debug/event_log.h +81 -0
  164. data/src/core/lib/debug/histogram_view.cc +69 -0
  165. data/src/core/lib/{slice/slice_refcount.cc → debug/histogram_view.h} +15 -13
  166. data/src/core/lib/debug/stats.cc +22 -119
  167. data/src/core/lib/debug/stats.h +29 -35
  168. data/src/core/lib/debug/stats_data.cc +224 -73
  169. data/src/core/lib/debug/stats_data.h +263 -122
  170. data/src/core/lib/event_engine/common_closures.h +71 -0
  171. data/src/core/lib/event_engine/default_event_engine.cc +38 -15
  172. data/src/core/lib/event_engine/default_event_engine.h +15 -3
  173. data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -4
  174. data/src/core/lib/event_engine/memory_allocator.cc +1 -1
  175. data/src/core/lib/event_engine/poller.h +10 -4
  176. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
  177. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
  178. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
  179. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  180. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  181. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  182. data/src/core/lib/event_engine/{executor/threaded_executor.cc → posix_engine/event_poller_posix_default.h} +13 -16
  183. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  184. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  185. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
  186. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  187. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
  188. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
  189. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +453 -18
  190. data/src/core/lib/event_engine/posix_engine/posix_engine.h +148 -24
  191. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  192. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
  193. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
  194. data/src/core/lib/event_engine/posix_engine/timer.h +9 -8
  195. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +57 -194
  196. data/src/core/lib/event_engine/posix_engine/timer_manager.h +21 -49
  197. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
  198. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
  199. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
  200. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  201. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
  202. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  203. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  204. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  205. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  206. data/src/core/lib/event_engine/slice.cc +7 -6
  207. data/src/core/lib/event_engine/slice_buffer.cc +2 -2
  208. data/src/core/lib/event_engine/thread_pool.cc +106 -25
  209. data/src/core/lib/event_engine/thread_pool.h +32 -9
  210. data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
  211. data/src/core/lib/event_engine/windows/windows_engine.cc +18 -12
  212. data/src/core/lib/event_engine/windows/windows_engine.h +8 -4
  213. data/src/core/lib/experiments/config.cc +1 -1
  214. data/src/core/lib/experiments/experiments.cc +13 -2
  215. data/src/core/lib/experiments/experiments.h +8 -1
  216. data/src/core/lib/gpr/cpu_linux.cc +6 -2
  217. data/src/core/lib/gpr/log_linux.cc +3 -4
  218. data/src/core/lib/gpr/string.h +1 -1
  219. data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
  220. data/src/core/lib/gprpp/load_file.cc +75 -0
  221. data/src/core/lib/gprpp/load_file.h +33 -0
  222. data/src/core/lib/gprpp/per_cpu.h +46 -0
  223. data/src/core/lib/gprpp/stat_posix.cc +5 -4
  224. data/src/core/lib/gprpp/stat_windows.cc +3 -2
  225. data/src/core/lib/gprpp/status_helper.h +1 -3
  226. data/src/core/lib/gprpp/strerror.cc +41 -0
  227. data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/strerror.h} +9 -13
  228. data/src/core/lib/gprpp/thd_windows.cc +1 -2
  229. data/src/core/lib/gprpp/time.cc +3 -4
  230. data/src/core/lib/gprpp/time.h +13 -2
  231. data/src/core/lib/gprpp/validation_errors.h +18 -1
  232. data/src/core/lib/http/httpcli.cc +40 -44
  233. data/src/core/lib/http/httpcli.h +6 -5
  234. data/src/core/lib/http/httpcli_security_connector.cc +4 -6
  235. data/src/core/lib/http/parser.cc +54 -65
  236. data/src/core/lib/iomgr/buffer_list.cc +105 -116
  237. data/src/core/lib/iomgr/buffer_list.h +60 -44
  238. data/src/core/lib/iomgr/call_combiner.cc +11 -10
  239. data/src/core/lib/iomgr/call_combiner.h +3 -4
  240. data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
  241. data/src/core/lib/iomgr/closure.h +49 -5
  242. data/src/core/lib/iomgr/combiner.cc +2 -2
  243. data/src/core/lib/iomgr/endpoint.h +1 -1
  244. data/src/core/lib/iomgr/endpoint_cfstream.cc +26 -25
  245. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
  246. data/src/core/lib/iomgr/error.cc +27 -42
  247. data/src/core/lib/iomgr/error.h +22 -152
  248. data/src/core/lib/iomgr/ev_apple.cc +4 -4
  249. data/src/core/lib/iomgr/ev_epoll1_linux.cc +26 -25
  250. data/src/core/lib/iomgr/ev_poll_posix.cc +27 -31
  251. data/src/core/lib/iomgr/exec_ctx.cc +3 -4
  252. data/src/core/lib/iomgr/exec_ctx.h +2 -3
  253. data/src/core/lib/iomgr/executor.cc +1 -2
  254. data/src/core/lib/iomgr/internal_errqueue.cc +3 -1
  255. data/src/core/lib/iomgr/iocp_windows.cc +1 -0
  256. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  257. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -1
  258. data/src/core/lib/iomgr/iomgr_windows.cc +2 -1
  259. data/src/core/lib/iomgr/load_file.cc +5 -9
  260. data/src/core/lib/iomgr/lockfree_event.cc +10 -10
  261. data/src/core/lib/iomgr/pollset_windows.cc +4 -4
  262. data/src/core/lib/iomgr/python_util.h +2 -2
  263. data/src/core/lib/iomgr/resolve_address.cc +8 -3
  264. data/src/core/lib/iomgr/resolve_address.h +3 -4
  265. data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
  266. data/src/core/lib/iomgr/resolve_address_posix.cc +14 -25
  267. data/src/core/lib/iomgr/resolve_address_posix.h +1 -2
  268. data/src/core/lib/iomgr/resolve_address_windows.cc +14 -17
  269. data/src/core/lib/iomgr/resolve_address_windows.h +1 -2
  270. data/src/core/lib/iomgr/socket_utils_common_posix.cc +30 -29
  271. data/src/core/lib/iomgr/socket_utils_posix.cc +1 -0
  272. data/src/core/lib/iomgr/socket_utils_posix.h +2 -2
  273. data/src/core/lib/iomgr/socket_windows.cc +2 -2
  274. data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -10
  275. data/src/core/lib/iomgr/tcp_client_posix.cc +31 -35
  276. data/src/core/lib/iomgr/tcp_client_windows.cc +8 -12
  277. data/src/core/lib/iomgr/tcp_posix.cc +92 -108
  278. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -34
  279. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  280. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +18 -21
  281. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -13
  282. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
  283. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -29
  284. data/src/core/lib/iomgr/tcp_windows.cc +27 -34
  285. data/src/core/lib/iomgr/timer.h +8 -8
  286. data/src/core/lib/iomgr/timer_generic.cc +9 -15
  287. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
  288. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -3
  289. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
  290. data/src/core/lib/json/json_channel_args.h +42 -0
  291. data/src/core/lib/json/json_object_loader.cc +7 -2
  292. data/src/core/lib/json/json_object_loader.h +22 -0
  293. data/src/core/lib/json/json_util.cc +5 -5
  294. data/src/core/lib/json/json_util.h +4 -4
  295. data/src/core/lib/load_balancing/lb_policy.cc +1 -1
  296. data/src/core/lib/load_balancing/lb_policy.h +4 -0
  297. data/src/core/lib/load_balancing/subchannel_interface.h +0 -7
  298. data/src/core/lib/matchers/matchers.cc +3 -4
  299. data/src/core/lib/promise/activity.cc +16 -2
  300. data/src/core/lib/promise/activity.h +38 -15
  301. data/src/core/lib/promise/arena_promise.h +80 -51
  302. data/src/core/lib/promise/context.h +13 -6
  303. data/src/core/lib/promise/detail/basic_seq.h +9 -28
  304. data/src/core/lib/promise/detail/promise_factory.h +58 -10
  305. data/src/core/lib/promise/detail/status.h +28 -0
  306. data/src/core/lib/promise/detail/switch.h +1455 -0
  307. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +3 -1
  308. data/src/core/lib/promise/for_each.h +129 -0
  309. data/src/core/lib/promise/loop.h +7 -5
  310. data/src/core/lib/promise/map_pipe.h +87 -0
  311. data/src/core/lib/promise/pipe.cc +19 -0
  312. data/src/core/lib/promise/pipe.h +505 -0
  313. data/src/core/lib/promise/poll.h +13 -0
  314. data/src/core/lib/promise/seq.h +3 -5
  315. data/src/core/lib/promise/sleep.cc +5 -4
  316. data/src/core/lib/promise/sleep.h +1 -2
  317. data/src/core/lib/promise/try_concurrently.h +341 -0
  318. data/src/core/lib/promise/try_seq.h +10 -13
  319. data/src/core/lib/resolver/server_address.cc +1 -0
  320. data/src/core/lib/resolver/server_address.h +1 -3
  321. data/src/core/lib/resource_quota/api.cc +0 -1
  322. data/src/core/lib/resource_quota/arena.cc +19 -0
  323. data/src/core/lib/resource_quota/arena.h +89 -0
  324. data/src/core/lib/resource_quota/memory_quota.cc +1 -0
  325. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +1 -3
  326. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
  327. data/src/core/lib/security/authorization/matchers.cc +25 -22
  328. data/src/core/lib/security/authorization/rbac_policy.cc +2 -3
  329. data/src/core/lib/security/context/security_context.h +10 -0
  330. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
  331. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  332. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +77 -55
  333. data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -3
  334. data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -51
  335. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +17 -21
  336. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +21 -25
  337. data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -0
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -24
  339. data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -0
  340. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -2
  341. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
  342. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -5
  343. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +24 -30
  344. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -5
  345. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -3
  346. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +19 -27
  347. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -11
  348. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -41
  349. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
  350. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +6 -11
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +8 -15
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +2 -6
  354. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +1 -4
  355. data/src/core/lib/security/security_connector/local/local_security_connector.cc +7 -11
  356. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +9 -14
  357. data/src/core/lib/security/security_connector/ssl_utils.cc +5 -7
  358. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -27
  359. data/src/core/lib/security/transport/client_auth_filter.cc +1 -1
  360. data/src/core/lib/security/transport/secure_endpoint.cc +26 -28
  361. data/src/core/lib/security/transport/security_handshaker.cc +53 -53
  362. data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
  363. data/src/core/lib/security/transport/tsi_error.cc +6 -3
  364. data/src/core/lib/security/util/json_util.cc +4 -5
  365. data/src/core/lib/service_config/service_config.h +1 -1
  366. data/src/core/lib/service_config/service_config_impl.cc +111 -158
  367. data/src/core/lib/service_config/service_config_impl.h +14 -17
  368. data/src/core/lib/service_config/service_config_parser.cc +14 -31
  369. data/src/core/lib/service_config/service_config_parser.h +14 -10
  370. data/src/core/lib/slice/b64.cc +2 -2
  371. data/src/core/lib/slice/slice.cc +7 -1
  372. data/src/core/lib/slice/slice.h +19 -6
  373. data/src/core/lib/slice/slice_buffer.cc +13 -14
  374. data/src/core/lib/slice/slice_internal.h +13 -21
  375. data/src/core/lib/slice/slice_refcount.h +34 -19
  376. data/src/core/lib/surface/byte_buffer.cc +3 -4
  377. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  378. data/src/core/lib/surface/call.cc +1366 -239
  379. data/src/core/lib/surface/call.h +44 -0
  380. data/src/core/lib/surface/call_details.cc +3 -3
  381. data/src/core/lib/surface/call_trace.cc +113 -0
  382. data/src/core/lib/surface/call_trace.h +30 -0
  383. data/src/core/lib/surface/channel.cc +44 -49
  384. data/src/core/lib/surface/channel.h +9 -1
  385. data/src/core/lib/surface/channel_ping.cc +1 -1
  386. data/src/core/lib/surface/channel_stack_type.cc +4 -0
  387. data/src/core/lib/surface/channel_stack_type.h +2 -0
  388. data/src/core/lib/surface/completion_queue.cc +38 -52
  389. data/src/core/lib/surface/init.cc +8 -39
  390. data/src/core/lib/surface/init_internally.h +8 -0
  391. data/src/core/lib/surface/lame_client.cc +10 -8
  392. data/src/core/lib/surface/server.cc +48 -70
  393. data/src/core/lib/surface/server.h +3 -4
  394. data/src/core/lib/surface/validate_metadata.cc +11 -12
  395. data/src/core/lib/surface/version.cc +2 -2
  396. data/src/core/lib/transport/connectivity_state.cc +2 -2
  397. data/src/core/lib/transport/error_utils.cc +34 -28
  398. data/src/core/lib/transport/error_utils.h +3 -3
  399. data/src/core/lib/transport/handshaker.cc +14 -14
  400. data/src/core/lib/transport/handshaker.h +1 -1
  401. data/src/core/lib/transport/handshaker_factory.h +26 -0
  402. data/src/core/lib/transport/handshaker_registry.cc +8 -2
  403. data/src/core/lib/transport/handshaker_registry.h +3 -4
  404. data/src/core/lib/transport/http_connect_handshaker.cc +23 -24
  405. data/src/core/lib/transport/metadata_batch.h +17 -1
  406. data/src/core/lib/transport/parsed_metadata.cc +2 -6
  407. data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -20
  408. data/src/core/lib/transport/transport.cc +63 -17
  409. data/src/core/lib/transport/transport.h +64 -68
  410. data/src/core/lib/transport/transport_impl.h +1 -1
  411. data/src/core/lib/transport/transport_op_string.cc +7 -6
  412. data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -10
  413. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -14
  414. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +10 -10
  415. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +8 -8
  416. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
  417. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
  418. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
  419. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  420. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +5 -5
  421. data/src/core/tsi/fake_transport_security.cc +3 -3
  422. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +7 -3
  423. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  424. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +6 -2
  425. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -2
  426. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +0 -3
  427. data/src/ruby/lib/grpc/version.rb +1 -1
  428. data/src/ruby/spec/channel_spec.rb +0 -43
  429. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  430. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  431. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  432. data/third_party/zlib/compress.c +3 -3
  433. data/third_party/zlib/crc32.c +21 -12
  434. data/third_party/zlib/deflate.c +112 -106
  435. data/third_party/zlib/deflate.h +2 -2
  436. data/third_party/zlib/gzlib.c +1 -1
  437. data/third_party/zlib/gzread.c +3 -5
  438. data/third_party/zlib/gzwrite.c +1 -1
  439. data/third_party/zlib/infback.c +10 -7
  440. data/third_party/zlib/inflate.c +5 -2
  441. data/third_party/zlib/inftrees.c +2 -2
  442. data/third_party/zlib/inftrees.h +1 -1
  443. data/third_party/zlib/trees.c +61 -62
  444. data/third_party/zlib/uncompr.c +2 -2
  445. data/third_party/zlib/zconf.h +16 -3
  446. data/third_party/zlib/zlib.h +10 -10
  447. data/third_party/zlib/zutil.c +9 -7
  448. data/third_party/zlib/zutil.h +1 -0
  449. metadata +55 -18
  450. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
  451. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
  452. data/src/core/lib/event_engine/executor/threaded_executor.h +0 -44
  453. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  454. data/src/core/lib/gpr/murmur_hash.h +0 -29
  455. data/src/core/lib/gpr/tls.h +0 -156
  456. data/src/core/lib/promise/call_push_pull.h +0 -148
  457. data/src/core/lib/slice/slice_api.cc +0 -39
  458. data/src/core/lib/slice/slice_buffer_api.cc +0 -35
  459. data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -23,6 +23,7 @@
23
23
  #include <grpc/support/alloc.h>
24
24
  #include <grpc/support/log.h>
25
25
 
26
+ #include "src/core/lib/slice/slice.h"
26
27
  #include "src/core/lib/slice/slice_internal.h"
27
28
  #include "src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h"
28
29
  #include "src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h"
@@ -61,11 +62,11 @@ static tsi_result alts_grpc_privacy_integrity_protect(
61
62
  if (status != GRPC_STATUS_OK) {
62
63
  gpr_log(GPR_ERROR, "Failed to protect, %s", error_details);
63
64
  gpr_free(error_details);
64
- grpc_slice_unref_internal(protected_slice);
65
+ grpc_core::CSliceUnref(protected_slice);
65
66
  return TSI_INTERNAL_ERROR;
66
67
  }
67
68
  grpc_slice_buffer_add(protected_slices, protected_slice);
68
- grpc_slice_buffer_reset_and_unref_internal(unprotected_slices);
69
+ grpc_slice_buffer_reset_and_unref(unprotected_slices);
69
70
  return TSI_OK;
70
71
  }
71
72
 
@@ -92,7 +93,7 @@ static tsi_result alts_grpc_privacy_integrity_unprotect(
92
93
  iovec_t unprotected_iovec = {GRPC_SLICE_START_PTR(unprotected_slice),
93
94
  GRPC_SLICE_LENGTH(unprotected_slice)};
94
95
  /* Strips frame header from protected slices. */
95
- grpc_slice_buffer_reset_and_unref_internal(&rp->header_sb);
96
+ grpc_slice_buffer_reset_and_unref(&rp->header_sb);
96
97
  grpc_slice_buffer_move_first(protected_slices, rp->header_length,
97
98
  &rp->header_sb);
98
99
  iovec_t header_iovec = alts_grpc_record_protocol_get_header_iovec(rp);
@@ -106,11 +107,11 @@ static tsi_result alts_grpc_privacy_integrity_unprotect(
106
107
  if (status != GRPC_STATUS_OK) {
107
108
  gpr_log(GPR_ERROR, "Failed to unprotect, %s", error_details);
108
109
  gpr_free(error_details);
109
- grpc_slice_unref_internal(unprotected_slice);
110
+ grpc_core::CSliceUnref(unprotected_slice);
110
111
  return TSI_INTERNAL_ERROR;
111
112
  }
112
- grpc_slice_buffer_reset_and_unref_internal(&rp->header_sb);
113
- grpc_slice_buffer_reset_and_unref_internal(protected_slices);
113
+ grpc_slice_buffer_reset_and_unref(&rp->header_sb);
114
+ grpc_slice_buffer_reset_and_unref(protected_slices);
114
115
  grpc_slice_buffer_add(unprotected_slices, unprotected_slice);
115
116
  return TSI_OK;
116
117
  }
@@ -156,7 +156,7 @@ void alts_grpc_record_protocol_destroy(alts_grpc_record_protocol* self) {
156
156
  self->vtable->destruct(self);
157
157
  }
158
158
  alts_iovec_record_protocol_destroy(self->iovec_rp);
159
- grpc_slice_buffer_destroy_internal(&self->header_sb);
159
+ grpc_slice_buffer_destroy(&self->header_sb);
160
160
  gpr_free(self->header_buf);
161
161
  gpr_free(self->iovec_buf);
162
162
  gpr_free(self);
@@ -190,7 +190,7 @@ static tsi_result alts_zero_copy_grpc_protector_unprotect(
190
190
  /* We have not parsed frame size yet. Parses frame size. */
191
191
  if (!read_frame_size(&protector->protected_sb,
192
192
  &protector->parsed_frame_size)) {
193
- grpc_slice_buffer_reset_and_unref_internal(&protector->protected_sb);
193
+ grpc_slice_buffer_reset_and_unref(&protector->protected_sb);
194
194
  return TSI_DATA_CORRUPTED;
195
195
  }
196
196
  }
@@ -211,7 +211,7 @@ static tsi_result alts_zero_copy_grpc_protector_unprotect(
211
211
  }
212
212
  protector->parsed_frame_size = 0;
213
213
  if (status != TSI_OK) {
214
- grpc_slice_buffer_reset_and_unref_internal(&protector->protected_sb);
214
+ grpc_slice_buffer_reset_and_unref(&protector->protected_sb);
215
215
  return status;
216
216
  }
217
217
  }
@@ -235,9 +235,9 @@ static void alts_zero_copy_grpc_protector_destroy(
235
235
  reinterpret_cast<alts_zero_copy_grpc_protector*>(self);
236
236
  alts_grpc_record_protocol_destroy(protector->record_protocol);
237
237
  alts_grpc_record_protocol_destroy(protector->unrecord_protocol);
238
- grpc_slice_buffer_destroy_internal(&protector->unprotected_staging_sb);
239
- grpc_slice_buffer_destroy_internal(&protector->protected_sb);
240
- grpc_slice_buffer_destroy_internal(&protector->protected_staging_sb);
238
+ grpc_slice_buffer_destroy(&protector->unprotected_staging_sb);
239
+ grpc_slice_buffer_destroy(&protector->protected_sb);
240
+ grpc_slice_buffer_destroy(&protector->protected_staging_sb);
241
241
  gpr_free(protector);
242
242
  }
243
243
 
@@ -481,7 +481,7 @@ static tsi_result fake_zero_copy_grpc_protector_unprotect(
481
481
  impl->parsed_frame_size - TSI_FAKE_FRAME_HEADER_SIZE,
482
482
  unprotected_slices);
483
483
  impl->parsed_frame_size = 0;
484
- grpc_slice_buffer_reset_and_unref_internal(&impl->header_sb);
484
+ grpc_slice_buffer_reset_and_unref(&impl->header_sb);
485
485
  }
486
486
  if (min_progress_size != nullptr) {
487
487
  if (impl->parsed_frame_size > TSI_FAKE_FRAME_HEADER_SIZE) {
@@ -498,8 +498,8 @@ static void fake_zero_copy_grpc_protector_destroy(
498
498
  if (self == nullptr) return;
499
499
  tsi_fake_zero_copy_grpc_protector* impl =
500
500
  reinterpret_cast<tsi_fake_zero_copy_grpc_protector*>(self);
501
- grpc_slice_buffer_destroy_internal(&impl->header_sb);
502
- grpc_slice_buffer_destroy_internal(&impl->protected_sb);
501
+ grpc_slice_buffer_destroy(&impl->header_sb);
502
+ grpc_slice_buffer_destroy(&impl->protected_sb);
503
503
  gpr_free(impl);
504
504
  }
505
505
 
@@ -55,7 +55,7 @@ TlsSessionKeyLoggerCache::TlsSessionKeyLogger::TlsSessionKeyLogger(
55
55
  gpr_log(GPR_ERROR,
56
56
  "Ignoring TLS Key logging. ERROR Opening TLS Keylog "
57
57
  "file: %s",
58
- grpc_error_std_string(error).c_str());
58
+ grpc_core::StatusToString(error).c_str());
59
59
  }
60
60
  cache_->tls_session_key_logger_map_.emplace(tls_session_key_log_file_path_,
61
61
  this);
@@ -88,7 +88,7 @@ void TlsSessionKeyLoggerCache::TlsSessionKeyLogger::LogSessionKeys(
88
88
  if (err) {
89
89
  grpc_error_handle error = GRPC_OS_ERROR(errno, "fwrite");
90
90
  gpr_log(GPR_ERROR, "Error Appending to TLS session key log file: %s",
91
- grpc_error_std_string(error).c_str());
91
+ grpc_core::StatusToString(error).c_str());
92
92
  fclose(fd_);
93
93
  fd_ = nullptr; // disable future attempts to write to this file
94
94
  } else {
@@ -118,7 +118,11 @@ grpc_core::RefCountedPtr<TlsSessionKeyLogger> TlsSessionKeyLoggerCache::Get(
118
118
  grpc_core::RefCountedPtr<TlsSessionKeyLoggerCache> cache;
119
119
  if (g_cache_instance == nullptr) {
120
120
  // This will automatically set g_cache_instance.
121
- cache = grpc_core::MakeRefCounted<TlsSessionKeyLoggerCache>();
121
+ // Not using MakeRefCounted because to the thread safety analysis, which
122
+ // cannot see through calls, it would look like MakeRefCounted was
123
+ // calling TlsSessionKeyLoggerCache without holding a lock on
124
+ // g_tls_session_key_log_cache_mu.
125
+ cache.reset(new TlsSessionKeyLoggerCache());
122
126
  } else {
123
127
  cache = g_cache_instance->Ref();
124
128
  }
@@ -51,7 +51,7 @@ class BoringSslCachedSession : public SslCachedSession {
51
51
 
52
52
  std::unique_ptr<SslCachedSession> SslCachedSession::Create(
53
53
  SslSessionPtr session) {
54
- return absl::make_unique<BoringSslCachedSession>(std::move(session));
54
+ return std::make_unique<BoringSslCachedSession>(std::move(session));
55
55
  }
56
56
 
57
57
  } // namespace tsi
@@ -26,6 +26,8 @@
26
26
 
27
27
  #include "absl/memory/memory.h"
28
28
 
29
+ #include "src/core/lib/slice/slice.h"
30
+
29
31
  // OpenSSL invalidates SSL_SESSION on SSL destruction making it pointless
30
32
  // to cache sessions. The workaround is to serialize (relatively expensive)
31
33
  // session into binary blob and re-create it from blob on every handshake.
@@ -49,7 +51,9 @@ class OpenSslCachedSession : public SslCachedSession {
49
51
  serialized_session_ = slice;
50
52
  }
51
53
 
52
- virtual ~OpenSslCachedSession() { grpc_slice_unref(serialized_session_); }
54
+ virtual ~OpenSslCachedSession() {
55
+ grpc_core::CSliceUnref(serialized_session_);
56
+ }
53
57
 
54
58
  SslSessionPtr CopySession() const override {
55
59
  const unsigned char* data = GRPC_SLICE_START_PTR(serialized_session_);
@@ -69,7 +73,7 @@ class OpenSslCachedSession : public SslCachedSession {
69
73
 
70
74
  std::unique_ptr<SslCachedSession> SslCachedSession::Create(
71
75
  SslSessionPtr session) {
72
- return absl::make_unique<OpenSslCachedSession>(std::move(session));
76
+ return std::make_unique<OpenSslCachedSession>(std::move(session));
73
77
  }
74
78
 
75
79
  } // namespace tsi
@@ -35,7 +35,6 @@ grpc_metadata_array_init_type grpc_metadata_array_init_import;
35
35
  grpc_metadata_array_destroy_type grpc_metadata_array_destroy_import;
36
36
  grpc_call_details_init_type grpc_call_details_init_import;
37
37
  grpc_call_details_destroy_type grpc_call_details_destroy_import;
38
- grpc_register_plugin_type grpc_register_plugin_import;
39
38
  grpc_init_type grpc_init_import;
40
39
  grpc_shutdown_type grpc_shutdown_import;
41
40
  grpc_is_initialized_type grpc_is_initialized_import;
@@ -321,7 +320,6 @@ void grpc_rb_load_imports(HMODULE library) {
321
320
  grpc_metadata_array_destroy_import = (grpc_metadata_array_destroy_type) GetProcAddress(library, "grpc_metadata_array_destroy");
322
321
  grpc_call_details_init_import = (grpc_call_details_init_type) GetProcAddress(library, "grpc_call_details_init");
323
322
  grpc_call_details_destroy_import = (grpc_call_details_destroy_type) GetProcAddress(library, "grpc_call_details_destroy");
324
- grpc_register_plugin_import = (grpc_register_plugin_type) GetProcAddress(library, "grpc_register_plugin");
325
323
  grpc_init_import = (grpc_init_type) GetProcAddress(library, "grpc_init");
326
324
  grpc_shutdown_import = (grpc_shutdown_type) GetProcAddress(library, "grpc_shutdown");
327
325
  grpc_is_initialized_import = (grpc_is_initialized_type) GetProcAddress(library, "grpc_is_initialized");
@@ -80,9 +80,6 @@ extern grpc_call_details_init_type grpc_call_details_init_import;
80
80
  typedef void(*grpc_call_details_destroy_type)(grpc_call_details* details);
81
81
  extern grpc_call_details_destroy_type grpc_call_details_destroy_import;
82
82
  #define grpc_call_details_destroy grpc_call_details_destroy_import
83
- typedef void(*grpc_register_plugin_type)(void (*init)(void), void (*destroy)(void));
84
- extern grpc_register_plugin_type grpc_register_plugin_import;
85
- #define grpc_register_plugin grpc_register_plugin_import
86
83
  typedef void(*grpc_init_type)(void);
87
84
  extern grpc_init_type grpc_init_import;
88
85
  #define grpc_init grpc_init_import
@@ -14,5 +14,5 @@
14
14
 
15
15
  # GRPC contains the General RPC module.
16
16
  module GRPC
17
- VERSION = '1.50.0'
17
+ VERSION = '1.51.0'
18
18
  end
@@ -28,28 +28,6 @@ describe GRPC::Core::Channel do
28
28
  GRPC::Core::ChannelCredentials.new(load_test_certs[0])
29
29
  end
30
30
 
31
- def fork_with_propagated_error_message
32
- pipe_read, pipe_write = IO.pipe
33
- pid = fork do
34
- pipe_read.close
35
- begin
36
- yield
37
- rescue => exc
38
- pipe_write.syswrite(exc.message)
39
- end
40
- pipe_write.close
41
- end
42
- pipe_write.close
43
-
44
- exc_message = pipe_read.read
45
- Process.wait(pid)
46
-
47
- unless $CHILD_STATUS.success?
48
- raise "forked process failed with #{$CHILD_STATUS}"
49
- end
50
- raise exc_message unless exc_message.empty?
51
- end
52
-
53
31
  shared_examples '#new' do
54
32
  it 'take a host name without channel args' do
55
33
  blk = proc do
@@ -102,14 +80,6 @@ describe GRPC::Core::Channel do
102
80
  blk = construct_with_args(args)
103
81
  expect(&blk).to_not raise_error
104
82
  end
105
-
106
- it 'raises if grpc was initialized in another process' do
107
- blk = construct_with_args({})
108
- expect(&blk).not_to raise_error
109
- expect do
110
- fork_with_propagated_error_message(&blk)
111
- end.to raise_error(RuntimeError, 'grpc cannot be used before and after forking')
112
- end
113
83
  end
114
84
 
115
85
  describe '#new for secure channels' do
@@ -168,19 +138,6 @@ describe GRPC::Core::Channel do
168
138
  expect(&blk).to raise_error(RuntimeError)
169
139
  STDERR.puts "#{Time.now}: finished: raises an error if called on a closed channel"
170
140
  end
171
-
172
- it 'raises if grpc was initialized in another process' do
173
- ch = GRPC::Core::Channel.new(fake_host, nil, :this_channel_is_insecure)
174
-
175
- deadline = Time.now + 5
176
-
177
- blk = proc do
178
- fork_with_propagated_error_message do
179
- ch.create_call(nil, nil, 'phony_method', nil, deadline)
180
- end
181
- end
182
- expect(&blk).to raise_error(RuntimeError, 'grpc cannot be used before and after forking')
183
- end
184
141
  end
185
142
 
186
143
  describe '#destroy' do
@@ -65,12 +65,21 @@ describe GRPC::ActiveCall do
65
65
 
66
66
  describe 'restricted view methods' do
67
67
  before(:each) do
68
- call = make_test_call
69
- ActiveCall.client_invoke(call)
70
- @client_call = ActiveCall.new(call, @pass_through,
68
+ @call = make_test_call
69
+ ActiveCall.client_invoke(@call)
70
+ @client_call = ActiveCall.new(@call, @pass_through,
71
71
  @pass_through, deadline)
72
72
  end
73
73
 
74
+ after(:each) do
75
+ # terminate the RPC that was started in before(:each)
76
+ recvd_rpc = @received_rpcs_queue.pop
77
+ recvd_call = recvd_rpc.call
78
+ recvd_call.run_batch(CallOps::SEND_INITIAL_METADATA => nil)
79
+ @call.run_batch(CallOps::RECV_INITIAL_METADATA => nil)
80
+ send_and_receive_close_and_status(@call, recvd_call)
81
+ end
82
+
74
83
  describe '#multi_req_view' do
75
84
  it 'exposes a fixed subset of the ActiveCall.methods' do
76
85
  want = %w(cancelled?, deadline, each_remote_read, metadata, \
@@ -0,0 +1,140 @@
1
+ // Copyright 2021 The Abseil Authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // https://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+ // -----------------------------------------------------------------------------
16
+ // File: cleanup.h
17
+ // -----------------------------------------------------------------------------
18
+ //
19
+ // `absl::Cleanup` implements the scope guard idiom, invoking the contained
20
+ // callback's `operator()() &&` on scope exit.
21
+ //
22
+ // Example:
23
+ //
24
+ // ```
25
+ // absl::Status CopyGoodData(const char* source_path, const char* sink_path) {
26
+ // FILE* source_file = fopen(source_path, "r");
27
+ // if (source_file == nullptr) {
28
+ // return absl::NotFoundError("No source file"); // No cleanups execute
29
+ // }
30
+ //
31
+ // // C++17 style cleanup using class template argument deduction
32
+ // absl::Cleanup source_closer = [source_file] { fclose(source_file); };
33
+ //
34
+ // FILE* sink_file = fopen(sink_path, "w");
35
+ // if (sink_file == nullptr) {
36
+ // return absl::NotFoundError("No sink file"); // First cleanup executes
37
+ // }
38
+ //
39
+ // // C++11 style cleanup using the factory function
40
+ // auto sink_closer = absl::MakeCleanup([sink_file] { fclose(sink_file); });
41
+ //
42
+ // Data data;
43
+ // while (ReadData(source_file, &data)) {
44
+ // if (!data.IsGood()) {
45
+ // absl::Status result = absl::FailedPreconditionError("Read bad data");
46
+ // return result; // Both cleanups execute
47
+ // }
48
+ // SaveData(sink_file, &data);
49
+ // }
50
+ //
51
+ // return absl::OkStatus(); // Both cleanups execute
52
+ // }
53
+ // ```
54
+ //
55
+ // Methods:
56
+ //
57
+ // `std::move(cleanup).Cancel()` will prevent the callback from executing.
58
+ //
59
+ // `std::move(cleanup).Invoke()` will execute the callback early, before
60
+ // destruction, and prevent the callback from executing in the destructor.
61
+ //
62
+ // Usage:
63
+ //
64
+ // `absl::Cleanup` is not an interface type. It is only intended to be used
65
+ // within the body of a function. It is not a value type and instead models a
66
+ // control flow construct. Check out `defer` in Golang for something similar.
67
+
68
+ #ifndef ABSL_CLEANUP_CLEANUP_H_
69
+ #define ABSL_CLEANUP_CLEANUP_H_
70
+
71
+ #include <utility>
72
+
73
+ #include "absl/base/config.h"
74
+ #include "absl/base/macros.h"
75
+ #include "absl/cleanup/internal/cleanup.h"
76
+
77
+ namespace absl {
78
+ ABSL_NAMESPACE_BEGIN
79
+
80
+ template <typename Arg, typename Callback = void()>
81
+ class ABSL_MUST_USE_RESULT Cleanup final {
82
+ static_assert(cleanup_internal::WasDeduced<Arg>(),
83
+ "Explicit template parameters are not supported.");
84
+
85
+ static_assert(cleanup_internal::ReturnsVoid<Callback>(),
86
+ "Callbacks that return values are not supported.");
87
+
88
+ public:
89
+ Cleanup(Callback callback) : storage_(std::move(callback)) {} // NOLINT
90
+
91
+ Cleanup(Cleanup&& other) = default;
92
+
93
+ void Cancel() && {
94
+ ABSL_HARDENING_ASSERT(storage_.IsCallbackEngaged());
95
+ storage_.DestroyCallback();
96
+ }
97
+
98
+ void Invoke() && {
99
+ ABSL_HARDENING_ASSERT(storage_.IsCallbackEngaged());
100
+ storage_.InvokeCallback();
101
+ storage_.DestroyCallback();
102
+ }
103
+
104
+ ~Cleanup() {
105
+ if (storage_.IsCallbackEngaged()) {
106
+ storage_.InvokeCallback();
107
+ storage_.DestroyCallback();
108
+ }
109
+ }
110
+
111
+ private:
112
+ cleanup_internal::Storage<Callback> storage_;
113
+ };
114
+
115
+ // `absl::Cleanup c = /* callback */;`
116
+ //
117
+ // C++17 type deduction API for creating an instance of `absl::Cleanup`
118
+ #if defined(ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION)
119
+ template <typename Callback>
120
+ Cleanup(Callback callback) -> Cleanup<cleanup_internal::Tag, Callback>;
121
+ #endif // defined(ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION)
122
+
123
+ // `auto c = absl::MakeCleanup(/* callback */);`
124
+ //
125
+ // C++11 type deduction API for creating an instance of `absl::Cleanup`
126
+ template <typename... Args, typename Callback>
127
+ absl::Cleanup<cleanup_internal::Tag, Callback> MakeCleanup(Callback callback) {
128
+ static_assert(cleanup_internal::WasDeduced<cleanup_internal::Tag, Args...>(),
129
+ "Explicit template parameters are not supported.");
130
+
131
+ static_assert(cleanup_internal::ReturnsVoid<Callback>(),
132
+ "Callbacks that return values are not supported.");
133
+
134
+ return {std::move(callback)};
135
+ }
136
+
137
+ ABSL_NAMESPACE_END
138
+ } // namespace absl
139
+
140
+ #endif // ABSL_CLEANUP_CLEANUP_H_
@@ -0,0 +1,100 @@
1
+ // Copyright 2021 The Abseil Authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // https://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef ABSL_CLEANUP_INTERNAL_CLEANUP_H_
16
+ #define ABSL_CLEANUP_INTERNAL_CLEANUP_H_
17
+
18
+ #include <new>
19
+ #include <type_traits>
20
+ #include <utility>
21
+
22
+ #include "absl/base/internal/invoke.h"
23
+ #include "absl/base/macros.h"
24
+ #include "absl/base/thread_annotations.h"
25
+ #include "absl/utility/utility.h"
26
+
27
+ namespace absl {
28
+ ABSL_NAMESPACE_BEGIN
29
+
30
+ namespace cleanup_internal {
31
+
32
+ struct Tag {};
33
+
34
+ template <typename Arg, typename... Args>
35
+ constexpr bool WasDeduced() {
36
+ return (std::is_same<cleanup_internal::Tag, Arg>::value) &&
37
+ (sizeof...(Args) == 0);
38
+ }
39
+
40
+ template <typename Callback>
41
+ constexpr bool ReturnsVoid() {
42
+ return (std::is_same<base_internal::invoke_result_t<Callback>, void>::value);
43
+ }
44
+
45
+ template <typename Callback>
46
+ class Storage {
47
+ public:
48
+ Storage() = delete;
49
+
50
+ explicit Storage(Callback callback) {
51
+ // Placement-new into a character buffer is used for eager destruction when
52
+ // the cleanup is invoked or cancelled. To ensure this optimizes well, the
53
+ // behavior is implemented locally instead of using an absl::optional.
54
+ ::new (GetCallbackBuffer()) Callback(std::move(callback));
55
+ is_callback_engaged_ = true;
56
+ }
57
+
58
+ Storage(Storage&& other) {
59
+ ABSL_HARDENING_ASSERT(other.IsCallbackEngaged());
60
+
61
+ ::new (GetCallbackBuffer()) Callback(std::move(other.GetCallback()));
62
+ is_callback_engaged_ = true;
63
+
64
+ other.DestroyCallback();
65
+ }
66
+
67
+ Storage(const Storage& other) = delete;
68
+
69
+ Storage& operator=(Storage&& other) = delete;
70
+
71
+ Storage& operator=(const Storage& other) = delete;
72
+
73
+ void* GetCallbackBuffer() { return static_cast<void*>(+callback_buffer_); }
74
+
75
+ Callback& GetCallback() {
76
+ return *reinterpret_cast<Callback*>(GetCallbackBuffer());
77
+ }
78
+
79
+ bool IsCallbackEngaged() const { return is_callback_engaged_; }
80
+
81
+ void DestroyCallback() {
82
+ is_callback_engaged_ = false;
83
+ GetCallback().~Callback();
84
+ }
85
+
86
+ void InvokeCallback() ABSL_NO_THREAD_SAFETY_ANALYSIS {
87
+ std::move(GetCallback())();
88
+ }
89
+
90
+ private:
91
+ bool is_callback_engaged_;
92
+ alignas(Callback) char callback_buffer_[sizeof(Callback)];
93
+ };
94
+
95
+ } // namespace cleanup_internal
96
+
97
+ ABSL_NAMESPACE_END
98
+ } // namespace absl
99
+
100
+ #endif // ABSL_CLEANUP_INTERNAL_CLEANUP_H_
@@ -19,7 +19,7 @@
19
19
  memory, Z_BUF_ERROR if there was not enough room in the output buffer,
20
20
  Z_STREAM_ERROR if the level parameter is invalid.
21
21
  */
22
- int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
22
+ int ZEXPORT compress2(dest, destLen, source, sourceLen, level)
23
23
  Bytef *dest;
24
24
  uLongf *destLen;
25
25
  const Bytef *source;
@@ -65,7 +65,7 @@ int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
65
65
 
66
66
  /* ===========================================================================
67
67
  */
68
- int ZEXPORT compress (dest, destLen, source, sourceLen)
68
+ int ZEXPORT compress(dest, destLen, source, sourceLen)
69
69
  Bytef *dest;
70
70
  uLongf *destLen;
71
71
  const Bytef *source;
@@ -78,7 +78,7 @@ int ZEXPORT compress (dest, destLen, source, sourceLen)
78
78
  If the default memLevel or windowBits for deflateInit() is changed, then
79
79
  this function needs to be updated.
80
80
  */
81
- uLong ZEXPORT compressBound (sourceLen)
81
+ uLong ZEXPORT compressBound(sourceLen)
82
82
  uLong sourceLen;
83
83
  {
84
84
  return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
@@ -98,13 +98,22 @@
98
98
  # endif
99
99
  #endif
100
100
 
101
+ /* If available, use the ARM processor CRC32 instruction. */
102
+ #if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8
103
+ # define ARMCRC32
104
+ #endif
105
+
101
106
  /* Local functions. */
102
107
  local z_crc_t multmodp OF((z_crc_t a, z_crc_t b));
103
108
  local z_crc_t x2nmodp OF((z_off64_t n, unsigned k));
104
109
 
105
- /* If available, use the ARM processor CRC32 instruction. */
106
- #if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8
107
- # define ARMCRC32
110
+ #if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE))
111
+ local z_word_t byte_swap OF((z_word_t word));
112
+ #endif
113
+
114
+ #if defined(W) && !defined(ARMCRC32)
115
+ local z_crc_t crc_word OF((z_word_t data));
116
+ local z_word_t crc_word_big OF((z_word_t data));
108
117
  #endif
109
118
 
110
119
  #if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE))
@@ -630,7 +639,7 @@ unsigned long ZEXPORT crc32_z(crc, buf, len)
630
639
  #endif /* DYNAMIC_CRC_TABLE */
631
640
 
632
641
  /* Pre-condition the CRC */
633
- crc ^= 0xffffffff;
642
+ crc = (~crc) & 0xffffffff;
634
643
 
635
644
  /* Compute the CRC up to a word boundary. */
636
645
  while (len && ((z_size_t)buf & 7) != 0) {
@@ -645,8 +654,8 @@ unsigned long ZEXPORT crc32_z(crc, buf, len)
645
654
  len &= 7;
646
655
 
647
656
  /* Do three interleaved CRCs to realize the throughput of one crc32x
648
- instruction per cycle. Each CRC is calcuated on Z_BATCH words. The three
649
- CRCs are combined into a single CRC after each set of batches. */
657
+ instruction per cycle. Each CRC is calculated on Z_BATCH words. The
658
+ three CRCs are combined into a single CRC after each set of batches. */
650
659
  while (num >= 3 * Z_BATCH) {
651
660
  crc1 = 0;
652
661
  crc2 = 0;
@@ -749,7 +758,7 @@ unsigned long ZEXPORT crc32_z(crc, buf, len)
749
758
  #endif /* DYNAMIC_CRC_TABLE */
750
759
 
751
760
  /* Pre-condition the CRC */
752
- crc ^= 0xffffffff;
761
+ crc = (~crc) & 0xffffffff;
753
762
 
754
763
  #ifdef W
755
764
 
@@ -1077,7 +1086,7 @@ uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
1077
1086
  #ifdef DYNAMIC_CRC_TABLE
1078
1087
  once(&made, make_crc_table);
1079
1088
  #endif /* DYNAMIC_CRC_TABLE */
1080
- return multmodp(x2nmodp(len2, 3), crc1) ^ crc2;
1089
+ return multmodp(x2nmodp(len2, 3), crc1) ^ (crc2 & 0xffffffff);
1081
1090
  }
1082
1091
 
1083
1092
  /* ========================================================================= */
@@ -1086,7 +1095,7 @@ uLong ZEXPORT crc32_combine(crc1, crc2, len2)
1086
1095
  uLong crc2;
1087
1096
  z_off_t len2;
1088
1097
  {
1089
- return crc32_combine64(crc1, crc2, len2);
1098
+ return crc32_combine64(crc1, crc2, (z_off64_t)len2);
1090
1099
  }
1091
1100
 
1092
1101
  /* ========================================================================= */
@@ -1103,14 +1112,14 @@ uLong ZEXPORT crc32_combine_gen64(len2)
1103
1112
  uLong ZEXPORT crc32_combine_gen(len2)
1104
1113
  z_off_t len2;
1105
1114
  {
1106
- return crc32_combine_gen64(len2);
1115
+ return crc32_combine_gen64((z_off64_t)len2);
1107
1116
  }
1108
1117
 
1109
1118
  /* ========================================================================= */
1110
- uLong crc32_combine_op(crc1, crc2, op)
1119
+ uLong ZEXPORT crc32_combine_op(crc1, crc2, op)
1111
1120
  uLong crc1;
1112
1121
  uLong crc2;
1113
1122
  uLong op;
1114
1123
  {
1115
- return multmodp(op, crc1) ^ crc2;
1124
+ return multmodp(op, crc1) ^ (crc2 & 0xffffffff);
1116
1125
  }