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
@@ -21,6 +21,7 @@
21
21
  #include <grpc/impl/codegen/grpc_types.h>
22
22
 
23
23
  #include "src/core/lib/gprpp/global_config_generic.h"
24
+ #include "src/core/lib/iomgr/exec_ctx.h"
24
25
  #include "src/core/lib/iomgr/port.h"
25
26
 
26
27
  #ifdef GRPC_POSIX_SOCKET_TCP
@@ -48,11 +49,14 @@
48
49
  #include <grpc/support/time.h>
49
50
 
50
51
  #include "src/core/lib/address_utils/sockaddr_utils.h"
52
+ #include "src/core/lib/debug/event_log.h"
51
53
  #include "src/core/lib/debug/stats.h"
54
+ #include "src/core/lib/debug/stats_data.h"
52
55
  #include "src/core/lib/debug/trace.h"
53
56
  #include "src/core/lib/experiments/experiments.h"
54
57
  #include "src/core/lib/gpr/string.h"
55
58
  #include "src/core/lib/gpr/useful.h"
59
+ #include "src/core/lib/gprpp/strerror.h"
56
60
  #include "src/core/lib/gprpp/sync.h"
57
61
  #include "src/core/lib/iomgr/buffer_list.h"
58
62
  #include "src/core/lib/iomgr/ev_posix.h"
@@ -105,7 +109,7 @@ class TcpZerocopySendRecord {
105
109
 
106
110
  ~TcpZerocopySendRecord() {
107
111
  AssertEmpty();
108
- grpc_slice_buffer_destroy_internal(&buf_);
112
+ grpc_slice_buffer_destroy(&buf_);
109
113
  }
110
114
 
111
115
  // Given the slices that we wish to send, and the current offset into the
@@ -173,7 +177,7 @@ class TcpZerocopySendRecord {
173
177
  // reference to the underlying data since we no longer need it.
174
178
  void AllSendsComplete() {
175
179
  GPR_DEBUG_ASSERT(ref_.load(std::memory_order_relaxed) == 0);
176
- grpc_slice_buffer_reset_and_unref_internal(&buf_);
180
+ grpc_slice_buffer_reset_and_unref(&buf_);
177
181
  }
178
182
 
179
183
  grpc_slice_buffer buf_;
@@ -514,8 +518,7 @@ struct grpc_tcp {
514
518
  grpc_core::MemoryOwner memory_owner;
515
519
  grpc_core::MemoryAllocator::Reservation self_reservation;
516
520
 
517
- grpc_core::TracedBuffer* tb_head; /* List of traced buffers */
518
- gpr_mu tb_mu; /* Lock for access to list of traced buffers */
521
+ grpc_core::TracedBufferList tb_list; /* List of traced buffers */
519
522
 
520
523
  /* grpc_endpoint_write takes an argument which if non-null means that the
521
524
  * transport layer wants the TCP layer to collect timestamps for this write.
@@ -539,7 +542,6 @@ struct grpc_tcp {
539
542
  TcpZerocopySendCtx tcp_zerocopy_send_ctx;
540
543
  TcpZerocopySendRecord* current_zerocopy_send = nullptr;
541
544
 
542
- bool frame_size_tuning_enabled;
543
545
  int min_progress_size; /* A hint from upper layers specifying the minimum
544
546
  number of bytes that need to be read to make
545
547
  meaningful progress */
@@ -605,7 +607,7 @@ static void run_poller(void* bp, grpc_error_handle /*error_ignored*/) {
605
607
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
606
608
  gpr_log(GPR_INFO, "BACKUP_POLLER:%p reschedule", p);
607
609
  }
608
- grpc_core::Executor::Run(&p->run_poller, GRPC_ERROR_NONE,
610
+ grpc_core::Executor::Run(&p->run_poller, absl::OkStatus(),
609
611
  grpc_core::ExecutorType::DEFAULT,
610
612
  grpc_core::ExecutorJobType::LONG);
611
613
  }
@@ -648,7 +650,7 @@ static void cover_self(grpc_tcp* tcp) {
648
650
  }
649
651
  grpc_core::Executor::Run(
650
652
  GRPC_CLOSURE_INIT(&p->run_poller, run_poller, p, nullptr),
651
- GRPC_ERROR_NONE, grpc_core::ExecutorType::DEFAULT,
653
+ absl::OkStatus(), grpc_core::ExecutorType::DEFAULT,
652
654
  grpc_core::ExecutorJobType::LONG);
653
655
  } else {
654
656
  old_count = g_uncovered_notifications_pending++;
@@ -683,7 +685,7 @@ static void tcp_drop_uncovered_then_handle_write(void* arg,
683
685
  grpc_error_handle error) {
684
686
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
685
687
  gpr_log(GPR_INFO, "TCP:%p got_write: %s", arg,
686
- grpc_error_std_string(error).c_str());
688
+ grpc_core::StatusToString(error).c_str());
687
689
  }
688
690
  drop_uncovered(static_cast<grpc_tcp*>(arg));
689
691
  tcp_handle_write(arg, error);
@@ -711,11 +713,12 @@ static grpc_error_handle tcp_annotate_error(grpc_error_handle src_error,
711
713
  grpc_tcp* tcp) {
712
714
  return grpc_error_set_str(
713
715
  grpc_error_set_int(
714
- grpc_error_set_int(src_error, GRPC_ERROR_INT_FD, tcp->fd),
716
+ grpc_error_set_int(src_error, grpc_core::StatusIntProperty::kFd,
717
+ tcp->fd),
715
718
  /* All tcp errors are marked with UNAVAILABLE so that application may
716
719
  * choose to retry. */
717
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE),
718
- GRPC_ERROR_STR_TARGET_ADDRESS, tcp->peer_string);
720
+ grpc_core::StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE),
721
+ grpc_core::StatusStrProperty::kTargetAddress, tcp->peer_string);
719
722
  }
720
723
 
721
724
  static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error);
@@ -730,15 +733,10 @@ static void tcp_shutdown(grpc_endpoint* ep, grpc_error_handle why) {
730
733
  static void tcp_free(grpc_tcp* tcp) {
731
734
  grpc_fd_orphan(tcp->em_fd, tcp->release_fd_cb, tcp->release_fd,
732
735
  "tcp_unref_orphan");
733
- grpc_slice_buffer_destroy_internal(&tcp->last_read_buffer);
734
- /* The lock is not really necessary here, since all refs have been released */
735
- gpr_mu_lock(&tcp->tb_mu);
736
- grpc_core::TracedBuffer::Shutdown(
737
- &tcp->tb_head, tcp->outgoing_buffer_arg,
738
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("endpoint destroyed"));
739
- gpr_mu_unlock(&tcp->tb_mu);
736
+ grpc_slice_buffer_destroy(&tcp->last_read_buffer);
737
+ tcp->tb_list.Shutdown(tcp->outgoing_buffer_arg,
738
+ GRPC_ERROR_CREATE("endpoint destroyed"));
740
739
  tcp->outgoing_buffer_arg = nullptr;
741
- gpr_mu_destroy(&tcp->tb_mu);
742
740
  delete tcp;
743
741
  }
744
742
 
@@ -770,7 +768,7 @@ static void tcp_ref(grpc_tcp* tcp) { tcp->refcount.Ref(); }
770
768
 
771
769
  static void tcp_destroy(grpc_endpoint* ep) {
772
770
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
773
- grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
771
+ grpc_slice_buffer_reset_and_unref(&tcp->last_read_buffer);
774
772
  if (grpc_event_engine_can_track_errors()) {
775
773
  ZerocopyDisableAndWaitForRemaining(tcp);
776
774
  gpr_atm_no_barrier_store(&tcp->stop_error_notification, true);
@@ -786,7 +784,7 @@ static void perform_reclamation(grpc_tcp* tcp)
786
784
  }
787
785
  tcp->read_mu.Lock();
788
786
  if (tcp->incoming_buffer != nullptr) {
789
- grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
787
+ grpc_slice_buffer_reset_and_unref(tcp->incoming_buffer);
790
788
  }
791
789
  tcp->has_posted_reclaimer = false;
792
790
  tcp->read_mu.Unlock();
@@ -812,12 +810,12 @@ static void tcp_trace_read(grpc_tcp* tcp, grpc_error_handle error)
812
810
  gpr_log(GPR_INFO, "TCP:%p call_cb %p %p:%p", tcp, cb, cb->cb, cb->cb_arg);
813
811
  size_t i;
814
812
  gpr_log(GPR_INFO, "READ %p (peer=%s) error=%s", tcp,
815
- tcp->peer_string.c_str(), grpc_error_std_string(error).c_str());
813
+ tcp->peer_string.c_str(), grpc_core::StatusToString(error).c_str());
816
814
  if (gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
817
815
  for (i = 0; i < tcp->incoming_buffer->count; i++) {
818
816
  char* dump = grpc_dump_slice(tcp->incoming_buffer->slices[i],
819
817
  GPR_DUMP_HEX | GPR_DUMP_ASCII);
820
- gpr_log(GPR_DEBUG, "DATA: %s", dump);
818
+ gpr_log(GPR_DEBUG, "READ DATA: %s", dump);
821
819
  gpr_free(dump);
822
820
  }
823
821
  }
@@ -861,7 +859,7 @@ static void update_rcvlowat(grpc_tcp* tcp)
861
859
  sizeof(remaining)) != 0) {
862
860
  gpr_log(GPR_ERROR, "%s",
863
861
  absl::StrCat("Cannot set SO_RCVLOWAT on fd=", tcp->fd,
864
- " err=", strerror(errno))
862
+ " err=", grpc_core::StrError(errno).c_str())
865
863
  .c_str());
866
864
  return;
867
865
  }
@@ -915,51 +913,49 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
915
913
  }
916
914
  msg.msg_flags = 0;
917
915
 
918
- GRPC_STATS_INC_TCP_READ_OFFER(tcp->incoming_buffer->length);
919
- GRPC_STATS_INC_TCP_READ_OFFER_IOV_SIZE(tcp->incoming_buffer->count);
916
+ grpc_core::global_stats().IncrementTcpReadOffer(
917
+ tcp->incoming_buffer->length);
918
+ grpc_core::global_stats().IncrementTcpReadOfferIovSize(
919
+ tcp->incoming_buffer->count);
920
920
 
921
921
  do {
922
- GRPC_STATS_INC_SYSCALL_READ();
922
+ grpc_core::global_stats().IncrementSyscallRead();
923
923
  read_bytes = recvmsg(tcp->fd, &msg, 0);
924
924
  } while (read_bytes < 0 && errno == EINTR);
925
925
 
926
+ if (read_bytes < 0 && errno == EAGAIN) {
927
+ /* NB: After calling call_read_cb a parallel call of the read handler may
928
+ * be running. */
929
+ if (total_read_bytes > 0) {
930
+ break;
931
+ }
932
+ finish_estimate(tcp);
933
+ tcp->inq = 0;
934
+ return false;
935
+ }
936
+
926
937
  /* We have read something in previous reads. We need to deliver those
927
938
  * bytes to the upper layer. */
928
- if (read_bytes <= 0 &&
929
- total_read_bytes >= static_cast<size_t>(tcp->min_progress_size)) {
939
+ if (read_bytes <= 0 && total_read_bytes >= 1) {
930
940
  tcp->inq = 1;
931
941
  break;
932
942
  }
933
943
 
934
- if (read_bytes < 0) {
935
- /* NB: After calling call_read_cb a parallel call of the read handler may
936
- * be running. */
937
- if (errno == EAGAIN) {
938
- if (total_read_bytes > 0) {
939
- break;
940
- }
941
- finish_estimate(tcp);
942
- tcp->inq = 0;
943
- return false;
944
+ if (read_bytes <= 0) {
945
+ /* 0 read size ==> end of stream */
946
+ grpc_slice_buffer_reset_and_unref(tcp->incoming_buffer);
947
+ if (read_bytes == 0) {
948
+ *error = tcp_annotate_error(absl::InternalError("Socket closed"), tcp);
944
949
  } else {
945
- grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
946
- *error = tcp_annotate_error(GRPC_OS_ERROR(errno, "recvmsg"), tcp);
947
- return true;
950
+ *error =
951
+ tcp_annotate_error(absl::InternalError(absl::StrCat(
952
+ "recvmsg:", grpc_core::StrError(errno))),
953
+ tcp);
948
954
  }
949
- }
950
- if (read_bytes == 0) {
951
- /* 0 read size ==> end of stream
952
- *
953
- * We may have read something, i.e., total_read_bytes > 0, but
954
- * since the connection is closed we will drop the data here, because we
955
- * can't call the callback multiple times. */
956
- grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
957
- *error = tcp_annotate_error(
958
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Socket closed"), tcp);
959
955
  return true;
960
956
  }
961
957
 
962
- GRPC_STATS_INC_TCP_READ_SIZE(read_bytes);
958
+ grpc_core::global_stats().IncrementTcpReadSize(read_bytes);
963
959
  add_to_estimate(tcp, static_cast<size_t>(read_bytes));
964
960
  GPR_DEBUG_ASSERT((size_t)read_bytes <=
965
961
  tcp->incoming_buffer->length - total_read_bytes);
@@ -1010,8 +1006,8 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
1010
1006
  }
1011
1007
 
1012
1008
  GPR_DEBUG_ASSERT(total_read_bytes > 0);
1013
- *error = GRPC_ERROR_NONE;
1014
- if (tcp->frame_size_tuning_enabled) {
1009
+ *error = absl::OkStatus();
1010
+ if (grpc_core::IsTcpFrameSizeTuningEnabled()) {
1015
1011
  // Update min progress size based on the total number of bytes read in
1016
1012
  // this round.
1017
1013
  tcp->min_progress_size -= total_read_bytes;
@@ -1069,14 +1065,14 @@ static void maybe_make_read_slices(grpc_tcp* tcp)
1069
1065
  extra_wanted -= kBigAlloc;
1070
1066
  grpc_slice_buffer_add_indexed(tcp->incoming_buffer,
1071
1067
  tcp->memory_owner.MakeSlice(kBigAlloc));
1072
- GRPC_STATS_INC_TCP_READ_ALLOC_64K();
1068
+ grpc_core::global_stats().IncrementTcpReadAlloc64k();
1073
1069
  }
1074
1070
  } else {
1075
1071
  while (extra_wanted > 0) {
1076
1072
  extra_wanted -= kSmallAlloc;
1077
1073
  grpc_slice_buffer_add_indexed(
1078
1074
  tcp->incoming_buffer, tcp->memory_owner.MakeSlice(kSmallAlloc));
1079
- GRPC_STATS_INC_TCP_READ_ALLOC_8K();
1075
+ grpc_core::global_stats().IncrementTcpReadAlloc8k();
1080
1076
  }
1081
1077
  }
1082
1078
  maybe_post_reclaimer(tcp);
@@ -1114,11 +1110,11 @@ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error) {
1114
1110
  grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
1115
1111
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1116
1112
  gpr_log(GPR_INFO, "TCP:%p got_read: %s", tcp,
1117
- grpc_error_std_string(error).c_str());
1113
+ grpc_core::StatusToString(error).c_str());
1118
1114
  }
1119
1115
  tcp->read_mu.Lock();
1120
1116
  grpc_error_handle tcp_read_error;
1121
- if (GPR_LIKELY(GRPC_ERROR_IS_NONE(error))) {
1117
+ if (GPR_LIKELY(error.ok())) {
1122
1118
  maybe_make_read_slices(tcp);
1123
1119
  if (!tcp_do_read(tcp, &tcp_read_error)) {
1124
1120
  /* We've consumed the edge, request a new one */
@@ -1129,9 +1125,9 @@ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error) {
1129
1125
  }
1130
1126
  tcp_trace_read(tcp, tcp_read_error);
1131
1127
  } else {
1132
- tcp_read_error = GRPC_ERROR_REF(error);
1133
- grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
1134
- grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
1128
+ tcp_read_error = error;
1129
+ grpc_slice_buffer_reset_and_unref(tcp->incoming_buffer);
1130
+ grpc_slice_buffer_reset_and_unref(&tcp->last_read_buffer);
1135
1131
  }
1136
1132
  grpc_closure* cb = tcp->read_cb;
1137
1133
  tcp->read_cb = nullptr;
@@ -1149,8 +1145,8 @@ static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
1149
1145
  tcp->read_mu.Lock();
1150
1146
  tcp->incoming_buffer = incoming_buffer;
1151
1147
  tcp->min_progress_size =
1152
- tcp->frame_size_tuning_enabled ? min_progress_size : 1;
1153
- grpc_slice_buffer_reset_and_unref_internal(incoming_buffer);
1148
+ grpc_core::IsTcpFrameSizeTuningEnabled() ? min_progress_size : 1;
1149
+ grpc_slice_buffer_reset_and_unref(incoming_buffer);
1154
1150
  grpc_slice_buffer_swap(incoming_buffer, &tcp->last_read_buffer);
1155
1151
  TCP_REF(tcp, "read");
1156
1152
  if (tcp->is_first_read) {
@@ -1175,7 +1171,7 @@ static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
1175
1171
  * bytes or calls notify_on_read() to be notified when new bytes become
1176
1172
  * available */
1177
1173
  grpc_core::Closure::Run(DEBUG_LOCATION, &tcp->read_done_closure,
1178
- GRPC_ERROR_NONE);
1174
+ absl::OkStatus());
1179
1175
  }
1180
1176
  }
1181
1177
 
@@ -1186,7 +1182,7 @@ ssize_t tcp_send(int fd, const struct msghdr* msg, int* saved_errno,
1186
1182
  ssize_t sent_length;
1187
1183
  do {
1188
1184
  /* TODO(klempner): Cork if this is a partial write */
1189
- GRPC_STATS_INC_SYSCALL_WRITE();
1185
+ grpc_core::global_stats().IncrementSyscallWrite();
1190
1186
  sent_length = sendmsg(fd, msg, SENDMSG_FLAGS | additional_flags);
1191
1187
  } while (sent_length < 0 && (*saved_errno = errno) == EINTR);
1192
1188
  return sent_length;
@@ -1277,11 +1273,8 @@ static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
1277
1273
  *sent_length = length;
1278
1274
  /* Only save timestamps if all the bytes were taken by sendmsg. */
1279
1275
  if (sending_length == static_cast<size_t>(length)) {
1280
- gpr_mu_lock(&tcp->tb_mu);
1281
- grpc_core::TracedBuffer::AddNewEntry(
1282
- &tcp->tb_head, static_cast<uint32_t>(tcp->bytes_counter + length),
1283
- tcp->fd, tcp->outgoing_buffer_arg);
1284
- gpr_mu_unlock(&tcp->tb_mu);
1276
+ tcp->tb_list.AddNewEntry(static_cast<uint32_t>(tcp->bytes_counter + length),
1277
+ tcp->fd, tcp->outgoing_buffer_arg);
1285
1278
  tcp->outgoing_buffer_arg = nullptr;
1286
1279
  }
1287
1280
  return true;
@@ -1375,13 +1368,7 @@ struct cmsghdr* process_timestamp(grpc_tcp* tcp, msghdr* msg,
1375
1368
  gpr_log(GPR_ERROR, "Unexpected control message");
1376
1369
  return cmsg;
1377
1370
  }
1378
- /* The error handling can potentially be done on another thread so we need
1379
- * to protect the traced buffer list. A lock free list might be better. Using
1380
- * a simple mutex for now. */
1381
- gpr_mu_lock(&tcp->tb_mu);
1382
- grpc_core::TracedBuffer::ProcessTimestamp(&tcp->tb_head, serr, opt_stats,
1383
- tss);
1384
- gpr_mu_unlock(&tcp->tb_mu);
1371
+ tcp->tb_list.ProcessTimestamp(serr, opt_stats, tss);
1385
1372
  return next_cmsg;
1386
1373
  }
1387
1374
 
@@ -1467,10 +1454,10 @@ static void tcp_handle_error(void* arg /* grpc_tcp */,
1467
1454
  grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
1468
1455
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1469
1456
  gpr_log(GPR_INFO, "TCP:%p got_error: %s", tcp,
1470
- grpc_error_std_string(error).c_str());
1457
+ grpc_core::StatusToString(error).c_str());
1471
1458
  }
1472
1459
 
1473
- if (!GRPC_ERROR_IS_NONE(error) ||
1460
+ if (!error.ok() ||
1474
1461
  static_cast<bool>(gpr_atm_acq_load(&tcp->stop_error_notification))) {
1475
1462
  /* We aren't going to register to hear on error anymore, so it is safe to
1476
1463
  * unref. */
@@ -1519,11 +1506,8 @@ static void tcp_handle_error(void* /*arg*/ /* grpc_tcp */,
1519
1506
  * release operations needed can be performed on the arg */
1520
1507
  void tcp_shutdown_buffer_list(grpc_tcp* tcp) {
1521
1508
  if (tcp->outgoing_buffer_arg) {
1522
- gpr_mu_lock(&tcp->tb_mu);
1523
- grpc_core::TracedBuffer::Shutdown(
1524
- &tcp->tb_head, tcp->outgoing_buffer_arg,
1525
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("TracedBuffer list shutdown"));
1526
- gpr_mu_unlock(&tcp->tb_mu);
1509
+ tcp->tb_list.Shutdown(tcp->outgoing_buffer_arg,
1510
+ GRPC_ERROR_CREATE("TracedBuffer list shutdown"));
1527
1511
  tcp->outgoing_buffer_arg = nullptr;
1528
1512
  }
1529
1513
  }
@@ -1617,8 +1601,8 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
1617
1601
  if (!tried_sending_message) {
1618
1602
  msg.msg_control = nullptr;
1619
1603
  msg.msg_controllen = 0;
1620
- GRPC_STATS_INC_TCP_WRITE_SIZE(sending_length);
1621
- GRPC_STATS_INC_TCP_WRITE_IOV_SIZE(iov_size);
1604
+ grpc_core::global_stats().IncrementTcpWriteSize(sending_length);
1605
+ grpc_core::global_stats().IncrementTcpWriteIovSize(iov_size);
1622
1606
  sent_length = tcp_send(tcp->fd, &msg, &saved_errno, MSG_ZEROCOPY);
1623
1607
  }
1624
1608
  if (tcp->tcp_zerocopy_send_ctx.UpdateZeroCopyOMemStateAfterSend(
@@ -1641,11 +1625,12 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
1641
1625
  return true;
1642
1626
  }
1643
1627
  }
1628
+ grpc_core::EventLog::Append("tcp-write-outstanding", -sent_length);
1644
1629
  tcp->bytes_counter += sent_length;
1645
1630
  record->UpdateOffsetForBytesSent(sending_length,
1646
1631
  static_cast<size_t>(sent_length));
1647
1632
  if (record->AllSlicesSent()) {
1648
- *error = GRPC_ERROR_NONE;
1633
+ *error = absl::OkStatus();
1649
1634
  return true;
1650
1635
  }
1651
1636
  }
@@ -1729,8 +1714,8 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
1729
1714
  msg.msg_control = nullptr;
1730
1715
  msg.msg_controllen = 0;
1731
1716
 
1732
- GRPC_STATS_INC_TCP_WRITE_SIZE(sending_length);
1733
- GRPC_STATS_INC_TCP_WRITE_IOV_SIZE(iov_size);
1717
+ grpc_core::global_stats().IncrementTcpWriteSize(sending_length);
1718
+ grpc_core::global_stats().IncrementTcpWriteIovSize(iov_size);
1734
1719
 
1735
1720
  sent_length = tcp_send(tcp->fd, &msg, &saved_errno);
1736
1721
  }
@@ -1746,18 +1731,19 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
1746
1731
  return false;
1747
1732
  } else if (saved_errno == EPIPE) {
1748
1733
  *error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
1749
- grpc_slice_buffer_reset_and_unref_internal(tcp->outgoing_buffer);
1734
+ grpc_slice_buffer_reset_and_unref(tcp->outgoing_buffer);
1750
1735
  tcp_shutdown_buffer_list(tcp);
1751
1736
  return true;
1752
1737
  } else {
1753
1738
  *error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
1754
- grpc_slice_buffer_reset_and_unref_internal(tcp->outgoing_buffer);
1739
+ grpc_slice_buffer_reset_and_unref(tcp->outgoing_buffer);
1755
1740
  tcp_shutdown_buffer_list(tcp);
1756
1741
  return true;
1757
1742
  }
1758
1743
  }
1759
1744
 
1760
1745
  GPR_ASSERT(tcp->outgoing_byte_idx == 0);
1746
+ grpc_core::EventLog::Append("tcp-write-outstanding", -sent_length);
1761
1747
  tcp->bytes_counter += sent_length;
1762
1748
  trailing = sending_length - static_cast<size_t>(sent_length);
1763
1749
  while (trailing > 0) {
@@ -1774,8 +1760,8 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
1774
1760
  }
1775
1761
  }
1776
1762
  if (outgoing_slice_idx == tcp->outgoing_buffer->count) {
1777
- *error = GRPC_ERROR_NONE;
1778
- grpc_slice_buffer_reset_and_unref_internal(tcp->outgoing_buffer);
1763
+ *error = absl::OkStatus();
1764
+ grpc_slice_buffer_reset_and_unref(tcp->outgoing_buffer);
1779
1765
  return true;
1780
1766
  }
1781
1767
  }
@@ -1786,7 +1772,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
1786
1772
  grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
1787
1773
  grpc_closure* cb;
1788
1774
 
1789
- if (!GRPC_ERROR_IS_NONE(error)) {
1775
+ if (!error.ok()) {
1790
1776
  cb = tcp->write_cb;
1791
1777
  tcp->write_cb = nullptr;
1792
1778
  if (tcp->current_zerocopy_send != nullptr) {
@@ -1794,7 +1780,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
1794
1780
  "handle_write_err");
1795
1781
  tcp->current_zerocopy_send = nullptr;
1796
1782
  }
1797
- grpc_core::Closure::Run(DEBUG_LOCATION, cb, GRPC_ERROR_REF(error));
1783
+ grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
1798
1784
  TCP_UNREF(tcp, "write");
1799
1785
  return;
1800
1786
  }
@@ -1808,13 +1794,13 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
1808
1794
  }
1809
1795
  notify_on_write(tcp);
1810
1796
  // tcp_flush does not populate error if it has returned false.
1811
- GPR_DEBUG_ASSERT(GRPC_ERROR_IS_NONE(error));
1797
+ GPR_DEBUG_ASSERT(error.ok());
1812
1798
  } else {
1813
1799
  cb = tcp->write_cb;
1814
1800
  tcp->write_cb = nullptr;
1815
1801
  tcp->current_zerocopy_send = nullptr;
1816
1802
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1817
- gpr_log(GPR_INFO, "write: %s", grpc_error_std_string(error).c_str());
1803
+ gpr_log(GPR_INFO, "write: %s", grpc_core::StatusToString(error).c_str());
1818
1804
  }
1819
1805
  // No need to take a ref on error since tcp_flush provides a ref.
1820
1806
  grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
@@ -1825,9 +1811,11 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
1825
1811
  static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
1826
1812
  grpc_closure* cb, void* arg, int /*max_frame_size*/) {
1827
1813
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1828
- grpc_error_handle error = GRPC_ERROR_NONE;
1814
+ grpc_error_handle error;
1829
1815
  TcpZerocopySendRecord* zerocopy_send_record = nullptr;
1830
1816
 
1817
+ grpc_core::EventLog::Append("tcp-write-outstanding", buf->length);
1818
+
1831
1819
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1832
1820
  size_t i;
1833
1821
 
@@ -1836,7 +1824,7 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
1836
1824
  if (gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
1837
1825
  char* data =
1838
1826
  grpc_dump_slice(buf->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII);
1839
- gpr_log(GPR_DEBUG, "DATA: %s", data);
1827
+ gpr_log(GPR_DEBUG, "WRITE DATA: %s", data);
1840
1828
  gpr_free(data);
1841
1829
  }
1842
1830
  }
@@ -1849,9 +1837,8 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
1849
1837
  grpc_core::Closure::Run(
1850
1838
  DEBUG_LOCATION, cb,
1851
1839
  grpc_fd_is_shutdown(tcp->em_fd)
1852
- ? tcp_annotate_error(GRPC_ERROR_CREATE_FROM_STATIC_STRING("EOF"),
1853
- tcp)
1854
- : GRPC_ERROR_NONE);
1840
+ ? tcp_annotate_error(GRPC_ERROR_CREATE("EOF"), tcp)
1841
+ : absl::OkStatus());
1855
1842
  tcp_shutdown_buffer_list(tcp);
1856
1843
  return;
1857
1844
  }
@@ -1881,7 +1868,7 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
1881
1868
  notify_on_write(tcp);
1882
1869
  } else {
1883
1870
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1884
- gpr_log(GPR_INFO, "write: %s", grpc_error_std_string(error).c_str());
1871
+ gpr_log(GPR_INFO, "write: %s", grpc_core::StatusToString(error).c_str());
1885
1872
  }
1886
1873
  grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
1887
1874
  }
@@ -1980,7 +1967,6 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
1980
1967
  tcp->socket_ts_enabled = false;
1981
1968
  tcp->ts_capable = true;
1982
1969
  tcp->outgoing_buffer_arg = nullptr;
1983
- tcp->frame_size_tuning_enabled = grpc_core::IsTcpFrameSizeTuningEnabled();
1984
1970
  tcp->min_progress_size = 1;
1985
1971
  if (options.tcp_tx_zero_copy_enabled &&
1986
1972
  !tcp->tcp_zerocopy_send_ctx.memory_limited()) {
@@ -2001,8 +1987,6 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
2001
1987
  gpr_atm_no_barrier_store(&tcp->shutdown_count, 0);
2002
1988
  tcp->em_fd = em_fd;
2003
1989
  grpc_slice_buffer_init(&tcp->last_read_buffer);
2004
- gpr_mu_init(&tcp->tb_mu);
2005
- tcp->tb_head = nullptr;
2006
1990
  GRPC_CLOSURE_INIT(&tcp->read_done_closure, tcp_handle_read, tcp,
2007
1991
  grpc_schedule_on_exec_ctx);
2008
1992
  if (grpc_event_engine_run_in_background()) {
@@ -2055,7 +2039,7 @@ void grpc_tcp_destroy_and_release_fd(grpc_endpoint* ep, int* fd,
2055
2039
  GPR_ASSERT(ep->vtable == &vtable);
2056
2040
  tcp->release_fd = fd;
2057
2041
  tcp->release_fd_cb = done;
2058
- grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
2042
+ grpc_slice_buffer_reset_and_unref(&tcp->last_read_buffer);
2059
2043
  if (grpc_event_engine_can_track_errors()) {
2060
2044
  /* Stop errors notification. */
2061
2045
  ZerocopyDisableAndWaitForRemaining(tcp);