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
@@ -43,6 +43,7 @@
43
43
  #include <grpc/support/log.h>
44
44
  #include <grpc/support/string_util.h>
45
45
 
46
+ #include "src/core/lib/gprpp/status_helper.h"
46
47
  #include "src/core/lib/http/httpcli_ssl_credentials.h"
47
48
  #include "src/core/lib/http/parser.h"
48
49
  #include "src/core/lib/security/credentials/credentials.h"
@@ -104,51 +105,45 @@ bool MatchWorkforcePoolAudience(absl::string_view audience) {
104
105
  RefCountedPtr<ExternalAccountCredentials> ExternalAccountCredentials::Create(
105
106
  const Json& json, std::vector<std::string> scopes,
106
107
  grpc_error_handle* error) {
107
- GPR_ASSERT(GRPC_ERROR_IS_NONE(*error));
108
+ GPR_ASSERT(error->ok());
108
109
  Options options;
109
110
  options.type = GRPC_AUTH_JSON_TYPE_INVALID;
110
111
  if (json.type() != Json::Type::OBJECT) {
111
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
112
- "Invalid json to construct credentials options.");
112
+ *error =
113
+ GRPC_ERROR_CREATE("Invalid json to construct credentials options.");
113
114
  return nullptr;
114
115
  }
115
116
  auto it = json.object_value().find("type");
116
117
  if (it == json.object_value().end()) {
117
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("type field not present.");
118
+ *error = GRPC_ERROR_CREATE("type field not present.");
118
119
  return nullptr;
119
120
  }
120
121
  if (it->second.type() != Json::Type::STRING) {
121
- *error =
122
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("type field must be a string.");
122
+ *error = GRPC_ERROR_CREATE("type field must be a string.");
123
123
  return nullptr;
124
124
  }
125
125
  if (it->second.string_value() != GRPC_AUTH_JSON_TYPE_EXTERNAL_ACCOUNT) {
126
- *error =
127
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid credentials json type.");
126
+ *error = GRPC_ERROR_CREATE("Invalid credentials json type.");
128
127
  return nullptr;
129
128
  }
130
129
  options.type = GRPC_AUTH_JSON_TYPE_EXTERNAL_ACCOUNT;
131
130
  it = json.object_value().find("audience");
132
131
  if (it == json.object_value().end()) {
133
- *error =
134
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("audience field not present.");
132
+ *error = GRPC_ERROR_CREATE("audience field not present.");
135
133
  return nullptr;
136
134
  }
137
135
  if (it->second.type() != Json::Type::STRING) {
138
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
139
- "audience field must be a string.");
136
+ *error = GRPC_ERROR_CREATE("audience field must be a string.");
140
137
  return nullptr;
141
138
  }
142
139
  options.audience = it->second.string_value();
143
140
  it = json.object_value().find("subject_token_type");
144
141
  if (it == json.object_value().end()) {
145
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
146
- "subject_token_type field not present.");
142
+ *error = GRPC_ERROR_CREATE("subject_token_type field not present.");
147
143
  return nullptr;
148
144
  }
149
145
  if (it->second.type() != Json::Type::STRING) {
150
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
151
- "subject_token_type field must be a string.");
146
+ *error = GRPC_ERROR_CREATE("subject_token_type field must be a string.");
152
147
  return nullptr;
153
148
  }
154
149
  options.subject_token_type = it->second.string_value();
@@ -158,13 +153,11 @@ RefCountedPtr<ExternalAccountCredentials> ExternalAccountCredentials::Create(
158
153
  }
159
154
  it = json.object_value().find("token_url");
160
155
  if (it == json.object_value().end()) {
161
- *error =
162
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("token_url field not present.");
156
+ *error = GRPC_ERROR_CREATE("token_url field not present.");
163
157
  return nullptr;
164
158
  }
165
159
  if (it->second.type() != Json::Type::STRING) {
166
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
167
- "token_url field must be a string.");
160
+ *error = GRPC_ERROR_CREATE("token_url field must be a string.");
168
161
  return nullptr;
169
162
  }
170
163
  options.token_url = it->second.string_value();
@@ -174,8 +167,7 @@ RefCountedPtr<ExternalAccountCredentials> ExternalAccountCredentials::Create(
174
167
  }
175
168
  it = json.object_value().find("credential_source");
176
169
  if (it == json.object_value().end()) {
177
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
178
- "credential_source field not present.");
170
+ *error = GRPC_ERROR_CREATE("credential_source field not present.");
179
171
  return nullptr;
180
172
  }
181
173
  options.credential_source = it->second;
@@ -196,7 +188,7 @@ RefCountedPtr<ExternalAccountCredentials> ExternalAccountCredentials::Create(
196
188
  if (MatchWorkforcePoolAudience(options.audience)) {
197
189
  options.workforce_pool_user_project = it->second.string_value();
198
190
  } else {
199
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
191
+ *error = GRPC_ERROR_CREATE(
200
192
  "workforce_pool_user_project should not be set for non-workforce "
201
193
  "pool credentials");
202
194
  return nullptr;
@@ -216,11 +208,11 @@ RefCountedPtr<ExternalAccountCredentials> ExternalAccountCredentials::Create(
216
208
  creds = MakeRefCounted<UrlExternalAccountCredentials>(
217
209
  std::move(options), std::move(scopes), error);
218
210
  } else {
219
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
211
+ *error = GRPC_ERROR_CREATE(
220
212
  "Invalid options credential source to create "
221
213
  "ExternalAccountCredentials.");
222
214
  }
223
- if (GRPC_ERROR_IS_NONE(*error)) {
215
+ if (error->ok()) {
224
216
  return creds;
225
217
  } else {
226
218
  return nullptr;
@@ -272,7 +264,7 @@ void ExternalAccountCredentials::fetch_oauth2(
272
264
 
273
265
  void ExternalAccountCredentials::OnRetrieveSubjectTokenInternal(
274
266
  absl::string_view subject_token, grpc_error_handle error) {
275
- if (!GRPC_ERROR_IS_NONE(error)) {
267
+ if (!error.ok()) {
276
268
  FinishTokenFetch(error);
277
269
  } else {
278
270
  ExchangeToken(subject_token);
@@ -283,7 +275,7 @@ void ExternalAccountCredentials::ExchangeToken(
283
275
  absl::string_view subject_token) {
284
276
  absl::StatusOr<URI> uri = URI::Parse(options_.token_url);
285
277
  if (!uri.ok()) {
286
- FinishTokenFetch(GRPC_ERROR_CREATE_FROM_CPP_STRING(
278
+ FinishTokenFetch(GRPC_ERROR_CREATE(
287
279
  absl::StrFormat("Invalid token url: %s. Error: %s", options_.token_url,
288
280
  uri.status().ToString())));
289
281
  return;
@@ -366,13 +358,13 @@ void ExternalAccountCredentials::OnExchangeToken(void* arg,
366
358
  grpc_error_handle error) {
367
359
  ExternalAccountCredentials* self =
368
360
  static_cast<ExternalAccountCredentials*>(arg);
369
- self->OnExchangeTokenInternal(GRPC_ERROR_REF(error));
361
+ self->OnExchangeTokenInternal(error);
370
362
  }
371
363
 
372
364
  void ExternalAccountCredentials::OnExchangeTokenInternal(
373
365
  grpc_error_handle error) {
374
366
  http_request_.reset();
375
- if (!GRPC_ERROR_IS_NONE(error)) {
367
+ if (!error.ok()) {
376
368
  FinishTokenFetch(error);
377
369
  } else {
378
370
  if (options_.service_account_impersonation_url.empty()) {
@@ -387,7 +379,7 @@ void ExternalAccountCredentials::OnExchangeTokenInternal(
387
379
  metadata_req_->response.hdrs[i].value =
388
380
  gpr_strdup(ctx_->response.hdrs[i].value);
389
381
  }
390
- FinishTokenFetch(GRPC_ERROR_NONE);
382
+ FinishTokenFetch(absl::OkStatus());
391
383
  } else {
392
384
  ImpersenateServiceAccount();
393
385
  }
@@ -399,19 +391,19 @@ void ExternalAccountCredentials::ImpersenateServiceAccount() {
399
391
  ctx_->response.body_length);
400
392
  auto json = Json::Parse(response_body);
401
393
  if (!json.ok()) {
402
- FinishTokenFetch(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
394
+ FinishTokenFetch(GRPC_ERROR_CREATE(absl::StrCat(
403
395
  "Invalid token exchange response: ", json.status().ToString())));
404
396
  return;
405
397
  }
406
398
  if (json->type() != Json::Type::OBJECT) {
407
- FinishTokenFetch(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
399
+ FinishTokenFetch(GRPC_ERROR_CREATE(
408
400
  "Invalid token exchange response: JSON type is not object"));
409
401
  return;
410
402
  }
411
403
  auto it = json->object_value().find("access_token");
412
404
  if (it == json->object_value().end() ||
413
405
  it->second.type() != Json::Type::STRING) {
414
- FinishTokenFetch(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
406
+ FinishTokenFetch(GRPC_ERROR_CREATE(absl::StrFormat(
415
407
  "Missing or invalid access_token in %s.", response_body)));
416
408
  return;
417
409
  }
@@ -419,7 +411,7 @@ void ExternalAccountCredentials::ImpersenateServiceAccount() {
419
411
  absl::StatusOr<URI> uri =
420
412
  URI::Parse(options_.service_account_impersonation_url);
421
413
  if (!uri.ok()) {
422
- FinishTokenFetch(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
414
+ FinishTokenFetch(GRPC_ERROR_CREATE(absl::StrFormat(
423
415
  "Invalid service account impersonation url: %s. Error: %s",
424
416
  options_.service_account_impersonation_url, uri.status().ToString())));
425
417
  return;
@@ -463,13 +455,13 @@ void ExternalAccountCredentials::OnImpersenateServiceAccount(
463
455
  void* arg, grpc_error_handle error) {
464
456
  ExternalAccountCredentials* self =
465
457
  static_cast<ExternalAccountCredentials*>(arg);
466
- self->OnImpersenateServiceAccountInternal(GRPC_ERROR_REF(error));
458
+ self->OnImpersenateServiceAccountInternal(error);
467
459
  }
468
460
 
469
461
  void ExternalAccountCredentials::OnImpersenateServiceAccountInternal(
470
462
  grpc_error_handle error) {
471
463
  http_request_.reset();
472
- if (!GRPC_ERROR_IS_NONE(error)) {
464
+ if (!error.ok()) {
473
465
  FinishTokenFetch(error);
474
466
  return;
475
467
  }
@@ -477,21 +469,21 @@ void ExternalAccountCredentials::OnImpersenateServiceAccountInternal(
477
469
  ctx_->response.body_length);
478
470
  auto json = Json::Parse(response_body);
479
471
  if (!json.ok()) {
480
- FinishTokenFetch(GRPC_ERROR_CREATE_FROM_CPP_STRING(
472
+ FinishTokenFetch(GRPC_ERROR_CREATE(
481
473
  absl::StrCat("Invalid service account impersonation response: ",
482
474
  json.status().ToString())));
483
475
  return;
484
476
  }
485
477
  if (json->type() != Json::Type::OBJECT) {
486
- FinishTokenFetch(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
487
- "Invalid service account impersonation response: "
488
- "JSON type is not object"));
478
+ FinishTokenFetch(
479
+ GRPC_ERROR_CREATE("Invalid service account impersonation response: "
480
+ "JSON type is not object"));
489
481
  return;
490
482
  }
491
483
  auto it = json->object_value().find("accessToken");
492
484
  if (it == json->object_value().end() ||
493
485
  it->second.type() != Json::Type::STRING) {
494
- FinishTokenFetch(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
486
+ FinishTokenFetch(GRPC_ERROR_CREATE(absl::StrFormat(
495
487
  "Missing or invalid accessToken in %s.", response_body)));
496
488
  return;
497
489
  }
@@ -499,14 +491,14 @@ void ExternalAccountCredentials::OnImpersenateServiceAccountInternal(
499
491
  it = json->object_value().find("expireTime");
500
492
  if (it == json->object_value().end() ||
501
493
  it->second.type() != Json::Type::STRING) {
502
- FinishTokenFetch(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
494
+ FinishTokenFetch(GRPC_ERROR_CREATE(absl::StrFormat(
503
495
  "Missing or invalid expireTime in %s.", response_body)));
504
496
  return;
505
497
  }
506
498
  std::string expire_time = it->second.string_value();
507
499
  absl::Time t;
508
500
  if (!absl::ParseTime(absl::RFC3339_full, expire_time, &t, nullptr)) {
509
- FinishTokenFetch(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
501
+ FinishTokenFetch(GRPC_ERROR_CREATE(
510
502
  "Invalid expire time of service account impersonation response."));
511
503
  return;
512
504
  }
@@ -525,12 +517,11 @@ void ExternalAccountCredentials::OnImpersenateServiceAccountInternal(
525
517
  metadata_req_->response.hdrs[i].value =
526
518
  gpr_strdup(ctx_->response.hdrs[i].value);
527
519
  }
528
- FinishTokenFetch(GRPC_ERROR_NONE);
520
+ FinishTokenFetch(absl::OkStatus());
529
521
  }
530
522
 
531
523
  void ExternalAccountCredentials::FinishTokenFetch(grpc_error_handle error) {
532
- GRPC_LOG_IF_ERROR("Fetch external account credentials access token",
533
- GRPC_ERROR_REF(error));
524
+ GRPC_LOG_IF_ERROR("Fetch external account credentials access token", error);
534
525
  // Move object state into local variables.
535
526
  auto* cb = response_cb_;
536
527
  response_cb_ = nullptr;
@@ -542,7 +533,6 @@ void ExternalAccountCredentials::FinishTokenFetch(grpc_error_handle error) {
542
533
  cb(metadata_req, error);
543
534
  // Delete context.
544
535
  delete ctx;
545
- GRPC_ERROR_UNREF(error);
546
536
  }
547
537
 
548
538
  } // namespace grpc_core
@@ -557,15 +547,14 @@ grpc_call_credentials* grpc_external_account_credentials_create(
557
547
  return nullptr;
558
548
  }
559
549
  std::vector<std::string> scopes = absl::StrSplit(scopes_string, ',');
560
- grpc_error_handle error = GRPC_ERROR_NONE;
550
+ grpc_error_handle error;
561
551
  auto creds = grpc_core::ExternalAccountCredentials::Create(
562
552
  *json, std::move(scopes), &error)
563
553
  .release();
564
- if (!GRPC_ERROR_IS_NONE(error)) {
554
+ if (!error.ok()) {
565
555
  gpr_log(GPR_ERROR,
566
556
  "External account credentials creation failed. Error: %s.",
567
- grpc_error_std_string(error).c_str());
568
- GRPC_ERROR_UNREF(error);
557
+ grpc_core::StatusToString(error).c_str());
569
558
  return nullptr;
570
559
  }
571
560
  return creds;
@@ -20,6 +20,7 @@
20
20
  #include <map>
21
21
  #include <utility>
22
22
 
23
+ #include "absl/status/status.h"
23
24
  #include "absl/status/statusor.h"
24
25
  #include "absl/strings/string_view.h"
25
26
 
@@ -27,8 +28,8 @@
27
28
 
28
29
  #include "src/core/lib/iomgr/load_file.h"
29
30
  #include "src/core/lib/json/json.h"
31
+ #include "src/core/lib/slice/slice.h"
30
32
  #include "src/core/lib/slice/slice_internal.h"
31
- #include "src/core/lib/slice/slice_refcount.h"
32
33
 
33
34
  namespace grpc_core {
34
35
 
@@ -38,7 +39,7 @@ FileExternalAccountCredentials::Create(Options options,
38
39
  grpc_error_handle* error) {
39
40
  auto creds = MakeRefCounted<FileExternalAccountCredentials>(
40
41
  std::move(options), std::move(scopes), error);
41
- if (GRPC_ERROR_IS_NONE(*error)) {
42
+ if (error->ok()) {
42
43
  return creds;
43
44
  } else {
44
45
  return nullptr;
@@ -50,12 +51,11 @@ FileExternalAccountCredentials::FileExternalAccountCredentials(
50
51
  : ExternalAccountCredentials(options, std::move(scopes)) {
51
52
  auto it = options.credential_source.object_value().find("file");
52
53
  if (it == options.credential_source.object_value().end()) {
53
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("file field not present.");
54
+ *error = GRPC_ERROR_CREATE("file field not present.");
54
55
  return;
55
56
  }
56
57
  if (it->second.type() != Json::Type::STRING) {
57
- *error =
58
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("file field must be a string.");
58
+ *error = GRPC_ERROR_CREATE("file field must be a string.");
59
59
  return;
60
60
  }
61
61
  file_ = it->second.string_value();
@@ -63,32 +63,30 @@ FileExternalAccountCredentials::FileExternalAccountCredentials(
63
63
  if (it != options.credential_source.object_value().end()) {
64
64
  const Json& format_json = it->second;
65
65
  if (format_json.type() != Json::Type::OBJECT) {
66
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
66
+ *error = GRPC_ERROR_CREATE(
67
67
  "The JSON value of credential source format is not an object.");
68
68
  return;
69
69
  }
70
70
  auto format_it = format_json.object_value().find("type");
71
71
  if (format_it == format_json.object_value().end()) {
72
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
73
- "format.type field not present.");
72
+ *error = GRPC_ERROR_CREATE("format.type field not present.");
74
73
  return;
75
74
  }
76
75
  if (format_it->second.type() != Json::Type::STRING) {
77
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
78
- "format.type field must be a string.");
76
+ *error = GRPC_ERROR_CREATE("format.type field must be a string.");
79
77
  return;
80
78
  }
81
79
  format_type_ = format_it->second.string_value();
82
80
  if (format_type_ == "json") {
83
81
  format_it = format_json.object_value().find("subject_token_field_name");
84
82
  if (format_it == format_json.object_value().end()) {
85
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
83
+ *error = GRPC_ERROR_CREATE(
86
84
  "format.subject_token_field_name field must be present if the "
87
85
  "format is in Json.");
88
86
  return;
89
87
  }
90
88
  if (format_it->second.type() != Json::Type::STRING) {
91
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
89
+ *error = GRPC_ERROR_CREATE(
92
90
  "format.subject_token_field_name field must be a string.");
93
91
  return;
94
92
  }
@@ -101,7 +99,7 @@ void FileExternalAccountCredentials::RetrieveSubjectToken(
101
99
  HTTPRequestContext* /*ctx*/, const Options& /*options*/,
102
100
  std::function<void(std::string, grpc_error_handle)> cb) {
103
101
  struct SliceWrapper {
104
- ~SliceWrapper() { grpc_slice_unref_internal(slice); }
102
+ ~SliceWrapper() { CSliceUnref(slice); }
105
103
  grpc_slice slice = grpc_empty_slice();
106
104
  };
107
105
  SliceWrapper content_slice;
@@ -109,7 +107,7 @@ void FileExternalAccountCredentials::RetrieveSubjectToken(
109
107
  // request because it may have changed since the last request.
110
108
  grpc_error_handle error =
111
109
  grpc_load_file(file_.c_str(), 0, &content_slice.slice);
112
- if (!GRPC_ERROR_IS_NONE(error)) {
110
+ if (!error.ok()) {
113
111
  cb("", error);
114
112
  return;
115
113
  }
@@ -117,26 +115,24 @@ void FileExternalAccountCredentials::RetrieveSubjectToken(
117
115
  if (format_type_ == "json") {
118
116
  auto content_json = Json::Parse(content);
119
117
  if (!content_json.ok() || content_json->type() != Json::Type::OBJECT) {
120
- cb("", GRPC_ERROR_CREATE_FROM_STATIC_STRING(
118
+ cb("", GRPC_ERROR_CREATE(
121
119
  "The content of the file is not a valid json object."));
122
120
  return;
123
121
  }
124
122
  auto content_it =
125
123
  content_json->object_value().find(format_subject_token_field_name_);
126
124
  if (content_it == content_json->object_value().end()) {
127
- cb("", GRPC_ERROR_CREATE_FROM_STATIC_STRING(
128
- "Subject token field not present."));
125
+ cb("", GRPC_ERROR_CREATE("Subject token field not present."));
129
126
  return;
130
127
  }
131
128
  if (content_it->second.type() != Json::Type::STRING) {
132
- cb("", GRPC_ERROR_CREATE_FROM_STATIC_STRING(
133
- "Subject token field must be a string."));
129
+ cb("", GRPC_ERROR_CREATE("Subject token field must be a string."));
134
130
  return;
135
131
  }
136
- cb(content_it->second.string_value(), GRPC_ERROR_NONE);
132
+ cb(content_it->second.string_value(), absl::OkStatus());
137
133
  return;
138
134
  }
139
- cb(std::string(content), GRPC_ERROR_NONE);
135
+ cb(std::string(content), absl::OkStatus());
140
136
  }
141
137
 
142
138
  } // namespace grpc_core
@@ -50,7 +50,7 @@ UrlExternalAccountCredentials::Create(Options options,
50
50
  grpc_error_handle* error) {
51
51
  auto creds = MakeRefCounted<UrlExternalAccountCredentials>(
52
52
  std::move(options), std::move(scopes), error);
53
- if (GRPC_ERROR_IS_NONE(*error)) {
53
+ if (error->ok()) {
54
54
  return creds;
55
55
  } else {
56
56
  return nullptr;
@@ -62,17 +62,16 @@ UrlExternalAccountCredentials::UrlExternalAccountCredentials(
62
62
  : ExternalAccountCredentials(options, std::move(scopes)) {
63
63
  auto it = options.credential_source.object_value().find("url");
64
64
  if (it == options.credential_source.object_value().end()) {
65
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("url field not present.");
65
+ *error = GRPC_ERROR_CREATE("url field not present.");
66
66
  return;
67
67
  }
68
68
  if (it->second.type() != Json::Type::STRING) {
69
- *error =
70
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("url field must be a string.");
69
+ *error = GRPC_ERROR_CREATE("url field must be a string.");
71
70
  return;
72
71
  }
73
72
  absl::StatusOr<URI> tmp_url = URI::Parse(it->second.string_value());
74
73
  if (!tmp_url.ok()) {
75
- *error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
74
+ *error = GRPC_ERROR_CREATE(
76
75
  absl::StrFormat("Invalid credential source url. Error: %s",
77
76
  tmp_url.status().ToString()));
78
77
  return;
@@ -85,7 +84,7 @@ UrlExternalAccountCredentials::UrlExternalAccountCredentials(
85
84
  it = options.credential_source.object_value().find("headers");
86
85
  if (it != options.credential_source.object_value().end()) {
87
86
  if (it->second.type() != Json::Type::OBJECT) {
88
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
87
+ *error = GRPC_ERROR_CREATE(
89
88
  "The JSON value of credential source headers is not an object.");
90
89
  return;
91
90
  }
@@ -97,32 +96,30 @@ UrlExternalAccountCredentials::UrlExternalAccountCredentials(
97
96
  if (it != options.credential_source.object_value().end()) {
98
97
  const Json& format_json = it->second;
99
98
  if (format_json.type() != Json::Type::OBJECT) {
100
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
99
+ *error = GRPC_ERROR_CREATE(
101
100
  "The JSON value of credential source format is not an object.");
102
101
  return;
103
102
  }
104
103
  auto format_it = format_json.object_value().find("type");
105
104
  if (format_it == format_json.object_value().end()) {
106
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
107
- "format.type field not present.");
105
+ *error = GRPC_ERROR_CREATE("format.type field not present.");
108
106
  return;
109
107
  }
110
108
  if (format_it->second.type() != Json::Type::STRING) {
111
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
112
- "format.type field must be a string.");
109
+ *error = GRPC_ERROR_CREATE("format.type field must be a string.");
113
110
  return;
114
111
  }
115
112
  format_type_ = format_it->second.string_value();
116
113
  if (format_type_ == "json") {
117
114
  format_it = format_json.object_value().find("subject_token_field_name");
118
115
  if (format_it == format_json.object_value().end()) {
119
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
116
+ *error = GRPC_ERROR_CREATE(
120
117
  "format.subject_token_field_name field must be present if the "
121
118
  "format is in Json.");
122
119
  return;
123
120
  }
124
121
  if (format_it->second.type() != Json::Type::STRING) {
125
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
122
+ *error = GRPC_ERROR_CREATE(
126
123
  "format.subject_token_field_name field must be a string.");
127
124
  return;
128
125
  }
@@ -137,7 +134,7 @@ void UrlExternalAccountCredentials::RetrieveSubjectToken(
137
134
  if (ctx == nullptr) {
138
135
  FinishRetrieveSubjectToken(
139
136
  "",
140
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(
137
+ GRPC_ERROR_CREATE(
141
138
  "Missing HTTPRequestContext to start subject token retrieval."));
142
139
  return;
143
140
  }
@@ -189,13 +186,13 @@ void UrlExternalAccountCredentials::OnRetrieveSubjectToken(
189
186
  void* arg, grpc_error_handle error) {
190
187
  UrlExternalAccountCredentials* self =
191
188
  static_cast<UrlExternalAccountCredentials*>(arg);
192
- self->OnRetrieveSubjectTokenInternal(GRPC_ERROR_REF(error));
189
+ self->OnRetrieveSubjectTokenInternal(error);
193
190
  }
194
191
 
195
192
  void UrlExternalAccountCredentials::OnRetrieveSubjectTokenInternal(
196
193
  grpc_error_handle error) {
197
194
  http_request_.reset();
198
- if (!GRPC_ERROR_IS_NONE(error)) {
195
+ if (!error.ok()) {
199
196
  FinishRetrieveSubjectToken("", error);
200
197
  return;
201
198
  }
@@ -205,27 +202,26 @@ void UrlExternalAccountCredentials::OnRetrieveSubjectTokenInternal(
205
202
  auto response_json = Json::Parse(response_body);
206
203
  if (!response_json.ok() || response_json->type() != Json::Type::OBJECT) {
207
204
  FinishRetrieveSubjectToken(
208
- "", GRPC_ERROR_CREATE_FROM_STATIC_STRING(
205
+ "", GRPC_ERROR_CREATE(
209
206
  "The format of response is not a valid json object."));
210
207
  return;
211
208
  }
212
209
  auto response_it =
213
210
  response_json->object_value().find(format_subject_token_field_name_);
214
211
  if (response_it == response_json->object_value().end()) {
215
- FinishRetrieveSubjectToken("", GRPC_ERROR_CREATE_FROM_STATIC_STRING(
216
- "Subject token field not present."));
212
+ FinishRetrieveSubjectToken(
213
+ "", GRPC_ERROR_CREATE("Subject token field not present."));
217
214
  return;
218
215
  }
219
216
  if (response_it->second.type() != Json::Type::STRING) {
220
- FinishRetrieveSubjectToken("",
221
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(
222
- "Subject token field must be a string."));
217
+ FinishRetrieveSubjectToken(
218
+ "", GRPC_ERROR_CREATE("Subject token field must be a string."));
223
219
  return;
224
220
  }
225
221
  FinishRetrieveSubjectToken(response_it->second.string_value(), error);
226
222
  return;
227
223
  }
228
- FinishRetrieveSubjectToken(std::string(response_body), GRPC_ERROR_NONE);
224
+ FinishRetrieveSubjectToken(std::string(response_body), absl::OkStatus());
229
225
  }
230
226
 
231
227
  void UrlExternalAccountCredentials::FinishRetrieveSubjectToken(
@@ -236,10 +232,10 @@ void UrlExternalAccountCredentials::FinishRetrieveSubjectToken(
236
232
  auto cb = cb_;
237
233
  cb_ = nullptr;
238
234
  // Invoke the callback.
239
- if (!GRPC_ERROR_IS_NONE(error)) {
235
+ if (!error.ok()) {
240
236
  cb("", error);
241
237
  } else {
242
- cb(subject_token, GRPC_ERROR_NONE);
238
+ cb(subject_token, absl::OkStatus());
243
239
  }
244
240
  }
245
241
 
@@ -22,6 +22,7 @@
22
22
 
23
23
  #include <stdlib.h>
24
24
 
25
+ #include <memory>
25
26
  #include <utility>
26
27
 
27
28
  #include "absl/strings/string_view.h"