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
@@ -60,7 +60,7 @@ grpc_error_handle grpc_tcp_set_non_block(SOCKET sock) {
60
60
  status = WSAIoctl(sock, GRPC_FIONBIO, &param, sizeof(param), NULL, 0, &ret,
61
61
  NULL, NULL);
62
62
  return status == 0
63
- ? GRPC_ERROR_NONE
63
+ ? absl::OkStatus()
64
64
  : GRPC_WSA_ERROR(WSAGetLastError(), "WSAIoctl(GRPC_FIONBIO)");
65
65
  }
66
66
 
@@ -70,7 +70,7 @@ static grpc_error_handle set_dualstack(SOCKET sock) {
70
70
  status = setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (const char*)&param,
71
71
  sizeof(param));
72
72
  return status == 0
73
- ? GRPC_ERROR_NONE
73
+ ? absl::OkStatus()
74
74
  : GRPC_WSA_ERROR(WSAGetLastError(), "setsockopt(IPV6_V6ONLY)");
75
75
  }
76
76
 
@@ -82,19 +82,19 @@ static grpc_error_handle enable_socket_low_latency(SOCKET sock) {
82
82
  if (status == SOCKET_ERROR) {
83
83
  status = WSAGetLastError();
84
84
  }
85
- return status == 0 ? GRPC_ERROR_NONE
85
+ return status == 0 ? absl::OkStatus()
86
86
  : GRPC_WSA_ERROR(status, "setsockopt(TCP_NODELAY)");
87
87
  }
88
88
 
89
89
  grpc_error_handle grpc_tcp_prepare_socket(SOCKET sock) {
90
90
  grpc_error_handle err;
91
91
  err = grpc_tcp_set_non_block(sock);
92
- if (!GRPC_ERROR_IS_NONE(err)) return err;
92
+ if (!err.ok()) return err;
93
93
  err = set_dualstack(sock);
94
- if (!GRPC_ERROR_IS_NONE(err)) return err;
94
+ if (!err.ok()) return err;
95
95
  err = enable_socket_low_latency(sock);
96
- if (!GRPC_ERROR_IS_NONE(err)) return err;
97
- return GRPC_ERROR_NONE;
96
+ if (!err.ok()) return err;
97
+ return absl::OkStatus();
98
98
  }
99
99
 
100
100
  typedef struct grpc_tcp {
@@ -130,8 +130,7 @@ typedef struct grpc_tcp {
130
130
  static void tcp_free(grpc_tcp* tcp) {
131
131
  grpc_winsocket_destroy(tcp->socket);
132
132
  gpr_mu_destroy(&tcp->mu);
133
- grpc_slice_buffer_destroy_internal(&tcp->last_read_buffer);
134
- if (tcp->shutting_down) GRPC_ERROR_UNREF(tcp->shutdown_error);
133
+ grpc_slice_buffer_destroy(&tcp->last_read_buffer);
135
134
  delete tcp;
136
135
  }
137
136
 
@@ -184,14 +183,12 @@ static void on_read(void* tcpp, grpc_error_handle error) {
184
183
  gpr_log(GPR_INFO, "TCP:%p on_read", tcp);
185
184
  }
186
185
 
187
- (void)GRPC_ERROR_REF(error);
188
-
189
- if (GRPC_ERROR_IS_NONE(error)) {
186
+ if (error.ok()) {
190
187
  if (info->wsa_error != 0 && !tcp->shutting_down) {
191
188
  char* utf8_message = gpr_format_message(info->wsa_error);
192
- error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(utf8_message);
189
+ error = GRPC_ERROR_CREATE(utf8_message);
193
190
  gpr_free(utf8_message);
194
- grpc_slice_buffer_reset_and_unref_internal(tcp->read_slices);
191
+ grpc_slice_buffer_reset_and_unref(tcp->read_slices);
195
192
  } else {
196
193
  if (info->bytes_transferred != 0 && !tcp->shutting_down) {
197
194
  GPR_ASSERT((size_t)info->bytes_transferred <= tcp->read_slices->length);
@@ -219,13 +216,13 @@ static void on_read(void* tcpp, grpc_error_handle error) {
219
216
  if (grpc_tcp_trace.enabled()) {
220
217
  gpr_log(GPR_INFO, "TCP:%p unref read_slice", tcp);
221
218
  }
222
- grpc_slice_buffer_reset_and_unref_internal(tcp->read_slices);
219
+ grpc_slice_buffer_reset_and_unref(tcp->read_slices);
223
220
  error = grpc_error_set_int(
224
221
  tcp->shutting_down
225
- ? GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
226
- "TCP stream shutting down", &tcp->shutdown_error, 1)
227
- : GRPC_ERROR_CREATE_FROM_STATIC_STRING("End of TCP stream"),
228
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
222
+ ? GRPC_ERROR_CREATE_REFERENCING("TCP stream shutting down",
223
+ &tcp->shutdown_error, 1)
224
+ : GRPC_ERROR_CREATE("End of TCP stream"),
225
+ grpc_core::StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE);
229
226
  }
230
227
  }
231
228
  }
@@ -256,15 +253,15 @@ static void win_read(grpc_endpoint* ep, grpc_slice_buffer* read_slices,
256
253
  grpc_core::ExecCtx::Run(
257
254
  DEBUG_LOCATION, cb,
258
255
  grpc_error_set_int(
259
- GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
260
- "TCP socket is shutting down", &tcp->shutdown_error, 1),
261
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
256
+ GRPC_ERROR_CREATE_REFERENCING("TCP socket is shutting down",
257
+ &tcp->shutdown_error, 1),
258
+ grpc_core::StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE));
262
259
  return;
263
260
  }
264
261
 
265
262
  tcp->read_cb = cb;
266
263
  tcp->read_slices = read_slices;
267
- grpc_slice_buffer_reset_and_unref_internal(read_slices);
264
+ grpc_slice_buffer_reset_and_unref(read_slices);
268
265
  grpc_slice_buffer_swap(read_slices, &tcp->last_read_buffer);
269
266
 
270
267
  if (tcp->read_slices->length < DEFAULT_TARGET_READ_SIZE / 2 &&
@@ -291,7 +288,7 @@ static void win_read(grpc_endpoint* ep, grpc_slice_buffer* read_slices,
291
288
  /* Did we get data immediately ? Yay. */
292
289
  if (info->wsa_error != WSAEWOULDBLOCK) {
293
290
  info->bytes_transferred = bytes_read;
294
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, &tcp->on_read, GRPC_ERROR_NONE);
291
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, &tcp->on_read, absl::OkStatus());
295
292
  return;
296
293
  }
297
294
 
@@ -324,14 +321,12 @@ static void on_write(void* tcpp, grpc_error_handle error) {
324
321
  gpr_log(GPR_INFO, "TCP:%p on_write", tcp);
325
322
  }
326
323
 
327
- (void)GRPC_ERROR_REF(error);
328
-
329
324
  gpr_mu_lock(&tcp->mu);
330
325
  cb = tcp->write_cb;
331
326
  tcp->write_cb = NULL;
332
327
  gpr_mu_unlock(&tcp->mu);
333
328
 
334
- if (GRPC_ERROR_IS_NONE(error)) {
329
+ if (error.ok()) {
335
330
  if (info->wsa_error != 0) {
336
331
  error = GRPC_WSA_ERROR(info->wsa_error, "WSASend");
337
332
  } else {
@@ -372,9 +367,9 @@ static void win_write(grpc_endpoint* ep, grpc_slice_buffer* slices,
372
367
  grpc_core::ExecCtx::Run(
373
368
  DEBUG_LOCATION, cb,
374
369
  grpc_error_set_int(
375
- GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
376
- "TCP socket is shutting down", &tcp->shutdown_error, 1),
377
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
370
+ GRPC_ERROR_CREATE_REFERENCING("TCP socket is shutting down",
371
+ &tcp->shutdown_error, 1),
372
+ grpc_core::StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE));
378
373
  return;
379
374
  }
380
375
 
@@ -403,7 +398,7 @@ static void win_write(grpc_endpoint* ep, grpc_slice_buffer* slices,
403
398
  avoid doing an async write operation at all. */
404
399
  if (info->wsa_error != WSAEWOULDBLOCK) {
405
400
  grpc_error_handle error = status == 0
406
- ? GRPC_ERROR_NONE
401
+ ? absl::OkStatus()
407
402
  : GRPC_WSA_ERROR(info->wsa_error, "WSASend");
408
403
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, cb, error);
409
404
  if (allocated) gpr_free(allocated);
@@ -465,8 +460,6 @@ static void win_shutdown(grpc_endpoint* ep, grpc_error_handle why) {
465
460
  if (!tcp->shutting_down) {
466
461
  tcp->shutting_down = 1;
467
462
  tcp->shutdown_error = why;
468
- } else {
469
- GRPC_ERROR_UNREF(why);
470
463
  }
471
464
  grpc_winsocket_shutdown(tcp->socket);
472
465
  gpr_mu_unlock(&tcp->mu);
@@ -474,7 +467,7 @@ static void win_shutdown(grpc_endpoint* ep, grpc_error_handle why) {
474
467
 
475
468
  static void win_destroy(grpc_endpoint* ep) {
476
469
  grpc_tcp* tcp = (grpc_tcp*)ep;
477
- grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
470
+ grpc_slice_buffer_reset_and_unref(&tcp->last_read_buffer);
478
471
  TCP_UNREF(tcp, "destroy");
479
472
  }
480
473
 
@@ -70,12 +70,12 @@ typedef struct grpc_timer_vtable {
70
70
  } grpc_timer_vtable;
71
71
 
72
72
  /* Initialize *timer. When expired or canceled, closure will be called with
73
- error set to indicate if it expired (GRPC_ERROR_NONE) or was canceled
74
- (GRPC_ERROR_CANCELLED). *closure is guaranteed to be called exactly once, and
75
- application code should check the error to determine how it was invoked. The
76
- application callback is also responsible for maintaining information about
77
- when to free up any user-level state. Behavior is undefined for a deadline of
78
- grpc_core::Timestamp::InfFuture(). */
73
+ error set to indicate if it expired (absl::OkStatus()) or was canceled
74
+ (absl::CancelledError()). *closure is guaranteed to be called exactly once,
75
+ and application code should check the error to determine how it was invoked.
76
+ The application callback is also responsible for maintaining information
77
+ about when to free up any user-level state. Behavior is undefined for a
78
+ deadline of grpc_core::Timestamp::InfFuture(). */
79
79
  void grpc_timer_init(grpc_timer* timer, grpc_core::Timestamp deadline,
80
80
  grpc_closure* closure);
81
81
 
@@ -99,8 +99,8 @@ void grpc_timer_init_unset(grpc_timer* timer);
99
99
 
100
100
  In all of these cases, the cancellation is still considered successful.
101
101
  They are essentially distinguished in that the timer_cb will be run
102
- exactly once from either the cancellation (with error GRPC_ERROR_CANCELLED)
103
- or from the activation (with error GRPC_ERROR_NONE).
102
+ exactly once from either the cancellation (with error absl::CancelledError())
103
+ or from the activation (with error absl::OkStatus()).
104
104
 
105
105
  Note carefully that the callback function MAY occur in the same callstack
106
106
  as grpc_timer_cancel. It's expected that most timers will be cancelled (their
@@ -31,7 +31,6 @@
31
31
 
32
32
  #include "src/core/lib/debug/trace.h"
33
33
  #include "src/core/lib/gpr/spinlock.h"
34
- #include "src/core/lib/gpr/tls.h"
35
34
  #include "src/core/lib/gpr/useful.h"
36
35
  #include "src/core/lib/gprpp/manual_constructor.h"
37
36
  #include "src/core/lib/gprpp/time.h"
@@ -216,7 +215,7 @@ static void validate_non_pending_timer(grpc_timer* t) {
216
215
  * has last-seen. This is an optimization to prevent the thread from checking
217
216
  * shared_mutables.min_timer (which requires acquiring shared_mutables.mu lock,
218
217
  * an expensive operation) */
219
- static GPR_THREAD_LOCAL(int64_t) g_last_seen_min_timer;
218
+ static thread_local int64_t g_last_seen_min_timer;
220
219
 
221
220
  struct shared_mutables {
222
221
  /* The deadline of the next timer due across all timer shards */
@@ -274,9 +273,8 @@ static void timer_list_init() {
274
273
 
275
274
  static void timer_list_shutdown() {
276
275
  size_t i;
277
- run_some_expired_timers(
278
- grpc_core::Timestamp::InfFuture(), nullptr,
279
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Timer list shutdown"));
276
+ run_some_expired_timers(grpc_core::Timestamp::InfFuture(), nullptr,
277
+ GRPC_ERROR_CREATE("Timer list shutdown"));
280
278
  for (i = 0; i < g_num_shards; i++) {
281
279
  timer_shard* shard = &g_shards[i];
282
280
  gpr_mu_destroy(&shard->mu);
@@ -351,8 +349,7 @@ static void timer_init(grpc_timer* timer, grpc_core::Timestamp deadline,
351
349
  timer->pending = false;
352
350
  grpc_core::ExecCtx::Run(
353
351
  DEBUG_LOCATION, timer->closure,
354
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(
355
- "Attempt to create timer before initialization"));
352
+ GRPC_ERROR_CREATE("Attempt to create timer before initialization"));
356
353
  return;
357
354
  }
358
355
 
@@ -361,7 +358,7 @@ static void timer_init(grpc_timer* timer, grpc_core::Timestamp deadline,
361
358
  grpc_core::Timestamp now = grpc_core::Timestamp::Now();
362
359
  if (deadline <= now) {
363
360
  timer->pending = false;
364
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, timer->closure, GRPC_ERROR_NONE);
361
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, timer->closure, absl::OkStatus());
365
362
  gpr_mu_unlock(&shard->mu);
366
363
  /* early out */
367
364
  return;
@@ -451,7 +448,7 @@ static void timer_cancel(grpc_timer* timer) {
451
448
  REMOVE_FROM_HASH_TABLE(timer);
452
449
 
453
450
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, timer->closure,
454
- GRPC_ERROR_CANCELLED);
451
+ absl::CancelledError());
455
452
  timer->pending = false;
456
453
  if (timer->heap_index == INVALID_HEAP_INDEX) {
457
454
  list_remove(timer);
@@ -551,8 +548,7 @@ static size_t pop_timers(timer_shard* shard, grpc_core::Timestamp now,
551
548
  gpr_mu_lock(&shard->mu);
552
549
  while ((timer = pop_one(shard, now))) {
553
550
  REMOVE_FROM_HASH_TABLE(timer);
554
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, timer->closure,
555
- GRPC_ERROR_REF(error));
551
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, timer->closure, error);
556
552
  n++;
557
553
  }
558
554
  *new_min_deadline = compute_min_deadline(shard);
@@ -658,8 +654,6 @@ static grpc_timer_check_result run_some_expired_timers(
658
654
  gpr_spinlock_unlock(&g_shared_mutables.checker_mu);
659
655
  }
660
656
 
661
- GRPC_ERROR_UNREF(error);
662
-
663
657
  return result;
664
658
  }
665
659
 
@@ -687,8 +681,8 @@ static grpc_timer_check_result timer_check(grpc_core::Timestamp* next) {
687
681
 
688
682
  grpc_error_handle shutdown_error =
689
683
  now != grpc_core::Timestamp::InfFuture()
690
- ? GRPC_ERROR_NONE
691
- : GRPC_ERROR_CREATE_FROM_STATIC_STRING("Shutting down timer system");
684
+ ? absl::OkStatus()
685
+ : GRPC_ERROR_CREATE("Shutting down timer system");
692
686
 
693
687
  // tracing
694
688
  if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
@@ -45,11 +45,10 @@ absl::StatusOr<std::vector<grpc_resolved_address>>
45
45
  grpc_resolve_unix_domain_address(absl::string_view name) {
46
46
  grpc_resolved_address addr;
47
47
  grpc_error_handle error = grpc_core::UnixSockaddrPopulate(name, &addr);
48
- if (GRPC_ERROR_IS_NONE(error)) {
48
+ if (error.ok()) {
49
49
  return std::vector<grpc_resolved_address>({addr});
50
50
  }
51
51
  auto result = grpc_error_to_absl_status(error);
52
- GRPC_ERROR_UNREF(error);
53
52
  return result;
54
53
  }
55
54
 
@@ -58,11 +57,10 @@ grpc_resolve_unix_abstract_domain_address(const absl::string_view name) {
58
57
  grpc_resolved_address addr;
59
58
  grpc_error_handle error =
60
59
  grpc_core::UnixAbstractSockaddrPopulate(name, &addr);
61
- if (GRPC_ERROR_IS_NONE(error)) {
60
+ if (error.ok()) {
62
61
  return std::vector<grpc_resolved_address>({addr});
63
62
  }
64
63
  auto result = grpc_error_to_absl_status(error);
65
- GRPC_ERROR_UNREF(error);
66
64
  return result;
67
65
  }
68
66
 
@@ -28,6 +28,7 @@
28
28
 
29
29
  #include <grpc/support/log.h>
30
30
 
31
+ #include "src/core/lib/gprpp/strerror.h"
31
32
  #include "src/core/lib/iomgr/wakeup_fd_posix.h"
32
33
 
33
34
  static grpc_error_handle eventfd_create(grpc_wakeup_fd* fd_info) {
@@ -36,7 +37,7 @@ static grpc_error_handle eventfd_create(grpc_wakeup_fd* fd_info) {
36
37
  if (fd_info->read_fd < 0) {
37
38
  return GRPC_OS_ERROR(errno, "eventfd");
38
39
  }
39
- return GRPC_ERROR_NONE;
40
+ return absl::OkStatus();
40
41
  }
41
42
 
42
43
  static grpc_error_handle eventfd_consume(grpc_wakeup_fd* fd_info) {
@@ -48,7 +49,7 @@ static grpc_error_handle eventfd_consume(grpc_wakeup_fd* fd_info) {
48
49
  if (err < 0 && errno != EAGAIN) {
49
50
  return GRPC_OS_ERROR(errno, "eventfd_read");
50
51
  }
51
- return GRPC_ERROR_NONE;
52
+ return absl::OkStatus();
52
53
  }
53
54
 
54
55
  static grpc_error_handle eventfd_wakeup(grpc_wakeup_fd* fd_info) {
@@ -59,7 +60,7 @@ static grpc_error_handle eventfd_wakeup(grpc_wakeup_fd* fd_info) {
59
60
  if (err < 0) {
60
61
  return GRPC_OS_ERROR(errno, "eventfd_write");
61
62
  }
62
- return GRPC_ERROR_NONE;
63
+ return absl::OkStatus();
63
64
  }
64
65
 
65
66
  static void eventfd_destroy(grpc_wakeup_fd* fd_info) {
@@ -28,6 +28,7 @@
28
28
 
29
29
  #include <grpc/support/log.h>
30
30
 
31
+ #include "src/core/lib/gprpp/strerror.h"
31
32
  #include "src/core/lib/iomgr/socket_utils_posix.h"
32
33
  #include "src/core/lib/iomgr/wakeup_fd_pipe.h"
33
34
  #include "src/core/lib/iomgr/wakeup_fd_posix.h"
@@ -36,17 +37,18 @@ static grpc_error_handle pipe_init(grpc_wakeup_fd* fd_info) {
36
37
  int pipefd[2];
37
38
  int r = pipe(pipefd);
38
39
  if (0 != r) {
39
- gpr_log(GPR_ERROR, "pipe creation failed (%d): %s", errno, strerror(errno));
40
+ gpr_log(GPR_ERROR, "pipe creation failed (%d): %s", errno,
41
+ grpc_core::StrError(errno).c_str());
40
42
  return GRPC_OS_ERROR(errno, "pipe");
41
43
  }
42
44
  grpc_error_handle err;
43
45
  err = grpc_set_socket_nonblocking(pipefd[0], 1);
44
- if (!GRPC_ERROR_IS_NONE(err)) return err;
46
+ if (!err.ok()) return err;
45
47
  err = grpc_set_socket_nonblocking(pipefd[1], 1);
46
- if (!GRPC_ERROR_IS_NONE(err)) return err;
48
+ if (!err.ok()) return err;
47
49
  fd_info->read_fd = pipefd[0];
48
50
  fd_info->write_fd = pipefd[1];
49
- return GRPC_ERROR_NONE;
51
+ return absl::OkStatus();
50
52
  }
51
53
 
52
54
  static grpc_error_handle pipe_consume(grpc_wakeup_fd* fd_info) {
@@ -56,10 +58,10 @@ static grpc_error_handle pipe_consume(grpc_wakeup_fd* fd_info) {
56
58
  for (;;) {
57
59
  r = read(fd_info->read_fd, buf, sizeof(buf));
58
60
  if (r > 0) continue;
59
- if (r == 0) return GRPC_ERROR_NONE;
61
+ if (r == 0) return absl::OkStatus();
60
62
  switch (errno) {
61
63
  case EAGAIN:
62
- return GRPC_ERROR_NONE;
64
+ return absl::OkStatus();
63
65
  case EINTR:
64
66
  continue;
65
67
  default:
@@ -72,7 +74,7 @@ static grpc_error_handle pipe_wakeup(grpc_wakeup_fd* fd_info) {
72
74
  char c = 0;
73
75
  while (write(fd_info->write_fd, &c, 1) != 1 && errno == EINTR) {
74
76
  }
75
- return GRPC_ERROR_NONE;
77
+ return absl::OkStatus();
76
78
  }
77
79
 
78
80
  static void pipe_destroy(grpc_wakeup_fd* fd_info) {
@@ -84,7 +86,7 @@ static int pipe_check_availability(void) {
84
86
  grpc_wakeup_fd fd;
85
87
  fd.read_fd = fd.write_fd = -1;
86
88
 
87
- if (pipe_init(&fd) == GRPC_ERROR_NONE) {
89
+ if (pipe_init(&fd) == absl::OkStatus()) {
88
90
  pipe_destroy(&fd);
89
91
  return 1;
90
92
  } else {
@@ -0,0 +1,42 @@
1
+ // Copyright 2022 gRPC 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
+ // http://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 GRPC_CORE_LIB_JSON_JSON_CHANNEL_ARGS_H
16
+ #define GRPC_CORE_LIB_JSON_JSON_CHANNEL_ARGS_H
17
+
18
+ #include <grpc/support/port_platform.h>
19
+
20
+ #include "absl/strings/string_view.h"
21
+ #include "absl/types/optional.h"
22
+
23
+ #include "src/core/lib/channel/channel_args.h"
24
+ #include "src/core/lib/json/json_args.h"
25
+
26
+ namespace grpc_core {
27
+
28
+ class JsonChannelArgs : public JsonArgs {
29
+ public:
30
+ explicit JsonChannelArgs(const ChannelArgs& args) : args_(args) {}
31
+
32
+ bool IsEnabled(absl::string_view key) const override {
33
+ return args_.GetBool(key).value_or(false);
34
+ }
35
+
36
+ private:
37
+ ChannelArgs args_;
38
+ };
39
+
40
+ } // namespace grpc_core
41
+
42
+ #endif // GRPC_CORE_LIB_JSON_JSON_CHANNEL_ARGS_H
@@ -56,7 +56,7 @@ void LoadDuration::LoadInto(const std::string& value, void* dst,
56
56
  }
57
57
  buf = absl::StripAsciiWhitespace(buf);
58
58
  auto decimal_point = buf.find('.');
59
- int nanos = 0;
59
+ int32_t nanos = 0;
60
60
  if (decimal_point != absl::string_view::npos) {
61
61
  absl::string_view after_decimal = buf.substr(decimal_point + 1);
62
62
  buf = buf.substr(0, decimal_point);
@@ -73,11 +73,16 @@ void LoadDuration::LoadInto(const std::string& value, void* dst,
73
73
  nanos *= 10;
74
74
  }
75
75
  }
76
- int seconds;
76
+ int64_t seconds;
77
77
  if (!absl::SimpleAtoi(buf, &seconds)) {
78
78
  errors->AddError("Not a duration (not a number of seconds)");
79
79
  return;
80
80
  }
81
+ // Acceptable range for seconds documented at
82
+ // https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration
83
+ if (seconds < 0 || seconds > 315576000000) {
84
+ errors->AddError("seconds must be in the range [0, 315576000000]");
85
+ }
81
86
  *static_cast<Duration*>(dst) =
82
87
  Duration::FromSecondsAndNanoseconds(seconds, nanos);
83
88
  }
@@ -20,7 +20,9 @@
20
20
  #include <cstdint>
21
21
  #include <cstring>
22
22
  #include <map>
23
+ #include <memory>
23
24
  #include <string>
25
+ #include <utility>
24
26
  #include <vector>
25
27
 
26
28
  #include "absl/meta/type_traits.h"
@@ -391,6 +393,26 @@ class AutoLoader<absl::optional<T>> final : public LoadOptional {
391
393
  ~AutoLoader() = default;
392
394
  };
393
395
 
396
+ // Specializations of AutoLoader for std::unique_ptr<>.
397
+ template <typename T>
398
+ class AutoLoader<std::unique_ptr<T>> final : public LoadOptional {
399
+ public:
400
+ void* Emplace(void* dst) const final {
401
+ auto& p = *static_cast<std::unique_ptr<T>*>(dst);
402
+ p = std::make_unique<T>();
403
+ return p.get();
404
+ }
405
+ void Reset(void* dst) const final {
406
+ static_cast<std::unique_ptr<T>*>(dst)->reset();
407
+ }
408
+ const LoaderInterface* ElementLoader() const final {
409
+ return LoaderForType<T>();
410
+ }
411
+
412
+ private:
413
+ ~AutoLoader() = default;
414
+ };
415
+
394
416
  // Implementation of aforementioned LoaderForType.
395
417
  // Simply keeps a static AutoLoader<T> and returns a pointer to that.
396
418
  template <typename T>
@@ -45,7 +45,7 @@ bool ExtractJsonBool(const Json& json, absl::string_view field_name,
45
45
  *output = false;
46
46
  return true;
47
47
  default:
48
- error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
48
+ error_list->push_back(GRPC_ERROR_CREATE(
49
49
  absl::StrCat("field:", field_name, " error:type should be BOOLEAN")));
50
50
  return false;
51
51
  }
@@ -56,7 +56,7 @@ bool ExtractJsonArray(const Json& json, absl::string_view field_name,
56
56
  std::vector<grpc_error_handle>* error_list) {
57
57
  if (json.type() != Json::Type::ARRAY) {
58
58
  *output = nullptr;
59
- error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
59
+ error_list->push_back(GRPC_ERROR_CREATE(
60
60
  absl::StrCat("field:", field_name, " error:type should be ARRAY")));
61
61
  return false;
62
62
  }
@@ -69,7 +69,7 @@ bool ExtractJsonObject(const Json& json, absl::string_view field_name,
69
69
  std::vector<grpc_error_handle>* error_list) {
70
70
  if (json.type() != Json::Type::OBJECT) {
71
71
  *output = nullptr;
72
- error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
72
+ error_list->push_back(GRPC_ERROR_CREATE(
73
73
  absl::StrCat("field:", field_name, " error:type should be OBJECT")));
74
74
  return false;
75
75
  }
@@ -87,14 +87,14 @@ bool ParseJsonObjectFieldAsDuration(const Json::Object& object,
87
87
  auto it = object.find(std::string(field_name));
88
88
  if (it == object.end()) {
89
89
  if (required) {
90
- error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
90
+ error_list->push_back(GRPC_ERROR_CREATE(
91
91
  absl::StrCat("field:", field_name, " error:does not exist.")));
92
92
  }
93
93
  return false;
94
94
  }
95
95
  if (!ParseDurationFromJson(it->second, output)) {
96
96
  *output = Duration::NegativeInfinity();
97
- error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
97
+ error_list->push_back(GRPC_ERROR_CREATE(
98
98
  absl::StrCat("field:", field_name,
99
99
  " error:type should be STRING of the form given by "
100
100
  "google.proto.Duration.")));
@@ -55,12 +55,12 @@ bool ExtractJsonNumber(const Json& json, absl::string_view field_name,
55
55
  std::vector<grpc_error_handle>* error_list) {
56
56
  static_assert(std::is_integral<NumericType>::value, "Integral required");
57
57
  if (json.type() != Json::Type::NUMBER && json.type() != Json::Type::STRING) {
58
- error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
58
+ error_list->push_back(GRPC_ERROR_CREATE(absl::StrCat(
59
59
  "field:", field_name, " error:type should be NUMBER or STRING")));
60
60
  return false;
61
61
  }
62
62
  if (!absl::SimpleAtoi(json.string_value(), output)) {
63
- error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
63
+ error_list->push_back(GRPC_ERROR_CREATE(
64
64
  absl::StrCat("field:", field_name, " error:failed to parse.")));
65
65
  return false;
66
66
  }
@@ -77,7 +77,7 @@ bool ExtractJsonString(const Json& json, absl::string_view field_name,
77
77
  std::vector<grpc_error_handle>* error_list) {
78
78
  if (json.type() != Json::Type::STRING) {
79
79
  *output = "";
80
- error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
80
+ error_list->push_back(GRPC_ERROR_CREATE(
81
81
  absl::StrCat("field:", field_name, " error:type should be STRING")));
82
82
  return false;
83
83
  }
@@ -142,7 +142,7 @@ bool ParseJsonObjectField(const Json::Object& object,
142
142
  auto it = object.find(std::string(field_name));
143
143
  if (it == object.end()) {
144
144
  if (required) {
145
- error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
145
+ error_list->push_back(GRPC_ERROR_CREATE(
146
146
  absl::StrCat("field:", field_name, " error:does not exist.")));
147
147
  }
148
148
  return false;
@@ -85,7 +85,7 @@ LoadBalancingPolicy::PickResult LoadBalancingPolicy::QueuePicker::Pick(
85
85
  DEBUG_LOCATION);
86
86
  },
87
87
  parent, nullptr),
88
- GRPC_ERROR_NONE);
88
+ absl::OkStatus());
89
89
  }
90
90
  return PickResult::Queue();
91
91
  }
@@ -33,6 +33,7 @@
33
33
  #include "absl/types/optional.h"
34
34
  #include "absl/types/variant.h"
35
35
 
36
+ #include <grpc/event_engine/event_engine.h>
36
37
  #include <grpc/impl/codegen/connectivity_state.h>
37
38
 
38
39
  #include "src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h"
@@ -291,6 +292,9 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
291
292
  /// Returns the channel authority.
292
293
  virtual absl::string_view GetAuthority() = 0;
293
294
 
295
+ /// Returns the EventEngine to use for timers and async work.
296
+ virtual grpc_event_engine::experimental::EventEngine* GetEventEngine() = 0;
297
+
294
298
  /// Adds a trace message associated with the channel.
295
299
  enum TraceSeverity { TRACE_INFO, TRACE_WARNING, TRACE_ERROR };
296
300
  virtual void AddTraceEvent(TraceSeverity severity,
@@ -26,7 +26,6 @@
26
26
 
27
27
  #include <grpc/impl/codegen/connectivity_state.h>
28
28
 
29
- #include "src/core/lib/channel/channel_args.h"
30
29
  #include "src/core/lib/gprpp/ref_counted.h"
31
30
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
32
31
  #include "src/core/lib/iomgr/iomgr_fwd.h"
@@ -96,9 +95,6 @@ class SubchannelInterface : public RefCounted<SubchannelInterface> {
96
95
  // Registers a new data watcher.
97
96
  virtual void AddDataWatcher(
98
97
  std::unique_ptr<DataWatcherInterface> watcher) = 0;
99
-
100
- // TODO(roth): Need a better non-grpc-specific abstraction here.
101
- virtual ChannelArgs channel_args() = 0;
102
98
  };
103
99
 
104
100
  // A class that delegates to another subchannel, to be used in cases
@@ -124,9 +120,6 @@ class DelegatingSubchannel : public SubchannelInterface {
124
120
  wrapped_subchannel_->RequestConnection();
125
121
  }
126
122
  void ResetBackoff() override { wrapped_subchannel_->ResetBackoff(); }
127
- ChannelArgs channel_args() override {
128
- return wrapped_subchannel_->channel_args();
129
- }
130
123
  void AddDataWatcher(std::unique_ptr<DataWatcherInterface> watcher) override {
131
124
  wrapped_subchannel_->AddDataWatcher(std::move(watcher));
132
125
  }