grpc 1.46.3 → 1.47.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 (481) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +49 -97
  3. data/include/grpc/event_engine/event_engine.h +42 -7
  4. data/include/grpc/event_engine/memory_allocator.h +0 -15
  5. data/include/grpc/event_engine/port.h +1 -1
  6. data/include/grpc/event_engine/slice.h +286 -0
  7. data/include/grpc/event_engine/slice_buffer.h +112 -0
  8. data/include/grpc/grpc_security.h +11 -0
  9. data/include/grpc/impl/codegen/port_platform.h +100 -36
  10. data/include/grpc/impl/codegen/slice.h +1 -1
  11. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +18 -30
  12. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +4 -1
  13. data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
  14. data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +5 -5
  16. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +42 -20
  18. data/src/core/ext/filters/client_channel/client_channel.cc +60 -17
  19. data/src/core/ext/filters/client_channel/client_channel.h +26 -6
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  22. data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
  23. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
  24. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
  25. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  26. data/src/core/ext/filters/client_channel/config_selector.h +7 -5
  27. data/src/core/ext/filters/client_channel/connector.h +8 -2
  28. data/src/core/ext/filters/client_channel/dynamic_filters.cc +13 -2
  29. data/src/core/ext/filters/client_channel/dynamic_filters.h +11 -1
  30. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  31. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
  32. data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
  33. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
  34. data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
  35. data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
  37. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  39. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +9 -3
  42. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -19
  43. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
  45. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
  46. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
  47. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
  51. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +60 -52
  52. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -60
  53. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +157 -96
  54. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +2 -0
  55. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +45 -10
  56. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -171
  57. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +39 -36
  58. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +30 -5
  59. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +99 -23
  60. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
  61. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -4
  62. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +23 -3
  63. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +75 -11
  64. data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
  65. data/src/core/ext/filters/client_channel/lb_policy.h +18 -24
  66. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
  67. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  68. data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
  69. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  70. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  71. data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
  72. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
  73. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
  74. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +23 -5
  75. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +134 -43
  76. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
  77. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +26 -9
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
  82. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  83. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  84. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +30 -7
  85. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -14
  86. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
  87. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +59 -13
  88. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +13 -1
  89. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
  90. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +15 -11
  91. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +89 -33
  92. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -11
  93. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
  94. data/src/core/ext/filters/client_channel/retry_filter.cc +42 -2
  95. data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -9
  96. data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
  97. data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
  98. data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
  99. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -5
  100. data/src/core/ext/filters/client_channel/subchannel.cc +156 -160
  101. data/src/core/ext/filters/client_channel/subchannel.h +80 -20
  102. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
  103. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  104. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
  105. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
  106. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +16 -2
  107. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +12 -0
  108. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -2
  109. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -4
  110. data/src/core/ext/filters/http/client/http_client_filter.cc +14 -5
  111. data/src/core/ext/filters/http/client/http_client_filter.h +7 -1
  112. data/src/core/ext/filters/http/client_authority_filter.cc +5 -10
  113. data/src/core/ext/filters/http/http_filters_plugin.cc +7 -8
  114. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +1 -0
  115. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +3 -1
  116. data/src/core/ext/filters/http/server/http_server_filter.cc +80 -247
  117. data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
  118. data/src/core/ext/filters/message_size/message_size_filter.cc +20 -26
  119. data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
  120. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -0
  121. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +101 -135
  122. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
  123. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -15
  124. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
  125. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
  126. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  127. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  128. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +69 -20
  129. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +5 -0
  130. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
  131. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
  132. data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -2
  133. data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -2
  134. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  135. data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -1
  136. data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -1
  137. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
  138. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  139. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
  140. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  141. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
  142. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  143. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -3
  144. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  145. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -1
  146. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  147. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
  148. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
  149. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
  150. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
  151. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -7
  152. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
  153. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +55 -37
  154. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
  155. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  156. data/src/core/ext/transport/chttp2/transport/internal.h +24 -3
  157. data/src/core/ext/transport/chttp2/transport/parsing.cc +27 -6
  158. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -9
  159. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  160. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  161. data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
  162. data/src/core/ext/transport/chttp2/transport/writing.cc +38 -2
  163. data/src/core/ext/transport/inproc/inproc_transport.cc +8 -5
  164. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  165. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
  166. data/src/core/ext/xds/certificate_provider_store.cc +4 -2
  167. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  168. data/src/core/ext/xds/xds_certificate_provider.cc +4 -1
  169. data/src/core/ext/xds/xds_certificate_provider.h +1 -1
  170. data/src/core/ext/xds/xds_channel_stack_modifier.cc +5 -5
  171. data/src/core/ext/xds/xds_client.cc +46 -22
  172. data/src/core/ext/xds/xds_cluster.cc +106 -16
  173. data/src/core/ext/xds/xds_cluster.h +3 -0
  174. data/src/core/ext/xds/xds_http_fault_filter.cc +3 -3
  175. data/src/core/ext/xds/xds_listener.cc +19 -9
  176. data/src/core/ext/xds/xds_server_config_fetcher.cc +2 -1
  177. data/src/core/lib/address_utils/sockaddr_utils.cc +56 -23
  178. data/src/core/lib/address_utils/sockaddr_utils.h +7 -4
  179. data/src/core/lib/avl/avl.h +3 -1
  180. data/src/core/lib/channel/call_finalization.h +4 -0
  181. data/src/core/lib/channel/call_tracer.h +8 -2
  182. data/src/core/lib/channel/channel_args.cc +41 -22
  183. data/src/core/lib/channel/channel_args.h +33 -3
  184. data/src/core/lib/channel/channel_args_preconditioning.cc +3 -3
  185. data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
  186. data/src/core/lib/channel/channel_stack.cc +41 -3
  187. data/src/core/lib/channel/channel_stack.h +49 -3
  188. data/src/core/lib/channel/channel_stack_builder.cc +9 -19
  189. data/src/core/lib/channel/channel_stack_builder.h +15 -27
  190. data/src/core/lib/channel/channel_stack_builder_impl.cc +36 -41
  191. data/src/core/lib/channel/channel_stack_builder_impl.h +3 -6
  192. data/src/core/lib/channel/channel_trace.cc +8 -13
  193. data/src/core/lib/channel/channel_trace.h +6 -3
  194. data/src/core/lib/channel/channelz.cc +8 -13
  195. data/src/core/lib/channel/channelz.h +13 -4
  196. data/src/core/lib/channel/channelz_registry.cc +7 -14
  197. data/src/core/lib/channel/channelz_registry.h +10 -9
  198. data/src/core/lib/channel/connected_channel.cc +21 -31
  199. data/src/core/lib/channel/connected_channel.h +1 -0
  200. data/src/core/lib/channel/promise_based_filter.cc +444 -189
  201. data/src/core/lib/channel/promise_based_filter.h +160 -27
  202. data/src/core/lib/channel/status_util.cc +2 -0
  203. data/src/core/lib/channel/status_util.h +0 -3
  204. data/src/core/lib/compression/compression_internal.cc +45 -10
  205. data/src/core/lib/compression/compression_internal.h +1 -1
  206. data/src/core/lib/config/core_configuration.cc +3 -0
  207. data/src/core/lib/config/core_configuration.h +2 -1
  208. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
  209. data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
  210. data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
  211. data/src/core/lib/event_engine/event_engine.cc +12 -2
  212. data/src/core/lib/event_engine/event_engine_factory.h +5 -0
  213. data/src/core/lib/event_engine/handle_containers.h +67 -0
  214. data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
  215. data/src/core/lib/event_engine/iomgr_engine.h +118 -0
  216. data/src/core/lib/event_engine/memory_allocator.cc +12 -4
  217. data/src/core/lib/event_engine/resolved_address.cc +4 -2
  218. data/src/core/lib/event_engine/slice.cc +102 -0
  219. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  220. data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
  221. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
  222. data/src/core/lib/gpr/log.cc +5 -0
  223. data/src/core/lib/gpr/tls.h +3 -5
  224. data/src/core/lib/gprpp/bitset.h +5 -1
  225. data/src/core/lib/gprpp/chunked_vector.h +4 -0
  226. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  227. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  228. data/src/core/lib/gprpp/examine_stack.h +0 -1
  229. data/src/core/lib/gprpp/fork.cc +3 -6
  230. data/src/core/lib/gprpp/global_config.h +2 -4
  231. data/src/core/lib/gprpp/global_config_env.cc +3 -2
  232. data/src/core/lib/gprpp/global_config_env.h +3 -1
  233. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  234. data/src/core/lib/gprpp/host_port.cc +2 -0
  235. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  236. data/src/core/lib/gprpp/match.h +2 -0
  237. data/src/core/lib/gprpp/memory.h +1 -5
  238. data/src/core/lib/gprpp/orphanable.h +1 -4
  239. data/src/core/lib/gprpp/ref_counted.h +1 -3
  240. data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
  241. data/src/core/lib/gprpp/stat.h +0 -2
  242. data/src/core/lib/gprpp/stat_posix.cc +7 -2
  243. data/src/core/lib/gprpp/status_helper.cc +8 -4
  244. data/src/core/lib/gprpp/status_helper.h +4 -0
  245. data/src/core/lib/gprpp/sync.h +3 -1
  246. data/src/core/lib/gprpp/table.h +10 -0
  247. data/src/core/lib/gprpp/thd.h +2 -5
  248. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  249. data/src/core/lib/gprpp/thd_windows.cc +2 -0
  250. data/src/core/lib/gprpp/time.cc +8 -0
  251. data/src/core/lib/gprpp/time.h +6 -1
  252. data/src/core/lib/gprpp/time_util.cc +4 -0
  253. data/src/core/lib/gprpp/time_util.h +1 -1
  254. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  255. data/src/core/lib/http/format_request.cc +29 -0
  256. data/src/core/lib/http/format_request.h +2 -0
  257. data/src/core/lib/http/httpcli.cc +88 -81
  258. data/src/core/lib/http/httpcli.h +39 -7
  259. data/src/core/lib/http/httpcli_security_connector.cc +3 -4
  260. data/src/core/lib/iomgr/endpoint.cc +4 -4
  261. data/src/core/lib/iomgr/endpoint.h +6 -4
  262. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -4
  263. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  264. data/src/core/lib/iomgr/ev_posix.cc +1 -4
  265. data/src/core/lib/iomgr/exec_ctx.h +1 -2
  266. data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
  267. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  268. data/src/core/lib/iomgr/iomgr.cc +0 -1
  269. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
  270. data/src/core/lib/iomgr/pollset_set.h +1 -2
  271. data/src/core/lib/iomgr/port.h +25 -6
  272. data/src/core/lib/iomgr/resolve_address.cc +8 -0
  273. data/src/core/lib/iomgr/resolve_address.h +21 -14
  274. data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
  275. data/src/core/lib/iomgr/resolve_address_posix.cc +8 -14
  276. data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
  277. data/src/core/lib/iomgr/resolve_address_windows.cc +7 -14
  278. data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
  279. data/src/core/lib/iomgr/sockaddr.h +2 -3
  280. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  281. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  282. data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
  283. data/src/core/lib/iomgr/tcp_client_cfstream.cc +10 -2
  284. data/src/core/lib/iomgr/tcp_client_posix.cc +12 -5
  285. data/src/core/lib/iomgr/tcp_client_windows.cc +13 -6
  286. data/src/core/lib/iomgr/tcp_posix.cc +9 -27
  287. data/src/core/lib/iomgr/tcp_server_posix.cc +26 -12
  288. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +30 -27
  289. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -4
  290. data/src/core/lib/iomgr/tcp_server_windows.cc +13 -5
  291. data/src/core/lib/iomgr/tcp_windows.cc +7 -4
  292. data/src/core/lib/json/json.h +1 -2
  293. data/src/core/lib/json/json_reader.cc +9 -1
  294. data/src/core/lib/json/json_util.cc +7 -0
  295. data/src/core/lib/json/json_util.h +10 -1
  296. data/src/core/lib/json/json_writer.cc +6 -1
  297. data/src/core/lib/promise/activity.cc +1 -1
  298. data/src/core/lib/promise/activity.h +6 -6
  299. data/src/core/lib/promise/arena_promise.h +11 -1
  300. data/src/core/lib/promise/call_push_pull.h +4 -0
  301. data/src/core/lib/promise/context.h +1 -1
  302. data/src/core/lib/promise/detail/basic_seq.h +2 -2
  303. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  304. data/src/core/lib/promise/latch.h +0 -1
  305. data/src/core/lib/promise/loop.h +1 -0
  306. data/src/core/lib/promise/race.h +0 -1
  307. data/src/core/lib/promise/seq.h +0 -2
  308. data/src/core/lib/promise/sleep.cc +2 -0
  309. data/src/core/lib/promise/sleep.h +10 -0
  310. data/src/core/lib/promise/try_seq.h +2 -2
  311. data/src/core/lib/resolver/resolver_factory.h +1 -2
  312. data/src/core/lib/resolver/server_address.cc +9 -3
  313. data/src/core/lib/resolver/server_address.h +4 -4
  314. data/src/core/lib/resource_quota/api.cc +14 -1
  315. data/src/core/lib/resource_quota/api.h +4 -1
  316. data/src/core/lib/resource_quota/arena.cc +0 -6
  317. data/src/core/lib/resource_quota/arena.h +1 -2
  318. data/src/core/lib/resource_quota/memory_quota.cc +47 -5
  319. data/src/core/lib/resource_quota/memory_quota.h +24 -5
  320. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  321. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  322. data/src/core/lib/resource_quota/thread_quota.h +4 -0
  323. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -0
  324. data/src/core/lib/security/credentials/alts/alts_credentials.cc +8 -2
  325. data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
  326. data/src/core/lib/security/credentials/call_creds_util.cc +2 -0
  327. data/src/core/lib/security/credentials/channel_creds_registry.h +1 -0
  328. data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -3
  329. data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -4
  330. data/src/core/lib/security/credentials/credentials.h +17 -10
  331. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +81 -0
  332. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +8 -0
  333. data/src/core/lib/security/credentials/external/external_account_credentials.cc +3 -0
  334. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -0
  335. data/src/core/lib/security/credentials/fake/fake_credentials.cc +13 -3
  336. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  337. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -15
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
  339. data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -1
  340. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  341. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +8 -2
  342. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +4 -4
  343. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -2
  344. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  345. data/src/core/lib/security/credentials/local/local_credentials.cc +8 -2
  346. data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
  347. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -6
  348. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
  349. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +4 -1
  350. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -1
  351. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -2
  352. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +4 -4
  353. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +10 -0
  354. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -7
  355. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +26 -1
  356. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +28 -4
  357. data/src/core/lib/security/credentials/tls/tls_credentials.cc +10 -0
  358. data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
  359. data/src/core/lib/security/credentials/xds/xds_credentials.cc +12 -3
  360. data/src/core/lib/security/credentials/xds/xds_credentials.h +5 -5
  361. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
  362. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
  363. data/src/core/lib/security/security_connector/security_connector.cc +1 -1
  364. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  365. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -1
  366. data/src/core/lib/security/transport/client_auth_filter.cc +6 -8
  367. data/src/core/lib/security/transport/secure_endpoint.cc +23 -12
  368. data/src/core/lib/security/transport/security_handshaker.cc +5 -5
  369. data/src/core/lib/security/transport/security_handshaker.h +1 -1
  370. data/src/core/lib/security/transport/server_auth_filter.cc +3 -2
  371. data/src/core/lib/service_config/service_config.h +4 -8
  372. data/src/core/lib/service_config/service_config_call_data.h +4 -1
  373. data/src/core/lib/service_config/service_config_impl.cc +7 -0
  374. data/src/core/lib/service_config/service_config_impl.h +9 -2
  375. data/src/core/lib/service_config/service_config_parser.cc +8 -0
  376. data/src/core/lib/service_config/service_config_parser.h +7 -0
  377. data/src/core/lib/slice/b64.cc +1 -1
  378. data/src/core/lib/slice/b64.h +2 -0
  379. data/src/core/lib/slice/percent_encoding.cc +4 -1
  380. data/src/core/lib/slice/percent_encoding.h +0 -6
  381. data/src/core/lib/slice/slice.cc +2 -1
  382. data/src/core/lib/slice/slice.h +10 -5
  383. data/src/core/lib/slice/slice_api.cc +1 -1
  384. data/src/core/lib/slice/slice_buffer.cc +50 -23
  385. data/src/core/lib/slice/slice_buffer.h +106 -0
  386. data/src/core/lib/slice/slice_buffer_api.cc +35 -0
  387. data/src/core/lib/slice/slice_internal.h +4 -3
  388. data/src/core/lib/slice/slice_refcount.h +2 -3
  389. data/src/core/lib/slice/slice_refcount_base.h +2 -3
  390. data/src/core/lib/slice/slice_split.cc +3 -0
  391. data/src/core/lib/slice/slice_split.h +0 -4
  392. data/src/core/lib/slice/slice_string_helpers.cc +4 -0
  393. data/src/core/lib/slice/slice_string_helpers.h +1 -4
  394. data/src/core/lib/surface/builtins.cc +7 -2
  395. data/src/core/lib/surface/byte_buffer.cc +7 -1
  396. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  397. data/src/core/lib/surface/call.cc +41 -26
  398. data/src/core/lib/surface/call.h +16 -2
  399. data/src/core/lib/surface/call_details.cc +4 -4
  400. data/src/core/lib/surface/call_log_batch.cc +7 -1
  401. data/src/core/lib/surface/call_test_only.h +4 -1
  402. data/src/core/lib/surface/channel.cc +179 -242
  403. data/src/core/lib/surface/channel.h +94 -57
  404. data/src/core/lib/surface/channel_init.h +2 -0
  405. data/src/core/lib/surface/channel_ping.cc +8 -2
  406. data/src/core/lib/surface/channel_stack_type.cc +0 -2
  407. data/src/core/lib/surface/channel_stack_type.h +0 -2
  408. data/src/core/lib/surface/completion_queue.cc +14 -6
  409. data/src/core/lib/surface/completion_queue.h +5 -1
  410. data/src/core/lib/surface/completion_queue_factory.cc +1 -0
  411. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  412. data/src/core/lib/surface/event_string.cc +1 -7
  413. data/src/core/lib/surface/event_string.h +1 -1
  414. data/src/core/lib/surface/init.cc +17 -45
  415. data/src/core/lib/surface/init.h +0 -8
  416. data/src/core/lib/surface/lame_client.cc +64 -110
  417. data/src/core/lib/surface/lame_client.h +40 -2
  418. data/src/core/lib/surface/metadata_array.cc +2 -0
  419. data/src/core/lib/surface/server.cc +69 -56
  420. data/src/core/lib/surface/server.h +39 -9
  421. data/src/core/lib/surface/validate_metadata.cc +2 -5
  422. data/src/core/lib/surface/validate_metadata.h +3 -0
  423. data/src/core/lib/surface/version.cc +2 -2
  424. data/src/core/lib/transport/bdp_estimator.cc +3 -1
  425. data/src/core/lib/transport/bdp_estimator.h +2 -3
  426. data/src/core/lib/transport/byte_stream.cc +4 -3
  427. data/src/core/lib/transport/byte_stream.h +5 -1
  428. data/src/core/lib/transport/connectivity_state.cc +6 -4
  429. data/src/core/lib/transport/connectivity_state.h +2 -3
  430. data/src/core/lib/transport/error_utils.cc +4 -2
  431. data/src/core/lib/transport/error_utils.h +5 -1
  432. data/src/core/lib/{channel → transport}/handshaker.cc +9 -4
  433. data/src/core/lib/{channel → transport}/handshaker.h +13 -6
  434. data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
  435. data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
  436. data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
  437. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +24 -10
  438. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
  439. data/src/core/lib/transport/metadata_batch.cc +287 -0
  440. data/src/core/lib/transport/metadata_batch.h +133 -264
  441. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  442. data/src/core/lib/transport/parsed_metadata.h +10 -3
  443. data/src/core/lib/transport/status_conversion.cc +2 -0
  444. data/src/core/lib/transport/status_conversion.h +2 -2
  445. data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
  446. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  447. data/src/core/lib/transport/timeout_encoding.cc +2 -6
  448. data/src/core/lib/transport/timeout_encoding.h +5 -1
  449. data/src/core/lib/transport/transport.cc +18 -17
  450. data/src/core/lib/transport/transport.h +28 -2
  451. data/src/core/lib/transport/transport_impl.h +10 -0
  452. data/src/core/lib/transport/transport_op_string.cc +9 -10
  453. data/src/core/lib/uri/uri_parser.cc +11 -3
  454. data/src/core/lib/uri/uri_parser.h +0 -2
  455. data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
  456. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
  457. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
  458. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
  459. data/src/ruby/ext/grpc/extconf.rb +2 -2
  460. data/src/ruby/lib/grpc/version.rb +1 -1
  461. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  462. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  463. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
  464. metadata +36 -29
  465. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  466. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  467. data/src/core/lib/event_engine/sockaddr.h +0 -44
  468. data/src/core/lib/gprpp/capture.h +0 -76
  469. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  470. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  471. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  472. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  473. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  474. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  475. data/src/core/lib/iomgr/event_engine/promise.h +0 -51
  476. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  477. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
  478. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  479. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  480. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  481. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
@@ -378,7 +378,7 @@ struct grpc_tcp {
378
378
  /* garbage after the last read */
379
379
  grpc_slice_buffer last_read_buffer;
380
380
 
381
- absl::Mutex read_mu;
381
+ grpc_core::Mutex read_mu;
382
382
  grpc_slice_buffer* incoming_buffer ABSL_GUARDED_BY(read_mu) = nullptr;
383
383
  int inq; /* bytes pending on the socket from the last read. */
384
384
  bool inq_capable; /* cache whether kernel supports inq */
@@ -426,9 +426,6 @@ struct grpc_tcp {
426
426
  on errors anymore */
427
427
  TcpZerocopySendCtx tcp_zerocopy_send_ctx;
428
428
  TcpZerocopySendRecord* current_zerocopy_send = nullptr;
429
-
430
- bool curr_read_completed;
431
- int curr_min_read_chunk_size;
432
429
  };
433
430
 
434
431
  struct backup_poller {
@@ -779,12 +776,10 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
779
776
  /* NB: After calling call_read_cb a parallel call of the read handler may
780
777
  * be running. */
781
778
  if (errno == EAGAIN) {
782
- tcp->curr_read_completed = true;
783
779
  finish_estimate(tcp);
784
780
  tcp->inq = 0;
785
781
  return false;
786
782
  } else {
787
- tcp->curr_read_completed = false;
788
783
  grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
789
784
  *error = tcp_annotate_error(GRPC_OS_ERROR(errno, "recvmsg"), tcp);
790
785
  return true;
@@ -796,7 +791,6 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
796
791
  * We may have read something, i.e., total_read_bytes > 0, but
797
792
  * since the connection is closed we will drop the data here, because we
798
793
  * can't call the callback multiple times. */
799
- tcp->curr_read_completed = true;
800
794
  grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
801
795
  *error = tcp_annotate_error(
802
796
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Socket closed"), tcp);
@@ -853,8 +847,6 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
853
847
  finish_estimate(tcp);
854
848
  }
855
849
 
856
- // There may be more data to be read because recvmsg did not return EAGAIN.
857
- tcp->curr_read_completed = false;
858
850
  GPR_DEBUG_ASSERT(total_read_bytes > 0);
859
851
  if (total_read_bytes < tcp->incoming_buffer->length) {
860
852
  grpc_slice_buffer_trim_end(tcp->incoming_buffer,
@@ -879,21 +871,11 @@ static void maybe_make_read_slices(grpc_tcp* tcp)
879
871
  int target_length = static_cast<int>(tcp->target_length);
880
872
  int extra_wanted =
881
873
  target_length - static_cast<int>(tcp->incoming_buffer->length);
882
- if (tcp->curr_read_completed) {
883
- // Set it to false again to start the next block of reads
884
- tcp->curr_read_completed = false;
885
- // Reset curr_min_read_chunk_size for the next block of reads
886
- tcp->curr_min_read_chunk_size = tcp->min_read_chunk_size;
887
- } else {
888
- // Last read is not completed yet. Double the last min read chunk size.
889
- tcp->curr_min_read_chunk_size =
890
- std::min(2 * tcp->curr_min_read_chunk_size, tcp->max_read_chunk_size);
891
- }
892
874
  grpc_slice_buffer_add_indexed(
893
875
  tcp->incoming_buffer,
894
876
  tcp->memory_owner.MakeSlice(grpc_core::MemoryRequest(
895
- tcp->curr_min_read_chunk_size,
896
- grpc_core::Clamp(extra_wanted, tcp->curr_min_read_chunk_size,
877
+ tcp->min_read_chunk_size,
878
+ grpc_core::Clamp(extra_wanted, tcp->min_read_chunk_size,
897
879
  tcp->max_read_chunk_size))));
898
880
  maybe_post_reclaimer(tcp);
899
881
  }
@@ -930,7 +912,7 @@ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error) {
930
912
  }
931
913
 
932
914
  static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
933
- grpc_closure* cb, bool urgent) {
915
+ grpc_closure* cb, bool urgent, int /*min_progress_size*/) {
934
916
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
935
917
  GPR_ASSERT(tcp->read_cb == nullptr);
936
918
  tcp->read_cb = cb;
@@ -1593,7 +1575,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
1593
1575
  }
1594
1576
 
1595
1577
  static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
1596
- grpc_closure* cb, void* arg) {
1578
+ grpc_closure* cb, void* arg, int /*max_frame_size*/) {
1597
1579
  GPR_TIMER_SCOPE("tcp_write", 0);
1598
1580
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1599
1581
  grpc_error_handle error = GRPC_ERROR_NONE;
@@ -1785,12 +1767,14 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
1785
1767
  grpc_resolved_address resolved_local_addr;
1786
1768
  memset(&resolved_local_addr, 0, sizeof(resolved_local_addr));
1787
1769
  resolved_local_addr.len = sizeof(resolved_local_addr.addr);
1770
+ absl::StatusOr<std::string> addr_uri;
1788
1771
  if (getsockname(tcp->fd,
1789
1772
  reinterpret_cast<sockaddr*>(resolved_local_addr.addr),
1790
- &resolved_local_addr.len) < 0) {
1773
+ &resolved_local_addr.len) < 0 ||
1774
+ !(addr_uri = grpc_sockaddr_to_uri(&resolved_local_addr)).ok()) {
1791
1775
  tcp->local_address = "";
1792
1776
  } else {
1793
- tcp->local_address = grpc_sockaddr_to_uri(&resolved_local_addr);
1777
+ tcp->local_address = addr_uri.value();
1794
1778
  }
1795
1779
  tcp->read_cb = nullptr;
1796
1780
  tcp->write_cb = nullptr;
@@ -1808,8 +1792,6 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
1808
1792
  tcp->socket_ts_enabled = false;
1809
1793
  tcp->ts_capable = true;
1810
1794
  tcp->outgoing_buffer_arg = nullptr;
1811
- tcp->curr_read_completed = true;
1812
- tcp->curr_min_read_chunk_size = tcp->min_read_chunk_size;
1813
1795
  if (tcp_tx_zerocopy_enabled && !tcp->tcp_zerocopy_send_ctx.memory_limited()) {
1814
1796
  #ifdef GRPC_LINUX_ERRQUEUE
1815
1797
  const int enable = 1;
@@ -224,8 +224,9 @@ static void on_read(void* arg, grpc_error_handle err) {
224
224
  }
225
225
 
226
226
  if (sp->server->memory_quota->IsMemoryPressureHigh()) {
227
- int64_t dropped_connections_count = ++num_dropped_connections;
228
- if (dropped_connections_count % 1000 == 0) {
227
+ int64_t dropped_connections_count =
228
+ num_dropped_connections.fetch_add(1, std::memory_order_relaxed) + 1;
229
+ if (dropped_connections_count % 1000 == 1) {
229
230
  gpr_log(GPR_INFO,
230
231
  "Dropped >= %" PRId64
231
232
  " new connection attempts due to high memory pressure",
@@ -256,13 +257,18 @@ static void on_read(void* arg, grpc_error_handle err) {
256
257
  goto error;
257
258
  }
258
259
 
259
- std::string addr_str = grpc_sockaddr_to_uri(&addr);
260
+ auto addr_uri = grpc_sockaddr_to_uri(&addr);
261
+ if (!addr_uri.ok()) {
262
+ gpr_log(GPR_ERROR, "Invalid address: %s",
263
+ addr_uri.status().ToString().c_str());
264
+ goto error;
265
+ }
260
266
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
261
267
  gpr_log(GPR_INFO, "SERVER_CONNECT: incoming connection: %s",
262
- addr_str.c_str());
268
+ addr_uri->c_str());
263
269
  }
264
270
 
265
- std::string name = absl::StrCat("tcp-server-connection:", addr_str);
271
+ std::string name = absl::StrCat("tcp-server-connection:", addr_uri.value());
266
272
  grpc_fd* fdobj = grpc_fd_create(fd, name.c_str(), true);
267
273
 
268
274
  read_notifier_pollset = (*(sp->server->pollsets))
@@ -281,7 +287,7 @@ static void on_read(void* arg, grpc_error_handle err) {
281
287
  acceptor->external_connection = false;
282
288
  sp->server->on_accept_cb(
283
289
  sp->server->on_accept_cb_arg,
284
- grpc_tcp_create(fdobj, sp->server->channel_args, addr_str),
290
+ grpc_tcp_create(fdobj, sp->server->channel_args, addr_uri.value()),
285
291
  read_notifier_pollset, acceptor);
286
292
  }
287
293
 
@@ -366,7 +372,7 @@ static grpc_error_handle add_wildcard_addrs_to_server(grpc_tcp_server* s,
366
372
  static grpc_error_handle clone_port(grpc_tcp_listener* listener,
367
373
  unsigned count) {
368
374
  grpc_tcp_listener* sp = nullptr;
369
- std::string addr_str;
375
+ absl::StatusOr<std::string> addr_str;
370
376
  grpc_error_handle err;
371
377
 
372
378
  for (grpc_tcp_listener* l = listener->next; l && l->is_sibling; l = l->next) {
@@ -385,6 +391,9 @@ static grpc_error_handle clone_port(grpc_tcp_listener* listener,
385
391
  if (err != GRPC_ERROR_NONE) return err;
386
392
  listener->server->nports++;
387
393
  addr_str = grpc_sockaddr_to_string(&listener->addr, true);
394
+ if (!addr_str.ok()) {
395
+ return GRPC_ERROR_CREATE_FROM_CPP_STRING(addr_str.status().ToString());
396
+ }
388
397
  sp = static_cast<grpc_tcp_listener*>(gpr_malloc(sizeof(grpc_tcp_listener)));
389
398
  sp->next = listener->next;
390
399
  listener->next = sp;
@@ -397,7 +406,7 @@ static grpc_error_handle clone_port(grpc_tcp_listener* listener,
397
406
  sp->fd = fd;
398
407
  sp->emfd = grpc_fd_create(
399
408
  fd,
400
- absl::StrFormat("tcp-server-listener:%s/clone-%d", addr_str.c_str(), i)
409
+ absl::StrFormat("tcp-server-listener:%s/clone-%d", *addr_str, i)
401
410
  .c_str(),
402
411
  true);
403
412
  memcpy(&sp->addr, &listener->addr, sizeof(grpc_resolved_address));
@@ -604,12 +613,17 @@ class ExternalConnectionHandler : public grpc_core::TcpServerFdHandler {
604
613
  return;
605
614
  }
606
615
  (void)grpc_set_socket_no_sigpipe_if_possible(fd);
607
- std::string addr_str = grpc_sockaddr_to_uri(&addr);
616
+ auto addr_uri = grpc_sockaddr_to_uri(&addr);
617
+ if (!addr_uri.ok()) {
618
+ gpr_log(GPR_ERROR, "Invalid address: %s",
619
+ addr_uri.status().ToString().c_str());
620
+ return;
621
+ }
608
622
  if (grpc_tcp_trace.enabled()) {
609
623
  gpr_log(GPR_INFO, "SERVER_CONNECT: incoming external connection: %s",
610
- addr_str.c_str());
624
+ addr_uri->c_str());
611
625
  }
612
- std::string name = absl::StrCat("tcp-server-connection:", addr_str);
626
+ std::string name = absl::StrCat("tcp-server-connection:", addr_uri.value());
613
627
  grpc_fd* fdobj = grpc_fd_create(fd, name.c_str(), true);
614
628
  read_notifier_pollset =
615
629
  (*(s_->pollsets))[static_cast<size_t>(gpr_atm_no_barrier_fetch_add(
@@ -625,7 +639,7 @@ class ExternalConnectionHandler : public grpc_core::TcpServerFdHandler {
625
639
  acceptor->listener_fd = listener_fd;
626
640
  acceptor->pending_data = buf;
627
641
  s_->on_accept_cb(s_->on_accept_cb_arg,
628
- grpc_tcp_create(fdobj, s_->channel_args, addr_str),
642
+ grpc_tcp_create(fdobj, s_->channel_args, addr_uri.value()),
629
643
  read_notifier_pollset, acceptor);
630
644
  }
631
645
 
@@ -85,38 +85,41 @@ static grpc_error_handle add_socket_to_server(grpc_tcp_server* s, int fd,
85
85
  unsigned port_index,
86
86
  unsigned fd_index,
87
87
  grpc_tcp_listener** listener) {
88
- grpc_tcp_listener* sp = nullptr;
88
+ *listener = nullptr;
89
89
  int port = -1;
90
90
 
91
91
  grpc_error_handle err =
92
92
  grpc_tcp_server_prepare_socket(s, fd, addr, s->so_reuseport, &port);
93
- if (err == GRPC_ERROR_NONE) {
94
- GPR_ASSERT(port > 0);
95
- std::string addr_str = grpc_sockaddr_to_string(addr, true);
96
- std::string name = absl::StrCat("tcp-server-listener:", addr_str);
97
- gpr_mu_lock(&s->mu);
98
- s->nports++;
99
- GPR_ASSERT(!s->on_accept_cb && "must add ports before starting server");
100
- sp = static_cast<grpc_tcp_listener*>(gpr_malloc(sizeof(grpc_tcp_listener)));
101
- sp->next = nullptr;
102
- if (s->head == nullptr) {
103
- s->head = sp;
104
- } else {
105
- s->tail->next = sp;
106
- }
107
- s->tail = sp;
108
- sp->server = s;
109
- sp->fd = fd;
110
- sp->emfd = grpc_fd_create(fd, name.c_str(), true);
111
- memcpy(&sp->addr, addr, sizeof(grpc_resolved_address));
112
- sp->port = port;
113
- sp->port_index = port_index;
114
- sp->fd_index = fd_index;
115
- sp->is_sibling = 0;
116
- sp->sibling = nullptr;
117
- GPR_ASSERT(sp->emfd);
118
- gpr_mu_unlock(&s->mu);
93
+ if (err != GRPC_ERROR_NONE) return err;
94
+ GPR_ASSERT(port > 0);
95
+ absl::StatusOr<std::string> addr_str = grpc_sockaddr_to_string(addr, true);
96
+ if (!addr_str.ok()) {
97
+ return GRPC_ERROR_CREATE_FROM_CPP_STRING(addr_str.status().ToString());
98
+ }
99
+ std::string name = absl::StrCat("tcp-server-listener:", addr_str.value());
100
+ gpr_mu_lock(&s->mu);
101
+ s->nports++;
102
+ GPR_ASSERT(!s->on_accept_cb && "must add ports before starting server");
103
+ grpc_tcp_listener* sp =
104
+ static_cast<grpc_tcp_listener*>(gpr_malloc(sizeof(grpc_tcp_listener)));
105
+ sp->next = nullptr;
106
+ if (s->head == nullptr) {
107
+ s->head = sp;
108
+ } else {
109
+ s->tail->next = sp;
119
110
  }
111
+ s->tail = sp;
112
+ sp->server = s;
113
+ sp->fd = fd;
114
+ sp->emfd = grpc_fd_create(fd, name.c_str(), true);
115
+ memcpy(&sp->addr, addr, sizeof(grpc_resolved_address));
116
+ sp->port = port;
117
+ sp->port_index = port_index;
118
+ sp->fd_index = fd_index;
119
+ sp->is_sibling = 0;
120
+ sp->sibling = nullptr;
121
+ GPR_ASSERT(sp->emfd);
122
+ gpr_mu_unlock(&s->mu);
120
123
 
121
124
  *listener = sp;
122
125
  return err;
@@ -133,21 +133,24 @@ grpc_error_handle grpc_tcp_server_add_all_local_addrs(grpc_tcp_server* s,
133
133
  err = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Failed to set port");
134
134
  break;
135
135
  }
136
- std::string addr_str = grpc_sockaddr_to_string(&addr, false);
136
+ auto addr_str = grpc_sockaddr_to_string(&addr, false);
137
+ if (!addr_str.ok()) {
138
+ return GRPC_ERROR_CREATE_FROM_CPP_STRING(addr_str.status().ToString());
139
+ }
137
140
  gpr_log(GPR_DEBUG,
138
141
  "Adding local addr from interface %s flags 0x%x to server: %s",
139
- ifa_name, ifa_it->ifa_flags, addr_str.c_str());
142
+ ifa_name, ifa_it->ifa_flags, addr_str->c_str());
140
143
  /* We could have multiple interfaces with the same address (e.g., bonding),
141
144
  so look for duplicates. */
142
145
  if (find_listener_with_addr(s, &addr) != nullptr) {
143
146
  gpr_log(GPR_DEBUG, "Skipping duplicate addr %s on interface %s",
144
- addr_str.c_str(), ifa_name);
147
+ addr_str->c_str(), ifa_name);
145
148
  continue;
146
149
  }
147
150
  if ((err = grpc_tcp_server_add_addr(s, &addr, port_index, fd_index, &dsmode,
148
151
  &new_sp)) != GRPC_ERROR_NONE) {
149
152
  grpc_error_handle root_err = GRPC_ERROR_CREATE_FROM_CPP_STRING(
150
- absl::StrCat("Failed to add listener: ", addr_str));
153
+ absl::StrCat("Failed to add listener: ", addr_str.value()));
151
154
  err = grpc_error_add_child(root_err, err);
152
155
  break;
153
156
  } else {
@@ -225,11 +225,13 @@ static grpc_error_handle prepare_socket(SOCKET sock,
225
225
 
226
226
  failure:
227
227
  GPR_ASSERT(error != GRPC_ERROR_NONE);
228
+ auto addr_uri = grpc_sockaddr_to_uri(addr);
228
229
  grpc_error_set_int(
229
- grpc_error_set_str(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
230
- "Failed to prepare server socket", &error, 1),
231
- GRPC_ERROR_STR_TARGET_ADDRESS,
232
- grpc_sockaddr_to_uri(addr)),
230
+ grpc_error_set_str(
231
+ GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
232
+ "Failed to prepare server socket", &error, 1),
233
+ GRPC_ERROR_STR_TARGET_ADDRESS,
234
+ addr_uri.ok() ? *addr_uri : addr_uri.status().ToString()),
233
235
  GRPC_ERROR_INT_FD, (intptr_t)sock);
234
236
  GRPC_ERROR_UNREF(error);
235
237
  if (sock != INVALID_SOCKET) closesocket(sock);
@@ -347,7 +349,13 @@ static void on_accept(void* arg, grpc_error_handle error) {
347
349
  peer_name.len = (size_t)peer_name_len;
348
350
  std::string peer_name_string;
349
351
  if (!err) {
350
- peer_name_string = grpc_sockaddr_to_uri(&peer_name);
352
+ auto addr_uri = grpc_sockaddr_to_uri(&peer_name);
353
+ if (addr_uri.ok()) {
354
+ peer_name_string = addr_uri.value();
355
+ } else {
356
+ gpr_log(GPR_ERROR, "invalid peer name: %s",
357
+ addr_uri.status().ToString().c_str());
358
+ }
351
359
  } else {
352
360
  char* utf8_message = gpr_format_message(WSAGetLastError());
353
361
  gpr_log(GPR_ERROR, "getpeername error: %s", utf8_message);
@@ -31,6 +31,7 @@
31
31
  #include <grpc/support/string_util.h>
32
32
 
33
33
  #include "src/core/lib/address_utils/sockaddr_utils.h"
34
+ #include "src/core/lib/gpr/string.h"
34
35
  #include "src/core/lib/gpr/useful.h"
35
36
  #include "src/core/lib/iomgr/iocp_windows.h"
36
37
  #include "src/core/lib/iomgr/sockaddr.h"
@@ -237,7 +238,7 @@ static void on_read(void* tcpp, grpc_error_handle error) {
237
238
  #define DEFAULT_TARGET_READ_SIZE 8192
238
239
  #define MAX_WSABUF_COUNT 16
239
240
  static void win_read(grpc_endpoint* ep, grpc_slice_buffer* read_slices,
240
- grpc_closure* cb, bool urgent) {
241
+ grpc_closure* cb, bool urgent, int /*min_progress_size*/) {
241
242
  grpc_tcp* tcp = (grpc_tcp*)ep;
242
243
  grpc_winsocket* handle = tcp->socket;
243
244
  grpc_winsocket_callback_info* info = &handle->read_info;
@@ -344,7 +345,7 @@ static void on_write(void* tcpp, grpc_error_handle error) {
344
345
 
345
346
  /* Initiates a write. */
346
347
  static void win_write(grpc_endpoint* ep, grpc_slice_buffer* slices,
347
- grpc_closure* cb, void* arg) {
348
+ grpc_closure* cb, void* arg, int /*max_frame_size*/) {
348
349
  grpc_tcp* tcp = (grpc_tcp*)ep;
349
350
  grpc_winsocket* socket = tcp->socket;
350
351
  grpc_winsocket_callback_info* info = &socket->write_info;
@@ -517,12 +518,14 @@ grpc_endpoint* grpc_tcp_create(grpc_winsocket* socket,
517
518
  GRPC_CLOSURE_INIT(&tcp->on_write, on_write, tcp, grpc_schedule_on_exec_ctx);
518
519
  grpc_resolved_address resolved_local_addr;
519
520
  resolved_local_addr.len = sizeof(resolved_local_addr.addr);
521
+ absl::StatusOr<std::string> addr_uri;
520
522
  if (getsockname(tcp->socket->socket,
521
523
  reinterpret_cast<sockaddr*>(resolved_local_addr.addr),
522
- &resolved_local_addr.len) < 0) {
524
+ &resolved_local_addr.len) < 0 ||
525
+ !(addr_uri = grpc_sockaddr_to_uri(&resolved_local_addr)).ok()) {
523
526
  tcp->local_address = "";
524
527
  } else {
525
- tcp->local_address = grpc_sockaddr_to_uri(&resolved_local_addr);
528
+ tcp->local_address = grpc_sockaddr_to_uri(&resolved_local_addr).value();
526
529
  }
527
530
  tcp->peer_string = std::string(peer_string);
528
531
  grpc_slice_buffer_init(&tcp->last_read_buffer);
@@ -21,10 +21,9 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <stdlib.h>
25
-
26
24
  #include <map>
27
25
  #include <string>
26
+ #include <utility>
28
27
  #include <vector>
29
28
 
30
29
  #include "absl/strings/string_view.h"
@@ -18,15 +18,23 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
- #include <string.h>
21
+ #include <inttypes.h>
22
+ #include <stdlib.h>
22
23
 
24
+ #include <algorithm>
25
+ #include <map>
23
26
  #include <string>
27
+ #include <utility>
28
+ #include <vector>
24
29
 
30
+ #include "absl/base/attributes.h"
25
31
  #include "absl/strings/str_cat.h"
26
32
  #include "absl/strings/str_format.h"
33
+ #include "absl/strings/string_view.h"
27
34
 
28
35
  #include <grpc/support/log.h>
29
36
 
37
+ #include "src/core/lib/iomgr/error.h"
30
38
  #include "src/core/lib/json/json.h"
31
39
 
32
40
  #define GRPC_JSON_MAX_DEPTH 255
@@ -20,9 +20,12 @@
20
20
 
21
21
  #include "src/core/lib/json/json_util.h"
22
22
 
23
+ #include <string.h>
24
+
23
25
  #include <grpc/support/string_util.h>
24
26
 
25
27
  #include "src/core/lib/gpr/string.h"
28
+ #include "src/core/lib/gprpp/memory.h"
26
29
 
27
30
  namespace grpc_core {
28
31
 
@@ -30,6 +33,10 @@ bool ParseDurationFromJson(const Json& field, Duration* duration) {
30
33
  if (field.type() != Json::Type::STRING) return false;
31
34
  size_t len = field.string_value().size();
32
35
  if (field.string_value()[len - 1] != 's') return false;
36
+ if (field.string_value() == Duration::Infinity().ToJsonString()) {
37
+ *duration = Duration::Infinity();
38
+ return true;
39
+ }
33
40
  UniquePtr<char> buf(gpr_strdup(field.string_value().c_str()));
34
41
  *(buf.get() + len - 1) = '\0'; // Remove trailing 's'.
35
42
  char* decimal_point = strchr(buf.get(), '.');
@@ -21,10 +21,19 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <algorithm>
25
+ #include <map>
26
+ #include <string>
27
+ #include <type_traits>
28
+ #include <utility>
29
+ #include <vector>
30
+
24
31
  #include "absl/strings/numbers.h"
25
32
  #include "absl/strings/str_cat.h"
33
+ #include "absl/strings/string_view.h"
26
34
 
27
- #include "src/core/lib/iomgr/exec_ctx.h"
35
+ #include "src/core/lib/gprpp/time.h"
36
+ #include "src/core/lib/iomgr/error.h"
28
37
  #include "src/core/lib/json/json.h"
29
38
 
30
39
  namespace grpc_core {
@@ -18,8 +18,13 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
+ #include <stdint.h>
21
22
  #include <stdlib.h>
22
- #include <string.h>
23
+
24
+ #include <map>
25
+ #include <string>
26
+ #include <utility>
27
+ #include <vector>
23
28
 
24
29
  #include "absl/strings/string_view.h"
25
30
 
@@ -16,7 +16,7 @@
16
16
 
17
17
  #include "src/core/lib/promise/activity.h"
18
18
 
19
- #include "absl/base/attributes.h"
19
+ #include <stddef.h>
20
20
 
21
21
  #include "src/core/lib/gprpp/atomic_utils.h"
22
22
 
@@ -17,14 +17,11 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
- #include <stddef.h>
21
20
  #include <stdint.h>
22
21
 
23
22
  #include <algorithm>
24
23
  #include <atomic>
25
- #include <functional>
26
24
  #include <memory>
27
- #include <type_traits>
28
25
  #include <utility>
29
26
 
30
27
  #include "absl/base/thread_annotations.h"
@@ -150,13 +147,16 @@ class Activity : public Orphanable {
150
147
  // Set the current activity at construction, clean it up at destruction.
151
148
  class ScopedActivity {
152
149
  public:
153
- explicit ScopedActivity(Activity* activity) {
154
- GPR_ASSERT(g_current_activity_ == nullptr);
150
+ explicit ScopedActivity(Activity* activity)
151
+ : prior_activity_(g_current_activity_) {
155
152
  g_current_activity_ = activity;
156
153
  }
157
- ~ScopedActivity() { g_current_activity_ = nullptr; }
154
+ ~ScopedActivity() { g_current_activity_ = prior_activity_; }
158
155
  ScopedActivity(const ScopedActivity&) = delete;
159
156
  ScopedActivity& operator=(const ScopedActivity&) = delete;
157
+
158
+ private:
159
+ Activity* const prior_activity_;
160
160
  };
161
161
 
162
162
  private:
@@ -17,8 +17,14 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
- #include <grpc/support/log.h>
20
+ #include <stdlib.h>
21
21
 
22
+ #include <type_traits>
23
+ #include <utility>
24
+
25
+ #include "absl/meta/type_traits.h"
26
+
27
+ #include "src/core/lib/promise/context.h"
22
28
  #include "src/core/lib/promise/poll.h"
23
29
  #include "src/core/lib/resource_quota/arena.h"
24
30
 
@@ -177,6 +183,10 @@ class ArenaPromise {
177
183
  // Expose the promise interface: a call operator that returns Poll<T>.
178
184
  Poll<T> operator()() { return impl_->PollOnce(); }
179
185
 
186
+ bool has_value() const {
187
+ return impl_ != arena_promise_detail::NullImpl<T>::Get();
188
+ }
189
+
180
190
  private:
181
191
  // Underlying impl object.
182
192
  arena_promise_detail::ImplInterface<T>* impl_ =
@@ -19,6 +19,10 @@
19
19
 
20
20
  #include <assert.h>
21
21
 
22
+ #include <type_traits>
23
+
24
+ #include "absl/types/variant.h"
25
+
22
26
  #include "src/core/lib/gprpp/bitset.h"
23
27
  #include "src/core/lib/gprpp/construct_destruct.h"
24
28
  #include "src/core/lib/promise/detail/promise_like.h"
@@ -29,7 +29,7 @@ namespace grpc_core {
29
29
  // not contain any members, only exist.
30
30
  // The reason for avoiding this is that context types each use a thread local.
31
31
  template <typename T>
32
- struct ContextType;
32
+ struct ContextType; // IWYU pragma: keep
33
33
 
34
34
  namespace promise_detail {
35
35
 
@@ -21,6 +21,7 @@
21
21
  #include <cassert>
22
22
  #include <new>
23
23
  #include <tuple>
24
+ #include <type_traits>
24
25
  #include <utility>
25
26
 
26
27
  #include "absl/meta/type_traits.h"
@@ -29,13 +30,12 @@
29
30
 
30
31
  #include "src/core/lib/gprpp/construct_destruct.h"
31
32
  #include "src/core/lib/promise/detail/promise_factory.h"
33
+ #include "src/core/lib/promise/detail/promise_like.h"
32
34
  #include "src/core/lib/promise/detail/switch.h"
33
35
  #include "src/core/lib/promise/poll.h"
34
36
 
35
37
  namespace grpc_core {
36
38
  namespace promise_detail {
37
- template <typename F>
38
- class PromiseLike;
39
39
 
40
40
  // Helper for SeqState to evaluate some common types to all partial
41
41
  // specializations.
@@ -23,7 +23,6 @@
23
23
  #include "absl/meta/type_traits.h"
24
24
 
25
25
  #include "src/core/lib/promise/detail/promise_like.h"
26
- #include "src/core/lib/promise/poll.h"
27
26
 
28
27
  // PromiseFactory is an adaptor class.
29
28
  //
@@ -19,7 +19,6 @@
19
19
 
20
20
  #include <grpc/support/log.h>
21
21
 
22
- #include "src/core/lib/promise/activity.h"
23
22
  #include "src/core/lib/promise/intra_activity_waiter.h"
24
23
  #include "src/core/lib/promise/poll.h"
25
24
 
@@ -20,6 +20,7 @@
20
20
  #include <new>
21
21
  #include <type_traits>
22
22
 
23
+ #include "absl/status/status.h"
23
24
  #include "absl/status/statusor.h"
24
25
  #include "absl/types/variant.h"
25
26
 
@@ -17,7 +17,6 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
- #include <tuple>
21
20
  #include <type_traits>
22
21
 
23
22
  #include "absl/types/variant.h"
@@ -19,8 +19,6 @@
19
19
 
20
20
  #include <utility>
21
21
 
22
- #include "absl/types/variant.h"
23
-
24
22
  #include "src/core/lib/promise/detail/basic_seq.h"
25
23
  #include "src/core/lib/promise/poll.h"
26
24