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
@@ -30,7 +30,6 @@
30
30
  #include <grpc/support/log.h>
31
31
 
32
32
  #include "src/core/lib/gpr/time_precise.h"
33
- #include "src/core/lib/gpr/tls.h"
34
33
  #include "src/core/lib/gprpp/debug_location.h"
35
34
  #include "src/core/lib/gprpp/fork.h"
36
35
  #include "src/core/lib/gprpp/time.h"
@@ -211,7 +210,7 @@ class ExecCtx {
211
210
  unsigned starting_cpu_ = std::numeric_limits<unsigned>::max();
212
211
 
213
212
  ScopedTimeCache time_cache_;
214
- static GPR_THREAD_LOCAL(ExecCtx*) exec_ctx_;
213
+ static thread_local ExecCtx* exec_ctx_;
215
214
  ExecCtx* last_exec_ctx_ = Get();
216
215
  };
217
216
 
@@ -326,7 +325,7 @@ class ApplicationCallbackExecCtx {
326
325
  uintptr_t flags_{0u};
327
326
  grpc_completion_queue_functor* head_{nullptr};
328
327
  grpc_completion_queue_functor* tail_{nullptr};
329
- static GPR_THREAD_LOCAL(ApplicationCallbackExecCtx*) callback_exec_ctx_;
328
+ static thread_local ApplicationCallbackExecCtx* callback_exec_ctx_;
330
329
  };
331
330
 
332
331
  } // namespace grpc_core
@@ -27,7 +27,6 @@
27
27
  #include <grpc/support/log.h>
28
28
  #include <grpc/support/sync.h>
29
29
 
30
- #include "src/core/lib/gpr/tls.h"
31
30
  #include "src/core/lib/gpr/useful.h"
32
31
  #include "src/core/lib/gprpp/memory.h"
33
32
  #include "src/core/lib/iomgr/exec_ctx.h"
@@ -52,7 +51,7 @@
52
51
  namespace grpc_core {
53
52
  namespace {
54
53
 
55
- GPR_THREAD_LOCAL(ThreadState*) g_this_thread_state;
54
+ thread_local ThreadState* g_this_thread_state;
56
55
 
57
56
  Executor* executors[static_cast<size_t>(ExecutorType::NUM_EXECUTORS)];
58
57
 
@@ -27,6 +27,8 @@
27
27
  #include <string.h>
28
28
  #include <sys/utsname.h>
29
29
 
30
+ #include "src/core/lib/gprpp/strerror.h"
31
+
30
32
  namespace grpc_core {
31
33
 
32
34
  bool KernelSupportsErrqueue() {
@@ -36,7 +38,7 @@ bool KernelSupportsErrqueue() {
36
38
  // least 4.0.0
37
39
  struct utsname buffer;
38
40
  if (uname(&buffer) != 0) {
39
- gpr_log(GPR_ERROR, "uname: %s", strerror(errno));
41
+ gpr_log(GPR_ERROR, "uname: %s", StrError(errno).c_str());
40
42
  return false;
41
43
  }
42
44
  char* release = buffer.release;
@@ -31,6 +31,7 @@
31
31
  #include <grpc/support/log_windows.h>
32
32
 
33
33
  #include "src/core/lib/debug/stats.h"
34
+ #include "src/core/lib/debug/stats_data.h"
34
35
  #include "src/core/lib/gprpp/thd.h"
35
36
  #include "src/core/lib/iomgr/iocp_windows.h"
36
37
  #include "src/core/lib/iomgr/iomgr_internal.h"
@@ -22,7 +22,6 @@
22
22
 
23
23
  #ifdef GRPC_POSIX_SOCKET_IOMGR
24
24
 
25
- #include "src/core/lib/debug/trace.h"
26
25
  #include "src/core/lib/iomgr/ev_posix.h"
27
26
  #include "src/core/lib/iomgr/iomgr_internal.h"
28
27
  #include "src/core/lib/iomgr/resolve_address.h"
@@ -39,6 +38,7 @@ extern grpc_pollset_vtable grpc_posix_pollset_vtable;
39
38
  extern grpc_pollset_set_vtable grpc_posix_pollset_set_vtable;
40
39
 
41
40
  static void iomgr_platform_init(void) {
41
+ grpc_core::ResetDNSResolver(std::make_unique<grpc_core::NativeDNSResolver>());
42
42
  grpc_wakeup_fd_global_init();
43
43
  grpc_event_engine_init();
44
44
  grpc_tcp_posix_init();
@@ -50,6 +50,7 @@ static void iomgr_platform_shutdown(void) {
50
50
  grpc_tcp_posix_shutdown();
51
51
  grpc_event_engine_shutdown();
52
52
  grpc_wakeup_fd_global_destroy();
53
+ grpc_core::ResetDNSResolver(nullptr); // delete the resolver
53
54
  }
54
55
 
55
56
  static void iomgr_platform_shutdown_background_closure(void) {
@@ -79,7 +80,6 @@ void grpc_set_default_iomgr_platform() {
79
80
  grpc_set_timer_impl(&grpc_generic_timer_vtable);
80
81
  grpc_set_pollset_vtable(&grpc_posix_pollset_vtable);
81
82
  grpc_set_pollset_set_vtable(&grpc_posix_pollset_set_vtable);
82
- grpc_core::SetDNSResolver(grpc_core::NativeDNSResolver::GetOrCreate());
83
83
  grpc_tcp_client_global_init();
84
84
  grpc_set_iomgr_platform_vtable(&vtable);
85
85
  }
@@ -63,6 +63,7 @@ static void apple_iomgr_platform_flush(void) {}
63
63
 
64
64
  static void apple_iomgr_platform_shutdown(void) {
65
65
  grpc_pollset_global_shutdown();
66
+ grpc_core::ResetDNSResolver(nullptr); // delete the resolver
66
67
  }
67
68
 
68
69
  static void apple_iomgr_platform_shutdown_background_closure(void) {}
@@ -179,7 +180,7 @@ void grpc_set_default_iomgr_platform() {
179
180
  }
180
181
  grpc_tcp_client_global_init();
181
182
  grpc_set_timer_impl(&grpc_generic_timer_vtable);
182
- grpc_core::SetDNSResolver(grpc_core::NativeDNSResolver::GetOrCreate());
183
+ grpc_core::ResetDNSResolver(std::make_unique<grpc_core::NativeDNSResolver>());
183
184
  }
184
185
 
185
186
  bool grpc_iomgr_run_in_background() {
@@ -61,6 +61,7 @@ static void iomgr_platform_init(void) {
61
61
  grpc_iocp_init();
62
62
  grpc_pollset_global_init();
63
63
  grpc_wsa_socket_flags_init();
64
+ grpc_core::ResetDNSResolver(std::make_unique<grpc_core::NativeDNSResolver>());
64
65
  }
65
66
 
66
67
  static void iomgr_platform_flush(void) { grpc_iocp_flush(); }
@@ -69,6 +70,7 @@ static void iomgr_platform_shutdown(void) {
69
70
  grpc_pollset_global_shutdown();
70
71
  grpc_iocp_shutdown();
71
72
  winsock_shutdown();
73
+ grpc_core::ResetDNSResolver(nullptr); // delete the resolver
72
74
  }
73
75
 
74
76
  static void iomgr_platform_shutdown_background_closure(void) {}
@@ -96,7 +98,6 @@ void grpc_set_default_iomgr_platform() {
96
98
  grpc_set_timer_impl(&grpc_generic_timer_vtable);
97
99
  grpc_set_pollset_vtable(&grpc_windows_pollset_vtable);
98
100
  grpc_set_pollset_set_vtable(&grpc_windows_pollset_set_vtable);
99
- grpc_core::SetDNSResolver(grpc_core::NativeDNSResolver::GetOrCreate());
100
101
  grpc_set_iomgr_platform_vtable(&vtable);
101
102
  }
102
103
 
@@ -37,7 +37,7 @@ grpc_error_handle grpc_load_file(const char* filename, int add_null_terminator,
37
37
  grpc_slice result = grpc_empty_slice();
38
38
  FILE* file;
39
39
  size_t bytes_read = 0;
40
- grpc_error_handle error = GRPC_ERROR_NONE;
40
+ grpc_error_handle error;
41
41
 
42
42
  GRPC_SCHEDULING_START_BLOCKING_REGION;
43
43
  file = fopen(filename, "rb");
@@ -66,14 +66,10 @@ grpc_error_handle grpc_load_file(const char* filename, int add_null_terminator,
66
66
  end:
67
67
  *output = result;
68
68
  if (file != nullptr) fclose(file);
69
- if (!GRPC_ERROR_IS_NONE(error)) {
70
- grpc_error_handle error_out =
71
- grpc_error_set_str(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
72
- "Failed to load file", &error, 1),
73
- GRPC_ERROR_STR_FILENAME,
74
-
75
- filename);
76
- GRPC_ERROR_UNREF(error);
69
+ if (!error.ok()) {
70
+ grpc_error_handle error_out = grpc_error_set_str(
71
+ GRPC_ERROR_CREATE_REFERENCING("Failed to load file", &error, 1),
72
+ grpc_core::StatusStrProperty::kFilename, filename);
77
73
  error = error_out;
78
74
  }
79
75
  GRPC_SCHEDULING_END_BLOCKING_REGION_NO_EXEC_CTX;
@@ -127,7 +127,7 @@ void LockfreeEvent::NotifyOn(grpc_closure* closure) {
127
127
  closure when transitioning out of CLOSURE_NO_READY state (i.e there
128
128
  is no other code that needs to 'happen-after' this) */
129
129
  if (gpr_atm_no_barrier_cas(&state_, kClosureReady, kClosureNotReady)) {
130
- ExecCtx::Run(DEBUG_LOCATION, closure, GRPC_ERROR_NONE);
130
+ ExecCtx::Run(DEBUG_LOCATION, closure, absl::OkStatus());
131
131
  return; /* Successful. Return */
132
132
  }
133
133
 
@@ -141,9 +141,9 @@ void LockfreeEvent::NotifyOn(grpc_closure* closure) {
141
141
  if ((curr & kShutdownBit) > 0) {
142
142
  grpc_error_handle shutdown_err =
143
143
  internal::StatusGetFromHeapPtr(curr & ~kShutdownBit);
144
- ExecCtx::Run(DEBUG_LOCATION, closure,
145
- GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
146
- "FD Shutdown", &shutdown_err, 1));
144
+ ExecCtx::Run(
145
+ DEBUG_LOCATION, closure,
146
+ GRPC_ERROR_CREATE_REFERENCING("FD Shutdown", &shutdown_err, 1));
147
147
  return;
148
148
  }
149
149
 
@@ -156,7 +156,7 @@ void LockfreeEvent::NotifyOn(grpc_closure* closure) {
156
156
  }
157
157
  }
158
158
 
159
- GPR_UNREACHABLE_CODE(return );
159
+ GPR_UNREACHABLE_CODE(return);
160
160
  }
161
161
 
162
162
  bool LockfreeEvent::SetShutdown(grpc_error_handle shutdown_error) {
@@ -168,7 +168,7 @@ bool LockfreeEvent::SetShutdown(grpc_error_handle shutdown_error) {
168
168
  if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_trace)) {
169
169
  gpr_log(GPR_DEBUG,
170
170
  "LockfreeEvent::SetShutdown: %p curr=%" PRIxPTR " err=%s",
171
- &state_, curr, grpc_error_std_string(shutdown_error).c_str());
171
+ &state_, curr, StatusToString(shutdown_error).c_str());
172
172
  }
173
173
  switch (curr) {
174
174
  case kClosureReady:
@@ -195,9 +195,9 @@ bool LockfreeEvent::SetShutdown(grpc_error_handle shutdown_error) {
195
195
  happens-after on that edge), and a release to pair with anything
196
196
  loading the shutdown state. */
197
197
  if (gpr_atm_full_cas(&state_, curr, new_state)) {
198
- ExecCtx::Run(DEBUG_LOCATION, reinterpret_cast<grpc_closure*>(curr),
199
- GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
200
- "FD Shutdown", &shutdown_error, 1));
198
+ ExecCtx::Run(
199
+ DEBUG_LOCATION, reinterpret_cast<grpc_closure*>(curr),
200
+ GRPC_ERROR_CREATE_REFERENCING("FD Shutdown", &shutdown_error, 1));
201
201
  return true;
202
202
  }
203
203
 
@@ -246,7 +246,7 @@ void LockfreeEvent::SetReady() {
246
246
  notify_on (or set_shutdown) */
247
247
  else if (gpr_atm_full_cas(&state_, curr, kClosureNotReady)) {
248
248
  ExecCtx::Run(DEBUG_LOCATION, reinterpret_cast<grpc_closure*>(curr),
249
- GRPC_ERROR_NONE);
249
+ absl::OkStatus());
250
250
  return;
251
251
  }
252
252
  /* else the state changed again (only possible by either a racing
@@ -98,7 +98,7 @@ static void pollset_shutdown(grpc_pollset* pollset, grpc_closure* closure) {
98
98
  pollset->shutting_down = 1;
99
99
  grpc_pollset_kick(pollset, GRPC_POLLSET_KICK_BROADCAST);
100
100
  if (!pollset->is_iocp_worker) {
101
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, GRPC_ERROR_NONE);
101
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, absl::OkStatus());
102
102
  } else {
103
103
  pollset->on_shutdown = closure;
104
104
  }
@@ -147,7 +147,7 @@ static grpc_error_handle pollset_work(grpc_pollset* pollset,
147
147
 
148
148
  if (pollset->shutting_down && pollset->on_shutdown != NULL) {
149
149
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, pollset->on_shutdown,
150
- GRPC_ERROR_NONE);
150
+ absl::OkStatus());
151
151
  pollset->on_shutdown = NULL;
152
152
  }
153
153
  goto done;
@@ -180,7 +180,7 @@ done:
180
180
  }
181
181
  gpr_cv_destroy(&worker.cv);
182
182
  if (worker_hdl) *worker_hdl = NULL;
183
- return GRPC_ERROR_NONE;
183
+ return absl::OkStatus();
184
184
  }
185
185
 
186
186
  static grpc_error_handle pollset_kick(grpc_pollset* p,
@@ -231,7 +231,7 @@ static grpc_error_handle pollset_kick(grpc_pollset* p,
231
231
  gpr_cv_signal(&next_global_worker->cv);
232
232
  }
233
233
  }
234
- return GRPC_ERROR_NONE;
234
+ return absl::OkStatus();
235
235
  }
236
236
 
237
237
  grpc_pollset_vtable grpc_windows_pollset_vtable = {
@@ -31,8 +31,8 @@
31
31
  // because Cython doesn't handle #defines well.
32
32
 
33
33
  inline grpc_error_handle grpc_socket_error(char* error) {
34
- return grpc_error_set_int(GRPC_ERROR_CREATE_FROM_COPIED_STRING(error),
35
- GRPC_ERROR_INT_GRPC_STATUS,
34
+ return grpc_error_set_int(GRPC_ERROR_CREATE(error),
35
+ grpc_core::StatusIntProperty::kRpcStatus,
36
36
  GRPC_STATUS_UNAVAILABLE);
37
37
  }
38
38
 
@@ -23,19 +23,24 @@
23
23
 
24
24
  #include <grpc/event_engine/event_engine.h>
25
25
  #include <grpc/support/alloc.h>
26
+ #include <grpc/support/log.h>
27
+
28
+ #include "src/core/lib/gprpp/no_destruct.h"
26
29
 
27
30
  namespace grpc_core {
28
31
  const char* kDefaultSecurePort = "https";
29
32
 
30
33
  namespace {
31
- DNSResolver* g_dns_resolver;
34
+ NoDestruct<std::shared_ptr<DNSResolver>> g_dns_resolver;
32
35
  }
33
36
 
34
37
  constexpr DNSResolver::TaskHandle DNSResolver::kNullHandle;
35
38
 
36
- void SetDNSResolver(DNSResolver* resolver) { g_dns_resolver = resolver; }
39
+ void ResetDNSResolver(std::shared_ptr<DNSResolver> resolver) {
40
+ *g_dns_resolver = std::move(resolver);
41
+ }
37
42
 
38
- DNSResolver* GetDNSResolver() { return g_dns_resolver; }
43
+ std::shared_ptr<DNSResolver> GetDNSResolver() { return *g_dns_resolver; }
39
44
 
40
45
  std::string DNSResolver::HandleToString(TaskHandle handle) {
41
46
  return absl::StrCat("{", handle.keys[0], ",", handle.keys[1], "}");
@@ -104,13 +104,12 @@ class DNSResolver {
104
104
  };
105
105
 
106
106
  // Override the active DNS resolver which should be used for all DNS
107
- // resolution in gRPC. Note this should only be used during library
108
- // initialization or within tests.
109
- void SetDNSResolver(DNSResolver* resolver);
107
+ // resolution in gRPC.
108
+ void ResetDNSResolver(std::shared_ptr<DNSResolver> resolver);
110
109
 
111
110
  // Get the singleton DNS resolver instance which should be used for all
112
111
  // DNS resolution in gRPC.
113
- DNSResolver* GetDNSResolver();
112
+ std::shared_ptr<DNSResolver> GetDNSResolver();
114
113
 
115
114
  } // namespace grpc_core
116
115
 
@@ -37,7 +37,7 @@ class DNSCallbackExecCtxScheduler {
37
37
  absl::StatusOr<std::vector<grpc_resolved_address>> param)
38
38
  : on_done_(std::move(on_done)), param_(std::move(param)) {
39
39
  GRPC_CLOSURE_INIT(&closure_, RunCallback, this, grpc_schedule_on_exec_ctx);
40
- ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
40
+ ExecCtx::Run(DEBUG_LOCATION, &closure_, absl::OkStatus());
41
41
  }
42
42
 
43
43
  private:
@@ -47,8 +47,6 @@
47
47
  namespace grpc_core {
48
48
  namespace {
49
49
 
50
- using ::grpc_event_engine::experimental::GetDefaultEventEngine;
51
-
52
50
  class NativeDNSRequest {
53
51
  public:
54
52
  NativeDNSRequest(
@@ -57,7 +55,7 @@ class NativeDNSRequest {
57
55
  on_done)
58
56
  : name_(name), default_port_(default_port), on_done_(std::move(on_done)) {
59
57
  GRPC_CLOSURE_INIT(&request_closure_, DoRequestThread, this, nullptr);
60
- Executor::Run(&request_closure_, GRPC_ERROR_NONE, ExecutorType::RESOLVER);
58
+ Executor::Run(&request_closure_, absl::OkStatus(), ExecutorType::RESOLVER);
61
59
  }
62
60
 
63
61
  private:
@@ -81,11 +79,6 @@ class NativeDNSRequest {
81
79
 
82
80
  } // namespace
83
81
 
84
- NativeDNSResolver* NativeDNSResolver::GetOrCreate() {
85
- static NativeDNSResolver* instance = new NativeDNSResolver();
86
- return instance;
87
- }
88
-
89
82
  DNSResolver::TaskHandle NativeDNSResolver::LookupHostname(
90
83
  std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
91
84
  on_done,
@@ -112,16 +105,14 @@ NativeDNSResolver::LookupHostnameBlocking(absl::string_view name,
112
105
  // parse name, splitting it into host and port parts
113
106
  SplitHostPort(name, &host, &port);
114
107
  if (host.empty()) {
115
- err = grpc_error_set_str(
116
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("unparseable host:port"),
117
- GRPC_ERROR_STR_TARGET_ADDRESS, name);
108
+ err = grpc_error_set_str(GRPC_ERROR_CREATE("unparseable host:port"),
109
+ StatusStrProperty::kTargetAddress, name);
118
110
  goto done;
119
111
  }
120
112
  if (port.empty()) {
121
113
  if (default_port.empty()) {
122
- err = grpc_error_set_str(
123
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("no port in name"),
124
- GRPC_ERROR_STR_TARGET_ADDRESS, name);
114
+ err = grpc_error_set_str(GRPC_ERROR_CREATE("no port in name"),
115
+ StatusStrProperty::kTargetAddress, name);
125
116
  goto done;
126
117
  }
127
118
  port = std::string(default_port);
@@ -150,12 +141,11 @@ NativeDNSResolver::LookupHostnameBlocking(absl::string_view name,
150
141
  err = grpc_error_set_str(
151
142
  grpc_error_set_str(
152
143
  grpc_error_set_str(
153
- grpc_error_set_int(
154
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(gai_strerror(s)),
155
- GRPC_ERROR_INT_ERRNO, s),
156
- GRPC_ERROR_STR_OS_ERROR, gai_strerror(s)),
157
- GRPC_ERROR_STR_SYSCALL, "getaddrinfo"),
158
- GRPC_ERROR_STR_TARGET_ADDRESS, name);
144
+ grpc_error_set_int(GRPC_ERROR_CREATE(gai_strerror(s)),
145
+ StatusIntProperty::kErrorNo, s),
146
+ StatusStrProperty::kOsError, gai_strerror(s)),
147
+ StatusStrProperty::kSyscall, "getaddrinfo"),
148
+ StatusStrProperty::kTargetAddress, name);
159
149
  goto done;
160
150
  }
161
151
  // Success path: fill in addrs
@@ -165,16 +155,15 @@ NativeDNSResolver::LookupHostnameBlocking(absl::string_view name,
165
155
  addr.len = resp->ai_addrlen;
166
156
  addresses.push_back(addr);
167
157
  }
168
- err = GRPC_ERROR_NONE;
158
+ err = absl::OkStatus();
169
159
  done:
170
160
  if (result) {
171
161
  freeaddrinfo(result);
172
162
  }
173
- if (GRPC_ERROR_IS_NONE(err)) {
163
+ if (err.ok()) {
174
164
  return addresses;
175
165
  }
176
166
  auto error_result = grpc_error_to_absl_status(err);
177
- GRPC_ERROR_UNREF(err);
178
167
  return error_result;
179
168
  }
180
169
 
@@ -184,7 +173,7 @@ DNSResolver::TaskHandle NativeDNSResolver::LookupSRV(
184
173
  absl::string_view /* name */, Duration /* timeout */,
185
174
  grpc_pollset_set* /* interested_parties */,
186
175
  absl::string_view /* name_server */) {
187
- GetDefaultEventEngine()->Run([on_resolved] {
176
+ grpc_event_engine::experimental::GetDefaultEventEngine()->Run([on_resolved] {
188
177
  ApplicationCallbackExecCtx app_exec_ctx;
189
178
  ExecCtx exec_ctx;
190
179
  on_resolved(absl::UnimplementedError(
@@ -199,7 +188,7 @@ DNSResolver::TaskHandle NativeDNSResolver::LookupTXT(
199
188
  grpc_pollset_set* /* interested_parties */,
200
189
  absl::string_view /* name_server */) {
201
190
  // Not supported
202
- GetDefaultEventEngine()->Run([on_resolved] {
191
+ grpc_event_engine::experimental::GetDefaultEventEngine()->Run([on_resolved] {
203
192
  ApplicationCallbackExecCtx app_exec_ctx;
204
193
  ExecCtx exec_ctx;
205
194
  on_resolved(absl::UnimplementedError(
@@ -29,8 +29,7 @@ namespace grpc_core {
29
29
  // A DNS resolver which uses the native platform's getaddrinfo API.
30
30
  class NativeDNSResolver : public DNSResolver {
31
31
  public:
32
- // Gets the singleton instance, creating it first if it doesn't exist
33
- static NativeDNSResolver* GetOrCreate();
32
+ NativeDNSResolver() = default;
34
33
 
35
34
  TaskHandle LookupHostname(
36
35
  std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
@@ -50,8 +50,6 @@
50
50
  namespace grpc_core {
51
51
  namespace {
52
52
 
53
- using ::grpc_event_engine::experimental::GetDefaultEventEngine;
54
-
55
53
  class NativeDNSRequest {
56
54
  public:
57
55
  NativeDNSRequest(
@@ -60,7 +58,7 @@ class NativeDNSRequest {
60
58
  on_done)
61
59
  : name_(name), default_port_(default_port), on_done_(std::move(on_done)) {
62
60
  GRPC_CLOSURE_INIT(&request_closure_, DoRequestThread, this, nullptr);
63
- Executor::Run(&request_closure_, GRPC_ERROR_NONE, ExecutorType::RESOLVER);
61
+ Executor::Run(&request_closure_, absl::OkStatus(), ExecutorType::RESOLVER);
64
62
  }
65
63
 
66
64
  private:
@@ -84,10 +82,7 @@ class NativeDNSRequest {
84
82
 
85
83
  } // namespace
86
84
 
87
- NativeDNSResolver* NativeDNSResolver::GetOrCreate() {
88
- static NativeDNSResolver* instance = new NativeDNSResolver();
89
- return instance;
90
- }
85
+ NativeDNSResolver::NativeDNSResolver() {}
91
86
 
92
87
  DNSResolver::TaskHandle NativeDNSResolver::LookupHostname(
93
88
  std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
@@ -106,8 +101,7 @@ NativeDNSResolver::LookupHostnameBlocking(absl::string_view name,
106
101
  struct addrinfo hints;
107
102
  struct addrinfo *result = NULL, *resp;
108
103
  int s;
109
- size_t i;
110
- grpc_error_handle error = GRPC_ERROR_NONE;
104
+ grpc_error_handle error;
111
105
  std::vector<grpc_resolved_address> addresses;
112
106
 
113
107
  // parse name, splitting it into host and port parts
@@ -115,14 +109,13 @@ NativeDNSResolver::LookupHostnameBlocking(absl::string_view name,
115
109
  std::string port;
116
110
  SplitHostPort(name, &host, &port);
117
111
  if (host.empty()) {
118
- error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
119
- absl::StrFormat("unparseable host:port: '%s'", name));
112
+ error =
113
+ GRPC_ERROR_CREATE(absl::StrFormat("unparseable host:port: '%s'", name));
120
114
  goto done;
121
115
  }
122
116
  if (port.empty()) {
123
117
  if (default_port.empty()) {
124
- error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
125
- absl::StrFormat("no port in name '%s'", name));
118
+ error = GRPC_ERROR_CREATE(absl::StrFormat("no port in name '%s'", name));
126
119
  goto done;
127
120
  }
128
121
  port = std::string(default_port);
@@ -154,21 +147,25 @@ done:
154
147
  if (result) {
155
148
  freeaddrinfo(result);
156
149
  }
157
- if (GRPC_ERROR_IS_NONE(error)) {
150
+ if (error.ok()) {
158
151
  return addresses;
159
152
  }
160
153
  auto error_result = grpc_error_to_absl_status(error);
161
- GRPC_ERROR_UNREF(error);
162
154
  return error_result;
163
155
  }
164
156
 
157
+ void RunCallbackOnDefaultEventEngine(absl::AnyInvocable<void()> f) {
158
+ auto engine = grpc_event_engine::experimental::GetDefaultEventEngine();
159
+ engine->Run([f = std::move(f), engine]() mutable { f(); });
160
+ }
161
+
165
162
  DNSResolver::TaskHandle NativeDNSResolver::LookupSRV(
166
163
  std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
167
164
  on_resolved,
168
165
  absl::string_view /* name */, Duration /* deadline */,
169
166
  grpc_pollset_set* /* interested_parties */,
170
167
  absl::string_view /* name_server */) {
171
- GetDefaultEventEngine()->Run([on_resolved] {
168
+ RunCallbackOnDefaultEventEngine([on_resolved] {
172
169
  ApplicationCallbackExecCtx app_exec_ctx;
173
170
  ExecCtx exec_ctx;
174
171
  on_resolved(absl::UnimplementedError(
@@ -183,7 +180,7 @@ DNSResolver::TaskHandle NativeDNSResolver::LookupTXT(
183
180
  grpc_pollset_set* /* interested_parties */,
184
181
  absl::string_view /* name_server */) {
185
182
  // Not supported
186
- GetDefaultEventEngine()->Run([on_resolved] {
183
+ RunCallbackOnDefaultEventEngine([on_resolved] {
187
184
  ApplicationCallbackExecCtx app_exec_ctx;
188
185
  ExecCtx exec_ctx;
189
186
  on_resolved(absl::UnimplementedError(
@@ -29,8 +29,7 @@ namespace grpc_core {
29
29
  // A DNS resolver which uses the native platform's getaddrinfo API.
30
30
  class NativeDNSResolver : public DNSResolver {
31
31
  public:
32
- // Gets the singleton instance, creating it first if it doesn't exist
33
- static NativeDNSResolver* GetOrCreate();
32
+ NativeDNSResolver();
34
33
 
35
34
  TaskHandle LookupHostname(
36
35
  std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>