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
@@ -22,6 +22,7 @@
22
22
 
23
23
  #include <grpc/support/log.h>
24
24
 
25
+ #include "src/core/lib/gprpp/sync.h"
25
26
  #include "src/core/lib/iomgr/port.h"
26
27
 
27
28
  #ifdef GRPC_LINUX_ERRQUEUE
@@ -29,72 +30,70 @@
29
30
  #include <string.h>
30
31
  #include <time.h>
31
32
 
32
- #include "src/core/lib/gprpp/memory.h"
33
-
34
33
  namespace grpc_core {
35
34
  namespace {
36
- /** Fills gpr_timespec gts based on values from timespec ts */
37
- void fill_gpr_from_timestamp(gpr_timespec* gts, const struct timespec* ts) {
35
+ // Fills gpr_timespec gts based on values from timespec ts.
36
+ void FillGprFromTimestamp(gpr_timespec* gts, const struct timespec* ts) {
38
37
  gts->tv_sec = ts->tv_sec;
39
38
  gts->tv_nsec = static_cast<int32_t>(ts->tv_nsec);
40
39
  gts->clock_type = GPR_CLOCK_REALTIME;
41
40
  }
42
41
 
43
- void default_timestamps_callback(void* /*arg*/, Timestamps* /*ts*/,
44
- grpc_error_handle /*shudown_err*/) {
42
+ void DefaultTimestampsCallback(void* /*arg*/, Timestamps* /*ts*/,
43
+ absl::Status /*shudown_err*/) {
45
44
  gpr_log(GPR_DEBUG, "Timestamps callback has not been registered");
46
45
  }
47
46
 
48
- /** The saved callback function that will be invoked when we get all the
49
- * timestamps that we are going to get for a TracedBuffer. */
50
- void (*timestamps_callback)(void*, Timestamps*,
51
- grpc_error_handle shutdown_err) =
52
- default_timestamps_callback;
47
+ // The saved callback function that will be invoked when we get all the
48
+ // timestamps that we are going to get for a TracedBuffer.
49
+ void (*g_timestamps_callback)(void*, Timestamps*,
50
+ grpc_error_handle shutdown_err) =
51
+ DefaultTimestampsCallback;
53
52
 
54
- /* Used to extract individual opt stats from cmsg, so as to avoid troubles with
55
- * unaligned reads */
53
+ // Used to extract individual opt stats from cmsg, so as to avoid troubles with
54
+ // unaligned reads.
56
55
  template <typename T>
57
- T read_unaligned(const void* ptr) {
56
+ T ReadUnaligned(const void* ptr) {
58
57
  T val;
59
58
  memcpy(&val, ptr, sizeof(val));
60
59
  return val;
61
60
  }
62
61
 
63
- /* Extracts opt stats from the tcp_info struct \a info to \a metrics */
64
- void extract_opt_stats_from_tcp_info(ConnectionMetrics* metrics,
65
- const tcp_info* info) {
62
+ // Extracts opt stats from the tcp_info struct \a info to \a metrics
63
+ void ExtractOptStatsFromTcpInfo(ConnectionMetrics* metrics,
64
+ const tcp_info* info) {
66
65
  if (info == nullptr) {
67
66
  return;
68
67
  }
69
68
  if (info->length > offsetof(tcp_info, tcpi_sndbuf_limited)) {
70
- metrics->recurring_retrans.emplace(info->tcpi_retransmits);
71
- metrics->is_delivery_rate_app_limited.emplace(
72
- info->tcpi_delivery_rate_app_limited);
73
- metrics->congestion_window.emplace(info->tcpi_snd_cwnd);
74
- metrics->reordering.emplace(info->tcpi_reordering);
75
- metrics->packet_retx.emplace(info->tcpi_total_retrans);
76
- metrics->pacing_rate.emplace(info->tcpi_pacing_rate);
77
- metrics->data_notsent.emplace(info->tcpi_notsent_bytes);
69
+ metrics->recurring_retrans = info->tcpi_retransmits;
70
+ metrics->is_delivery_rate_app_limited =
71
+ info->tcpi_delivery_rate_app_limited;
72
+ metrics->congestion_window = info->tcpi_snd_cwnd;
73
+ metrics->reordering = info->tcpi_reordering;
74
+ metrics->packet_retx = info->tcpi_total_retrans;
75
+ metrics->pacing_rate = info->tcpi_pacing_rate;
76
+ metrics->data_notsent = info->tcpi_notsent_bytes;
78
77
  if (info->tcpi_min_rtt != UINT32_MAX) {
79
- metrics->min_rtt.emplace(info->tcpi_min_rtt);
78
+ metrics->min_rtt = info->tcpi_min_rtt;
80
79
  }
81
- metrics->packet_sent.emplace(info->tcpi_data_segs_out);
82
- metrics->delivery_rate.emplace(info->tcpi_delivery_rate);
83
- metrics->busy_usec.emplace(info->tcpi_busy_time);
84
- metrics->rwnd_limited_usec.emplace(info->tcpi_rwnd_limited);
85
- metrics->sndbuf_limited_usec.emplace(info->tcpi_sndbuf_limited);
80
+ metrics->packet_sent = info->tcpi_data_segs_out;
81
+ metrics->delivery_rate = info->tcpi_delivery_rate;
82
+ metrics->busy_usec = info->tcpi_busy_time;
83
+ metrics->rwnd_limited_usec = info->tcpi_rwnd_limited;
84
+ metrics->sndbuf_limited_usec = info->tcpi_sndbuf_limited;
86
85
  }
87
86
  if (info->length > offsetof(tcp_info, tcpi_dsack_dups)) {
88
- metrics->data_sent.emplace(info->tcpi_bytes_sent);
89
- metrics->data_retx.emplace(info->tcpi_bytes_retrans);
90
- metrics->packet_spurious_retx.emplace(info->tcpi_dsack_dups);
87
+ metrics->data_sent = info->tcpi_bytes_sent;
88
+ metrics->data_retx = info->tcpi_bytes_retrans;
89
+ metrics->packet_spurious_retx = info->tcpi_dsack_dups;
91
90
  }
92
91
  }
93
92
 
94
- /** Extracts opt stats from the given control message \a opt_stats to the
95
- * connection metrics \a metrics */
96
- void extract_opt_stats_from_cmsg(ConnectionMetrics* metrics,
97
- const cmsghdr* opt_stats) {
93
+ // Extracts opt stats from the given control message \a opt_stats to the
94
+ // connection metrics \a metrics.
95
+ void ExtractOptStatsFromCmsg(ConnectionMetrics* metrics,
96
+ const cmsghdr* opt_stats) {
98
97
  if (opt_stats == nullptr) {
99
98
  return;
100
99
  }
@@ -108,80 +107,79 @@ void extract_opt_stats_from_cmsg(ConnectionMetrics* metrics,
108
107
  const void* val = data + offset + NLA_HDRLEN;
109
108
  switch (attr->nla_type) {
110
109
  case TCP_NLA_BUSY: {
111
- metrics->busy_usec.emplace(read_unaligned<uint64_t>(val));
110
+ metrics->busy_usec = ReadUnaligned<uint64_t>(val);
112
111
  break;
113
112
  }
114
113
  case TCP_NLA_RWND_LIMITED: {
115
- metrics->rwnd_limited_usec.emplace(read_unaligned<uint64_t>(val));
114
+ metrics->rwnd_limited_usec = ReadUnaligned<uint64_t>(val);
116
115
  break;
117
116
  }
118
117
  case TCP_NLA_SNDBUF_LIMITED: {
119
- metrics->sndbuf_limited_usec.emplace(read_unaligned<uint64_t>(val));
118
+ metrics->sndbuf_limited_usec = ReadUnaligned<uint64_t>(val);
120
119
  break;
121
120
  }
122
121
  case TCP_NLA_PACING_RATE: {
123
- metrics->pacing_rate.emplace(read_unaligned<uint64_t>(val));
122
+ metrics->pacing_rate = ReadUnaligned<uint64_t>(val);
124
123
  break;
125
124
  }
126
125
  case TCP_NLA_DELIVERY_RATE: {
127
- metrics->delivery_rate.emplace(read_unaligned<uint64_t>(val));
126
+ metrics->delivery_rate = ReadUnaligned<uint64_t>(val);
128
127
  break;
129
128
  }
130
129
  case TCP_NLA_DELIVERY_RATE_APP_LMT: {
131
- metrics->is_delivery_rate_app_limited.emplace(
132
- read_unaligned<uint8_t>(val));
130
+ metrics->is_delivery_rate_app_limited = ReadUnaligned<uint8_t>(val);
133
131
  break;
134
132
  }
135
133
  case TCP_NLA_SND_CWND: {
136
- metrics->congestion_window.emplace(read_unaligned<uint32_t>(val));
134
+ metrics->congestion_window = ReadUnaligned<uint32_t>(val);
137
135
  break;
138
136
  }
139
137
  case TCP_NLA_MIN_RTT: {
140
- metrics->min_rtt.emplace(read_unaligned<uint32_t>(val));
138
+ metrics->min_rtt = ReadUnaligned<uint32_t>(val);
141
139
  break;
142
140
  }
143
141
  case TCP_NLA_SRTT: {
144
- metrics->srtt.emplace(read_unaligned<uint32_t>(val));
142
+ metrics->srtt = ReadUnaligned<uint32_t>(val);
145
143
  break;
146
144
  }
147
145
  case TCP_NLA_RECUR_RETRANS: {
148
- metrics->recurring_retrans.emplace(read_unaligned<uint8_t>(val));
146
+ metrics->recurring_retrans = ReadUnaligned<uint8_t>(val);
149
147
  break;
150
148
  }
151
149
  case TCP_NLA_BYTES_SENT: {
152
- metrics->data_sent.emplace(read_unaligned<uint64_t>(val));
150
+ metrics->data_sent = ReadUnaligned<uint64_t>(val);
153
151
  break;
154
152
  }
155
153
  case TCP_NLA_DATA_SEGS_OUT: {
156
- metrics->packet_sent.emplace(read_unaligned<uint64_t>(val));
154
+ metrics->packet_sent = ReadUnaligned<uint64_t>(val);
157
155
  break;
158
156
  }
159
157
  case TCP_NLA_TOTAL_RETRANS: {
160
- metrics->packet_retx.emplace(read_unaligned<uint64_t>(val));
158
+ metrics->packet_retx = ReadUnaligned<uint64_t>(val);
161
159
  break;
162
160
  }
163
161
  case TCP_NLA_DELIVERED: {
164
- metrics->packet_delivered.emplace(read_unaligned<uint32_t>(val));
162
+ metrics->packet_delivered = ReadUnaligned<uint32_t>(val);
165
163
  break;
166
164
  }
167
165
  case TCP_NLA_DELIVERED_CE: {
168
- metrics->packet_delivered_ce.emplace(read_unaligned<uint32_t>(val));
166
+ metrics->packet_delivered_ce = ReadUnaligned<uint32_t>(val);
169
167
  break;
170
168
  }
171
169
  case TCP_NLA_BYTES_RETRANS: {
172
- metrics->data_retx.emplace(read_unaligned<uint64_t>(val));
170
+ metrics->data_retx = ReadUnaligned<uint64_t>(val);
173
171
  break;
174
172
  }
175
173
  case TCP_NLA_DSACK_DUPS: {
176
- metrics->packet_spurious_retx.emplace(read_unaligned<uint32_t>(val));
174
+ metrics->packet_spurious_retx = ReadUnaligned<uint32_t>(val);
177
175
  break;
178
176
  }
179
177
  case TCP_NLA_REORDERING: {
180
- metrics->reordering.emplace(read_unaligned<uint32_t>(val));
178
+ metrics->reordering = ReadUnaligned<uint32_t>(val);
181
179
  break;
182
180
  }
183
181
  case TCP_NLA_SND_SSTHRESH: {
184
- metrics->snd_ssthresh.emplace(read_unaligned<uint32_t>(val));
182
+ metrics->snd_ssthresh = ReadUnaligned<uint32_t>(val);
185
183
  break;
186
184
  }
187
185
  }
@@ -189,75 +187,68 @@ void extract_opt_stats_from_cmsg(ConnectionMetrics* metrics,
189
187
  }
190
188
  }
191
189
 
192
- int get_socket_tcp_info(tcp_info* info, int fd) {
190
+ int GetSocketTcpInfo(struct tcp_info* info, int fd) {
193
191
  memset(info, 0, sizeof(*info));
194
192
  info->length = offsetof(tcp_info, length);
195
193
  return getsockopt(fd, IPPROTO_TCP, TCP_INFO, info, &(info->length));
196
194
  }
197
- } /* namespace */
198
195
 
199
- void TracedBuffer::AddNewEntry(TracedBuffer** head, uint32_t seq_no, int fd,
200
- void* arg) {
201
- GPR_DEBUG_ASSERT(head != nullptr);
196
+ } // namespace.
197
+
198
+ void TracedBufferList::AddNewEntry(int32_t seq_no, int fd, void* arg) {
202
199
  TracedBuffer* new_elem = new TracedBuffer(seq_no, arg);
203
- /* Store the current time as the sendmsg time. */
200
+ // Store the current time as the sendmsg time.
204
201
  new_elem->ts_.sendmsg_time.time = gpr_now(GPR_CLOCK_REALTIME);
205
202
  new_elem->ts_.scheduled_time.time = gpr_inf_past(GPR_CLOCK_REALTIME);
206
203
  new_elem->ts_.sent_time.time = gpr_inf_past(GPR_CLOCK_REALTIME);
207
204
  new_elem->ts_.acked_time.time = gpr_inf_past(GPR_CLOCK_REALTIME);
208
-
209
- if (get_socket_tcp_info(&new_elem->ts_.info, fd) == 0) {
210
- extract_opt_stats_from_tcp_info(&new_elem->ts_.sendmsg_time.metrics,
211
- &new_elem->ts_.info);
205
+ if (GetSocketTcpInfo(&(new_elem->ts_.info), fd) == 0) {
206
+ ExtractOptStatsFromTcpInfo(&(new_elem->ts_.sendmsg_time.metrics),
207
+ &(new_elem->ts_.info));
212
208
  }
213
- if (*head == nullptr) {
214
- *head = new_elem;
215
- return;
209
+ MutexLock lock(&mu_);
210
+ if (!head_) {
211
+ head_ = tail_ = new_elem;
212
+ } else {
213
+ tail_->next_ = new_elem;
214
+ tail_ = new_elem;
216
215
  }
217
- /* Append at the end. */
218
- TracedBuffer* ptr = *head;
219
- while (ptr->next_ != nullptr) {
220
- ptr = ptr->next_;
221
- }
222
- ptr->next_ = new_elem;
223
216
  }
224
217
 
225
- void TracedBuffer::ProcessTimestamp(TracedBuffer** head,
226
- struct sock_extended_err* serr,
227
- struct cmsghdr* opt_stats,
228
- struct scm_timestamping* tss) {
229
- GPR_DEBUG_ASSERT(head != nullptr);
230
- TracedBuffer* elem = *head;
231
- TracedBuffer* next = nullptr;
218
+ void TracedBufferList::ProcessTimestamp(struct sock_extended_err* serr,
219
+ struct cmsghdr* opt_stats,
220
+ struct scm_timestamping* tss) {
221
+ MutexLock lock(&mu_);
222
+ TracedBuffer* elem = head_;
232
223
  while (elem != nullptr) {
233
- /* The byte number refers to the sequence number of the last byte which this
234
- * timestamp relates to. */
224
+ // The byte number refers to the sequence number of the last byte which this
225
+ // timestamp relates to.
235
226
  if (serr->ee_data >= elem->seq_no_) {
236
227
  switch (serr->ee_info) {
237
228
  case SCM_TSTAMP_SCHED:
238
- fill_gpr_from_timestamp(&(elem->ts_.scheduled_time.time),
239
- &(tss->ts[0]));
240
- extract_opt_stats_from_cmsg(&(elem->ts_.scheduled_time.metrics),
241
- opt_stats);
229
+ FillGprFromTimestamp(&(elem->ts_.scheduled_time.time), &(tss->ts[0]));
230
+ ExtractOptStatsFromCmsg(&(elem->ts_.scheduled_time.metrics),
231
+ opt_stats);
242
232
  elem = elem->next_;
243
233
  break;
244
234
  case SCM_TSTAMP_SND:
245
- fill_gpr_from_timestamp(&(elem->ts_.sent_time.time), &(tss->ts[0]));
246
- extract_opt_stats_from_cmsg(&(elem->ts_.sent_time.metrics),
247
- opt_stats);
235
+ FillGprFromTimestamp(&(elem->ts_.sent_time.time), &(tss->ts[0]));
236
+ ExtractOptStatsFromCmsg(&(elem->ts_.sent_time.metrics), opt_stats);
248
237
  elem = elem->next_;
249
238
  break;
250
239
  case SCM_TSTAMP_ACK:
251
- fill_gpr_from_timestamp(&(elem->ts_.acked_time.time), &(tss->ts[0]));
252
- extract_opt_stats_from_cmsg(&(elem->ts_.acked_time.metrics),
253
- opt_stats);
254
- /* Got all timestamps. Do the callback and free this TracedBuffer.
255
- * The thing below can be passed by value if we don't want the
256
- * restriction on the lifetime. */
257
- timestamps_callback(elem->arg_, &(elem->ts_), GRPC_ERROR_NONE);
258
- next = elem->next_;
259
- delete static_cast<TracedBuffer*>(elem);
260
- *head = elem = next;
240
+ FillGprFromTimestamp(&(elem->ts_.acked_time.time), &(tss->ts[0]));
241
+ ExtractOptStatsFromCmsg(&(elem->ts_.acked_time.metrics), opt_stats);
242
+ // Got all timestamps. Do the callback and free this TracedBuffer. The
243
+ // thing below can be passed by value if we don't want the restriction
244
+ // on the lifetime.
245
+ g_timestamps_callback(elem->arg_, &(elem->ts_), absl::OkStatus());
246
+ // Safe to update head_ to elem->next_ because the list is ordered by
247
+ // seq_no. Thus if elem is to be deleted, it has to be the first
248
+ // element in the list.
249
+ head_ = elem->next_;
250
+ delete elem;
251
+ elem = head_;
261
252
  break;
262
253
  default:
263
254
  abort();
@@ -266,28 +257,26 @@ void TracedBuffer::ProcessTimestamp(TracedBuffer** head,
266
257
  break;
267
258
  }
268
259
  }
260
+ tail_ = !head_ ? head_ : tail_;
269
261
  }
270
262
 
271
- void TracedBuffer::Shutdown(TracedBuffer** head, void* remaining,
272
- grpc_error_handle shutdown_err) {
273
- GPR_DEBUG_ASSERT(head != nullptr);
274
- TracedBuffer* elem = *head;
275
- while (elem != nullptr) {
276
- timestamps_callback(elem->arg_, &(elem->ts_), shutdown_err);
277
- auto* next = elem->next_;
263
+ void TracedBufferList::Shutdown(void* remaining, absl::Status shutdown_err) {
264
+ MutexLock lock(&mu_);
265
+ while (head_) {
266
+ TracedBuffer* elem = head_;
267
+ g_timestamps_callback(elem->arg_, &(elem->ts_), shutdown_err);
268
+ head_ = head_->next_;
278
269
  delete elem;
279
- elem = next;
280
270
  }
281
- *head = nullptr;
282
271
  if (remaining != nullptr) {
283
- timestamps_callback(remaining, nullptr, shutdown_err);
272
+ g_timestamps_callback(remaining, nullptr, shutdown_err);
284
273
  }
285
- GRPC_ERROR_UNREF(shutdown_err);
274
+ tail_ = head_;
286
275
  }
287
276
 
288
277
  void grpc_tcp_set_write_timestamps_callback(
289
278
  void (*fn)(void*, Timestamps*, grpc_error_handle error)) {
290
- timestamps_callback = fn;
279
+ g_timestamps_callback = fn;
291
280
  }
292
281
  } /* namespace grpc_core */
293
282
 
@@ -302,6 +291,6 @@ void grpc_tcp_set_write_timestamps_callback(
302
291
  (void)fn;
303
292
  gpr_log(GPR_DEBUG, "Timestamps callback is not enabled for this platform");
304
293
  }
305
- } /* namespace grpc_core */
294
+ } // namespace grpc_core
306
295
 
307
296
  #endif /* GRPC_LINUX_ERRQUEUE */
@@ -25,7 +25,7 @@
25
25
 
26
26
  #include <grpc/support/time.h>
27
27
 
28
- #include "src/core/lib/gprpp/memory.h"
28
+ #include "src/core/lib/gprpp/sync.h"
29
29
  #include "src/core/lib/iomgr/error.h"
30
30
  #include "src/core/lib/iomgr/internal_errqueue.h"
31
31
  #include "src/core/lib/iomgr/port.h"
@@ -100,56 +100,72 @@ struct Timestamps {
100
100
  #endif /* GRPC_LINUX_ERRQUEUE */
101
101
  };
102
102
 
103
- /** TracedBuffer is a class to keep track of timestamps for a specific buffer in
104
- * the TCP layer. We are only tracking timestamps for Linux kernels and hence
105
- * this class would only be used by Linux platforms. For all other platforms,
106
- * TracedBuffer would be an empty class.
107
- *
108
- * The timestamps collected are according to Timestamps declared
109
- * above.
110
- *
111
- * A TracedBuffer list is kept track of using the head element of the list. If
112
- * the head element of the list is nullptr, then the list is empty.
113
- */
103
+ // TracedBuffer is a class to keep track of timestamps for a specific buffer in
104
+ // the TCP layer. We are only tracking timestamps for Linux kernels and hence
105
+ // this class would only be used by Linux platforms. For all other platforms,
106
+ // TracedBuffer would be an empty class.
107
+ // The timestamps collected are according to Timestamps declared above A
108
+ // TracedBuffer list is kept track of using the head element of the list. If
109
+ // *the head element of the list is nullptr, then the list is empty.
114
110
  #ifdef GRPC_LINUX_ERRQUEUE
115
- class TracedBuffer {
111
+
112
+ class TracedBufferList {
116
113
  public:
117
- /** Use AddNewEntry function instead of using this directly. */
118
- TracedBuffer(uint32_t seq_no, void* arg)
119
- : seq_no_(seq_no), arg_(arg), next_(nullptr) {}
120
-
121
- /** Add a new entry in the TracedBuffer list pointed to by head. Also saves
122
- * sendmsg_time with the current timestamp. */
123
- static void AddNewEntry(TracedBuffer** head, uint32_t seq_no, int fd,
124
- void* arg);
125
-
126
- /** Processes a received timestamp based on sock_extended_err and
127
- * scm_timestamping structures. It will invoke the timestamps callback if the
128
- * timestamp type is SCM_TSTAMP_ACK. */
129
- static void ProcessTimestamp(TracedBuffer** head,
130
- struct sock_extended_err* serr,
131
- struct cmsghdr* opt_stats,
132
- struct scm_timestamping* tss);
133
-
134
- /** Cleans the list by calling the callback for each traced buffer in the list
135
- * with timestamps that it has. */
136
- static void Shutdown(TracedBuffer** head, void* remaining,
137
- grpc_error_handle shutdown_err);
114
+ // Add a new entry in the TracedBuffer list pointed to by head. Also saves
115
+ // sendmsg_time with the current timestamp.
116
+ void AddNewEntry(int32_t seq_no, int fd, void* arg);
117
+ // Processes a received timestamp based on sock_extended_err and
118
+ // scm_timestamping structures. It will invoke the timestamps callback if the
119
+ // timestamp type is SCM_TSTAMP_ACK.
120
+ void ProcessTimestamp(struct sock_extended_err* serr,
121
+ struct cmsghdr* opt_stats,
122
+ struct scm_timestamping* tss);
123
+ // The Size() operation is slow and is used only in tests.
124
+ int Size() {
125
+ MutexLock lock(&mu_);
126
+ int size = 0;
127
+ TracedBuffer* curr = head_;
128
+ while (curr) {
129
+ ++size;
130
+ curr = curr->next_;
131
+ }
132
+ return size;
133
+ }
134
+ // Cleans the list by calling the callback for each traced buffer in the list
135
+ // with timestamps that it has.
136
+ void Shutdown(void* /*remaining*/, absl::Status /*shutdown_err*/);
138
137
 
139
138
  private:
140
- uint32_t seq_no_; /* The sequence number for the last byte in the buffer */
141
- void* arg_; /* The arg to pass to timestamps_callback */
142
- Timestamps ts_; /* The timestamps corresponding to this buffer */
143
- TracedBuffer* next_; /* The next TracedBuffer in the list */
139
+ class TracedBuffer {
140
+ public:
141
+ TracedBuffer(uint32_t seq_no, void* arg) : seq_no_(seq_no), arg_(arg) {}
142
+
143
+ private:
144
+ friend class TracedBufferList;
145
+ TracedBuffer* next_ = nullptr;
146
+ uint32_t seq_no_; /* The sequence number for the last byte in the buffer */
147
+ void* arg_; /* The arg to pass to timestamps_callback */
148
+ Timestamps ts_; /* The timestamps corresponding to this buffer */
149
+ };
150
+ Mutex mu_;
151
+ // TracedBuffers are ordered by sequence number and would need to be processed
152
+ // in a FIFO order starting with the smallest sequence number. To enable this,
153
+ // they are stored in a singly linked with head and tail pointers which allows
154
+ // easy appends and forward iteration operations.
155
+ TracedBuffer* head_ = nullptr;
156
+ TracedBuffer* tail_ = nullptr;
144
157
  };
158
+
145
159
  #else /* GRPC_LINUX_ERRQUEUE */
146
- class TracedBuffer {
160
+ // TracedBufferList implementation is a no-op for this platform.
161
+ class TracedBufferList {
147
162
  public:
148
- /* Phony shutdown function */
149
- static void Shutdown(TracedBuffer** /*head*/, void* /*remaining*/,
150
- grpc_error_handle shutdown_err) {
151
- GRPC_ERROR_UNREF(shutdown_err);
152
- }
163
+ void AddNewEntry(int32_t /*seq_no*/, int /*fd*/, void* /*arg*/) {}
164
+ void ProcessTimestamp(struct sock_extended_err* /*serr*/,
165
+ struct cmsghdr* /*opt_stats*/,
166
+ struct scm_timestamping* /*tss*/) {}
167
+ int Size() { return 0; }
168
+ void Shutdown(void* /*remaining*/, absl::Status /*shutdown_err*/) {}
153
169
  };
154
170
  #endif /* GRPC_LINUX_ERRQUEUE */
155
171
 
@@ -25,6 +25,7 @@
25
25
  #include <grpc/support/log.h>
26
26
 
27
27
  #include "src/core/lib/debug/stats.h"
28
+ #include "src/core/lib/debug/stats_data.h"
28
29
 
29
30
  namespace grpc_core {
30
31
 
@@ -39,7 +40,7 @@ grpc_error_handle DecodeCancelStateError(gpr_atm cancel_state) {
39
40
  if (cancel_state & kErrorBit) {
40
41
  return internal::StatusGetFromHeapPtr(cancel_state & ~kErrorBit);
41
42
  }
42
- return GRPC_ERROR_NONE;
43
+ return absl::OkStatus();
43
44
  }
44
45
 
45
46
  } // namespace
@@ -81,7 +82,7 @@ void CallCombiner::TsanClosure(void* arg, grpc_error_handle error) {
81
82
  } else {
82
83
  lock.reset();
83
84
  }
84
- Closure::Run(DEBUG_LOCATION, self->original_closure_, GRPC_ERROR_REF(error));
85
+ Closure::Run(DEBUG_LOCATION, self->original_closure_, error);
85
86
  if (lock != nullptr) {
86
87
  TSAN_ANNOTATE_RWLOCK_RELEASED(&lock->taken, true);
87
88
  bool prev = true;
@@ -117,7 +118,7 @@ void CallCombiner::Start(grpc_closure* closure, grpc_error_handle error,
117
118
  "==> CallCombiner::Start() [%p] closure=%p [" DEBUG_FMT_STR
118
119
  "%s] error=%s",
119
120
  this, closure DEBUG_FMT_ARGS, reason,
120
- grpc_error_std_string(error).c_str());
121
+ StatusToString(error).c_str());
121
122
  }
122
123
  size_t prev_size =
123
124
  static_cast<size_t>(gpr_atm_full_fetch_add(&size_, (gpr_atm)1));
@@ -175,7 +176,7 @@ void CallCombiner::Stop(DEBUG_ARGS const char* reason) {
175
176
  closure->error_data.error = 0;
176
177
  if (GRPC_TRACE_FLAG_ENABLED(grpc_call_combiner_trace)) {
177
178
  gpr_log(GPR_INFO, " EXECUTING FROM QUEUE: closure=%p error=%s",
178
- closure, grpc_error_std_string(error).c_str());
179
+ closure, StatusToString(error).c_str());
179
180
  }
180
181
  ScheduleClosure(closure, error);
181
182
  break;
@@ -192,14 +193,14 @@ void CallCombiner::SetNotifyOnCancel(grpc_closure* closure) {
192
193
  grpc_error_handle original_error = DecodeCancelStateError(original_state);
193
194
  // If error is set, invoke the cancellation closure immediately.
194
195
  // Otherwise, store the new closure.
195
- if (!GRPC_ERROR_IS_NONE(original_error)) {
196
+ if (!original_error.ok()) {
196
197
  if (GRPC_TRACE_FLAG_ENABLED(grpc_call_combiner_trace)) {
197
198
  gpr_log(GPR_INFO,
198
199
  "call_combiner=%p: scheduling notify_on_cancel callback=%p "
199
200
  "for pre-existing cancellation",
200
201
  this, closure);
201
202
  }
202
- ExecCtx::Run(DEBUG_LOCATION, closure, GRPC_ERROR_REF(original_error));
203
+ ExecCtx::Run(DEBUG_LOCATION, closure, original_error);
203
204
  break;
204
205
  } else {
205
206
  if (gpr_atm_full_cas(&cancel_state_, original_state,
@@ -209,7 +210,7 @@ void CallCombiner::SetNotifyOnCancel(grpc_closure* closure) {
209
210
  this, closure);
210
211
  }
211
212
  // If we replaced an earlier closure, invoke the original
212
- // closure with GRPC_ERROR_NONE. This allows callers to clean
213
+ // closure with absl::OkStatus(). This allows callers to clean
213
214
  // up any resources they may be holding for the callback.
214
215
  if (original_state != 0) {
215
216
  closure = reinterpret_cast<grpc_closure*>(original_state);
@@ -218,7 +219,7 @@ void CallCombiner::SetNotifyOnCancel(grpc_closure* closure) {
218
219
  "call_combiner=%p: scheduling old cancel callback=%p", this,
219
220
  closure);
220
221
  }
221
- ExecCtx::Run(DEBUG_LOCATION, closure, GRPC_ERROR_NONE);
222
+ ExecCtx::Run(DEBUG_LOCATION, closure, absl::OkStatus());
222
223
  }
223
224
  break;
224
225
  }
@@ -233,7 +234,7 @@ void CallCombiner::Cancel(grpc_error_handle error) {
233
234
  while (true) {
234
235
  gpr_atm original_state = gpr_atm_acq_load(&cancel_state_);
235
236
  grpc_error_handle original_error = DecodeCancelStateError(original_state);
236
- if (!GRPC_ERROR_IS_NONE(original_error)) {
237
+ if (!original_error.ok()) {
237
238
  internal::StatusFreeHeapPtr(status_ptr);
238
239
  break;
239
240
  }
@@ -246,7 +247,7 @@ void CallCombiner::Cancel(grpc_error_handle error) {
246
247
  "call_combiner=%p: scheduling notify_on_cancel callback=%p",
247
248
  this, notify_on_cancel);
248
249
  }
249
- ExecCtx::Run(DEBUG_LOCATION, notify_on_cancel, GRPC_ERROR_REF(error));
250
+ ExecCtx::Run(DEBUG_LOCATION, notify_on_cancel, error);
250
251
  }
251
252
  break;
252
253
  }
@@ -80,7 +80,7 @@ class CallCombiner {
80
80
  /// once; this allows the closure to hold references that will be freed
81
81
  /// regardless of whether or not the call was cancelled. If a cancellation
82
82
  /// does occur, the closure will be scheduled with the cancellation error;
83
- /// otherwise, it will be scheduled with GRPC_ERROR_NONE.
83
+ /// otherwise, it will be scheduled with absl::OkStatus().
84
84
  ///
85
85
  /// The closure will be scheduled in the following cases:
86
86
  /// - If Cancel() was called prior to registering the closure, it will be
@@ -89,7 +89,7 @@ class CallCombiner {
89
89
  /// be scheduled with the cancellation error.
90
90
  /// - If SetNotifyOnCancel() is called again to register a new cancellation
91
91
  /// closure, the previous cancellation closure will be scheduled with
92
- /// GRPC_ERROR_NONE.
92
+ /// absl::OkStatus().
93
93
  ///
94
94
  /// If \a closure is NULL, then no closure will be invoked on
95
95
  /// cancellation; this effectively unregisters the previously set closure.
@@ -173,8 +173,7 @@ class CallCombinerClosureList {
173
173
  "CallCombinerClosureList executing closure while already "
174
174
  "holding call_combiner %p: closure=%p error=%s reason=%s",
175
175
  call_combiner, closures_[0].closure,
176
- grpc_error_std_string(closures_[0].error).c_str(),
177
- closures_[0].reason);
176
+ StatusToString(closures_[0].error).c_str(), closures_[0].reason);
178
177
  }
179
178
  // This will release the call combiner.
180
179
  ExecCtx::Run(DEBUG_LOCATION, closures_[0].closure, closures_[0].error);