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
@@ -279,7 +279,16 @@ void TransportFlowControl::UpdateSetting(
279
279
  grpc_chttp2_settings_parameters[id].max_value);
280
280
  if (new_desired_value != *desired_value) {
281
281
  *desired_value = new_desired_value;
282
- (action->*set)(FlowControlAction::Urgency::QUEUE_UPDATE, *desired_value);
282
+ // Reaching zero can only happen for initial window size, and if it occurs
283
+ // we really want to wake up writes and ensure all the queued stream
284
+ // window updates are flushed, since stream flow control operates
285
+ // differently at zero window size.
286
+ FlowControlAction::Urgency urgency =
287
+ FlowControlAction::Urgency::QUEUE_UPDATE;
288
+ if (new_desired_value == 0) {
289
+ urgency = FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
290
+ }
291
+ (action->*set)(urgency, *desired_value);
283
292
  }
284
293
  } else {
285
294
  int64_t delta = new_desired_value - *desired_value;
@@ -287,7 +296,8 @@ void TransportFlowControl::UpdateSetting(
287
296
  if (delta != 0 &&
288
297
  (delta <= -*desired_value / 5 || delta >= *desired_value / 5)) {
289
298
  *desired_value = new_desired_value;
290
- (action->*set)(FlowControlAction::Urgency::QUEUE_UPDATE, *desired_value);
299
+ (action->*set)(FlowControlAction::Urgency::QUEUE_UPDATE,
300
+ static_cast<uint32_t>(*desired_value));
291
301
  }
292
302
  }
293
303
  }
@@ -362,15 +372,15 @@ FlowControlAction TransportFlowControl::PeriodicUpdate() {
362
372
 
363
373
  uint32_t StreamFlowControl::MaybeSendUpdate() {
364
374
  TransportFlowControl::IncomingUpdateContext tfc_upd(tfc_);
365
- const uint32_t announce = DesiredAnnounceSize();
375
+ const int64_t announce = DesiredAnnounceSize();
366
376
  pending_size_ = absl::nullopt;
367
377
  tfc_upd.UpdateAnnouncedWindowDelta(&announced_window_delta_, announce);
368
378
  GPR_ASSERT(DesiredAnnounceSize() == 0);
369
379
  tfc_upd.MakeAction();
370
- return announce;
380
+ return static_cast<uint32_t>(announce);
371
381
  }
372
382
 
373
- uint32_t StreamFlowControl::DesiredAnnounceSize() const {
383
+ int64_t StreamFlowControl::DesiredAnnounceSize() const {
374
384
  int64_t desired_window_delta = [this]() {
375
385
  if (min_progress_size_ == 0) {
376
386
  if (pending_size_.has_value() &&
@@ -390,13 +400,34 @@ uint32_t StreamFlowControl::DesiredAnnounceSize() const {
390
400
  FlowControlAction StreamFlowControl::UpdateAction(FlowControlAction action) {
391
401
  const int64_t desired_announce_size = DesiredAnnounceSize();
392
402
  if (desired_announce_size > 0) {
393
- if ((min_progress_size_ > 0 && announced_window_delta_ <= 0) ||
394
- desired_announce_size >= 8192) {
395
- action.set_send_stream_update(
396
- FlowControlAction::Urgency::UPDATE_IMMEDIATELY);
397
- } else {
398
- action.set_send_stream_update(FlowControlAction::Urgency::QUEUE_UPDATE);
403
+ FlowControlAction::Urgency urgency =
404
+ FlowControlAction::Urgency::QUEUE_UPDATE;
405
+ // Size at which we probably want to wake up and write regardless of whether
406
+ // we *have* to.
407
+ // Currently set at half the initial window size or 8kb (whichever is
408
+ // greater). 8kb means we don't send rapidly unnecessarily when the initial
409
+ // window size is small.
410
+ const int64_t hurry_up_size =
411
+ std::max(static_cast<int64_t>(tfc_->sent_init_window()) / 2,
412
+ static_cast<int64_t>(8192));
413
+ if (desired_announce_size > hurry_up_size) {
414
+ urgency = FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
415
+ }
416
+ // min_progress_size_ > 0 means we have a reader ready to read.
417
+ if (min_progress_size_ > 0) {
418
+ // If we're into initial window to receive that data we should wake up and
419
+ // send an update.
420
+ if (announced_window_delta_ < 0) {
421
+ urgency = FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
422
+ } else if (announced_window_delta_ == 0 &&
423
+ tfc_->sent_init_window() == 0) {
424
+ // Special case when initial window size is zero, meaning that
425
+ // announced_window_delta cannot become negative (it may already be so
426
+ // however).
427
+ urgency = FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
428
+ }
399
429
  }
430
+ action.set_send_stream_update(urgency);
400
431
  }
401
432
  return action;
402
433
  }
@@ -236,6 +236,7 @@ class TransportFlowControl final {
236
236
  BdpEstimator* bdp_estimator() { return &bdp_estimator_; }
237
237
 
238
238
  uint32_t acked_init_window() const { return acked_init_window_; }
239
+ uint32_t sent_init_window() const { return target_initial_window_size_; }
239
240
 
240
241
  void SetAckedInitialWindow(uint32_t value) { acked_init_window_ = value; }
241
242
 
@@ -319,7 +320,7 @@ class StreamFlowControl final {
319
320
  absl::Status RecvData(int64_t incoming_frame_size);
320
321
 
321
322
  // the application is asking for a certain amount of bytes
322
- void SetMinProgressSize(uint32_t min_progress_size) {
323
+ void SetMinProgressSize(int64_t min_progress_size) {
323
324
  sfc_->min_progress_size_ = min_progress_size;
324
325
  }
325
326
 
@@ -356,7 +357,7 @@ class StreamFlowControl final {
356
357
 
357
358
  int64_t remote_window_delta() const { return remote_window_delta_; }
358
359
  int64_t announced_window_delta() const { return announced_window_delta_; }
359
- uint32_t min_progress_size() const { return min_progress_size_; }
360
+ int64_t min_progress_size() const { return min_progress_size_; }
360
361
 
361
362
  private:
362
363
  TransportFlowControl* const tfc_;
@@ -366,7 +367,7 @@ class StreamFlowControl final {
366
367
  absl::optional<int64_t> pending_size_;
367
368
 
368
369
  FlowControlAction UpdateAction(FlowControlAction action);
369
- uint32_t DesiredAnnounceSize() const;
370
+ int64_t DesiredAnnounceSize() const;
370
371
  };
371
372
 
372
373
  class TestOnlyTransportTargetWindowEstimatesMocker {
@@ -29,8 +29,9 @@
29
29
  #include <grpc/support/log.h>
30
30
 
31
31
  #include "src/core/ext/transport/chttp2/transport/internal.h"
32
+ #include "src/core/lib/gprpp/status_helper.h"
33
+ #include "src/core/lib/slice/slice.h"
32
34
  #include "src/core/lib/slice/slice_buffer.h"
33
- #include "src/core/lib/slice/slice_refcount.h"
34
35
  #include "src/core/lib/transport/transport.h"
35
36
 
36
37
  absl::Status grpc_chttp2_data_parser_begin_frame(uint8_t flags,
@@ -80,10 +81,10 @@ void grpc_chttp2_encode_data(uint32_t id, grpc_slice_buffer* inbuf,
80
81
  }
81
82
 
82
83
  grpc_core::Poll<grpc_error_handle> grpc_deframe_unprocessed_incoming_frames(
83
- grpc_chttp2_stream* s, uint32_t* min_progress_size,
84
+ grpc_chttp2_stream* s, int64_t* min_progress_size,
84
85
  grpc_core::SliceBuffer* stream_out, uint32_t* message_flags) {
85
86
  grpc_slice_buffer* slices = &s->frame_storage;
86
- grpc_error_handle error = GRPC_ERROR_NONE;
87
+ grpc_error_handle error;
87
88
 
88
89
  if (slices->length < 5) {
89
90
  if (min_progress_size != nullptr) *min_progress_size = 5 - slices->length;
@@ -103,17 +104,17 @@ grpc_core::Poll<grpc_error_handle> grpc_deframe_unprocessed_incoming_frames(
103
104
  }
104
105
  break;
105
106
  default:
106
- error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
107
+ error = GRPC_ERROR_CREATE(
107
108
  absl::StrFormat("Bad GRPC frame type 0x%02x", header[0]));
108
- error = grpc_error_set_int(error, GRPC_ERROR_INT_STREAM_ID,
109
+ error = grpc_error_set_int(error, grpc_core::StatusIntProperty::kStreamId,
109
110
  static_cast<intptr_t>(s->id));
110
111
  return error;
111
112
  }
112
113
 
113
- uint64_t length = (static_cast<uint32_t>(header[1]) << 24) |
114
- (static_cast<uint32_t>(header[2]) << 16) |
115
- (static_cast<uint32_t>(header[3]) << 8) |
116
- static_cast<uint32_t>(header[4]);
114
+ size_t length = (static_cast<uint32_t>(header[1]) << 24) |
115
+ (static_cast<uint32_t>(header[2]) << 16) |
116
+ (static_cast<uint32_t>(header[3]) << 8) |
117
+ static_cast<uint32_t>(header[4]);
117
118
 
118
119
  if (slices->length < length + 5) {
119
120
  if (min_progress_size != nullptr) {
@@ -131,7 +132,7 @@ grpc_core::Poll<grpc_error_handle> grpc_deframe_unprocessed_incoming_frames(
131
132
  grpc_slice_buffer_move_first(slices, length, stream_out->c_slice_buffer());
132
133
  }
133
134
 
134
- return GRPC_ERROR_NONE;
135
+ return absl::OkStatus();
135
136
  }
136
137
 
137
138
  grpc_error_handle grpc_chttp2_data_parser_parse(void* /*parser*/,
@@ -139,17 +140,17 @@ grpc_error_handle grpc_chttp2_data_parser_parse(void* /*parser*/,
139
140
  grpc_chttp2_stream* s,
140
141
  const grpc_slice& slice,
141
142
  int is_last) {
142
- grpc_slice_ref_internal(slice);
143
+ grpc_core::CSliceRef(slice);
143
144
  grpc_slice_buffer_add(&s->frame_storage, slice);
144
145
  grpc_chttp2_maybe_complete_recv_message(t, s);
145
146
 
146
147
  if (is_last && s->received_last_frame) {
147
148
  grpc_chttp2_mark_stream_closed(
148
149
  t, s, true, false,
149
- t->is_client ? GRPC_ERROR_CREATE_FROM_STATIC_STRING(
150
- "Data frame with END_STREAM flag received")
151
- : GRPC_ERROR_NONE);
150
+ t->is_client
151
+ ? GRPC_ERROR_CREATE("Data frame with END_STREAM flag received")
152
+ : absl::OkStatus());
152
153
  }
153
154
 
154
- return GRPC_ERROR_NONE;
155
+ return absl::OkStatus();
155
156
  }
@@ -54,7 +54,7 @@ void grpc_chttp2_encode_data(uint32_t id, grpc_slice_buffer* inbuf,
54
54
  grpc_slice_buffer* outbuf);
55
55
 
56
56
  grpc_core::Poll<grpc_error_handle> grpc_deframe_unprocessed_incoming_frames(
57
- grpc_chttp2_stream* s, uint32_t* min_progress_size,
57
+ grpc_chttp2_stream* s, int64_t* min_progress_size,
58
58
  grpc_core::SliceBuffer* stream_out, uint32_t* message_flags);
59
59
 
60
60
  #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_DATA_H */
@@ -23,6 +23,7 @@
23
23
  #include <string.h>
24
24
 
25
25
  #include "absl/base/attributes.h"
26
+ #include "absl/status/status.h"
26
27
  #include "absl/strings/str_format.h"
27
28
  #include "absl/strings/string_view.h"
28
29
 
@@ -43,7 +44,7 @@ void grpc_chttp2_goaway_parser_destroy(grpc_chttp2_goaway_parser* p) {
43
44
  grpc_error_handle grpc_chttp2_goaway_parser_begin_frame(
44
45
  grpc_chttp2_goaway_parser* p, uint32_t length, uint8_t /*flags*/) {
45
46
  if (length < 8) {
46
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
47
+ return GRPC_ERROR_CREATE(
47
48
  absl::StrFormat("goaway frame too short (%d bytes)", length));
48
49
  }
49
50
 
@@ -52,7 +53,7 @@ grpc_error_handle grpc_chttp2_goaway_parser_begin_frame(
52
53
  p->debug_data = static_cast<char*>(gpr_malloc(p->debug_length));
53
54
  p->debug_pos = 0;
54
55
  p->state = GRPC_CHTTP2_GOAWAY_LSI0;
55
- return GRPC_ERROR_NONE;
56
+ return absl::OkStatus();
56
57
  }
57
58
 
58
59
  grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
@@ -70,7 +71,7 @@ grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
70
71
  case GRPC_CHTTP2_GOAWAY_LSI0:
71
72
  if (cur == end) {
72
73
  p->state = GRPC_CHTTP2_GOAWAY_LSI0;
73
- return GRPC_ERROR_NONE;
74
+ return absl::OkStatus();
74
75
  }
75
76
  p->last_stream_id = (static_cast<uint32_t>(*cur)) << 24;
76
77
  ++cur;
@@ -78,7 +79,7 @@ grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
78
79
  case GRPC_CHTTP2_GOAWAY_LSI1:
79
80
  if (cur == end) {
80
81
  p->state = GRPC_CHTTP2_GOAWAY_LSI1;
81
- return GRPC_ERROR_NONE;
82
+ return absl::OkStatus();
82
83
  }
83
84
  p->last_stream_id |= (static_cast<uint32_t>(*cur)) << 16;
84
85
  ++cur;
@@ -86,7 +87,7 @@ grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
86
87
  case GRPC_CHTTP2_GOAWAY_LSI2:
87
88
  if (cur == end) {
88
89
  p->state = GRPC_CHTTP2_GOAWAY_LSI2;
89
- return GRPC_ERROR_NONE;
90
+ return absl::OkStatus();
90
91
  }
91
92
  p->last_stream_id |= (static_cast<uint32_t>(*cur)) << 8;
92
93
  ++cur;
@@ -94,7 +95,7 @@ grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
94
95
  case GRPC_CHTTP2_GOAWAY_LSI3:
95
96
  if (cur == end) {
96
97
  p->state = GRPC_CHTTP2_GOAWAY_LSI3;
97
- return GRPC_ERROR_NONE;
98
+ return absl::OkStatus();
98
99
  }
99
100
  p->last_stream_id |= (static_cast<uint32_t>(*cur));
100
101
  ++cur;
@@ -102,7 +103,7 @@ grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
102
103
  case GRPC_CHTTP2_GOAWAY_ERR0:
103
104
  if (cur == end) {
104
105
  p->state = GRPC_CHTTP2_GOAWAY_ERR0;
105
- return GRPC_ERROR_NONE;
106
+ return absl::OkStatus();
106
107
  }
107
108
  p->error_code = (static_cast<uint32_t>(*cur)) << 24;
108
109
  ++cur;
@@ -110,7 +111,7 @@ grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
110
111
  case GRPC_CHTTP2_GOAWAY_ERR1:
111
112
  if (cur == end) {
112
113
  p->state = GRPC_CHTTP2_GOAWAY_ERR1;
113
- return GRPC_ERROR_NONE;
114
+ return absl::OkStatus();
114
115
  }
115
116
  p->error_code |= (static_cast<uint32_t>(*cur)) << 16;
116
117
  ++cur;
@@ -118,7 +119,7 @@ grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
118
119
  case GRPC_CHTTP2_GOAWAY_ERR2:
119
120
  if (cur == end) {
120
121
  p->state = GRPC_CHTTP2_GOAWAY_ERR2;
121
- return GRPC_ERROR_NONE;
122
+ return absl::OkStatus();
122
123
  }
123
124
  p->error_code |= (static_cast<uint32_t>(*cur)) << 8;
124
125
  ++cur;
@@ -126,7 +127,7 @@ grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
126
127
  case GRPC_CHTTP2_GOAWAY_ERR3:
127
128
  if (cur == end) {
128
129
  p->state = GRPC_CHTTP2_GOAWAY_ERR3;
129
- return GRPC_ERROR_NONE;
130
+ return absl::OkStatus();
130
131
  }
131
132
  p->error_code |= (static_cast<uint32_t>(*cur));
132
133
  ++cur;
@@ -146,10 +147,9 @@ grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
146
147
  gpr_free(p->debug_data);
147
148
  p->debug_data = nullptr;
148
149
  }
149
- return GRPC_ERROR_NONE;
150
+ return absl::OkStatus();
150
151
  }
151
- GPR_UNREACHABLE_CODE(
152
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Should never reach here"));
152
+ GPR_UNREACHABLE_CODE(return GRPC_ERROR_CREATE("Should never reach here"));
153
153
  }
154
154
 
155
155
  void grpc_chttp2_goaway_append(uint32_t last_stream_id, uint32_t error_code,
@@ -24,6 +24,7 @@
24
24
 
25
25
  #include <algorithm>
26
26
 
27
+ #include "absl/status/status.h"
27
28
  #include "absl/strings/str_format.h"
28
29
 
29
30
  #include <grpc/support/alloc.h>
@@ -63,13 +64,13 @@ grpc_slice grpc_chttp2_ping_create(uint8_t ack, uint64_t opaque_8bytes) {
63
64
  grpc_error_handle grpc_chttp2_ping_parser_begin_frame(
64
65
  grpc_chttp2_ping_parser* parser, uint32_t length, uint8_t flags) {
65
66
  if (flags & 0xfe || length != 8) {
66
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
67
+ return GRPC_ERROR_CREATE(
67
68
  absl::StrFormat("invalid ping: length=%d, flags=%02x", length, flags));
68
69
  }
69
70
  parser->byte = 0;
70
71
  parser->is_ack = flags;
71
72
  parser->opaque_8bytes = 0;
72
- return GRPC_ERROR_NONE;
73
+ return absl::OkStatus();
73
74
  }
74
75
 
75
76
  grpc_error_handle grpc_chttp2_ping_parser_parse(void* parser,
@@ -128,7 +129,7 @@ grpc_error_handle grpc_chttp2_ping_parser_parse(void* parser,
128
129
  }
129
130
  }
130
131
 
131
- return GRPC_ERROR_NONE;
132
+ return absl::OkStatus();
132
133
  }
133
134
 
134
135
  void grpc_set_disable_ping_ack(bool disable_ping_ack) {
@@ -22,6 +22,7 @@
22
22
 
23
23
  #include <stddef.h>
24
24
 
25
+ #include "absl/status/status.h"
25
26
  #include "absl/strings/str_cat.h"
26
27
  #include "absl/strings/str_format.h"
27
28
 
@@ -32,6 +33,7 @@
32
33
  #include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
33
34
  #include "src/core/ext/transport/chttp2/transport/internal.h"
34
35
  #include "src/core/lib/debug/trace.h"
36
+ #include "src/core/lib/gprpp/status_helper.h"
35
37
  #include "src/core/lib/transport/http2_errors.h"
36
38
  #include "src/core/lib/transport/metadata_batch.h"
37
39
 
@@ -75,11 +77,11 @@ void grpc_chttp2_add_rst_stream_to_next_write(
75
77
  grpc_error_handle grpc_chttp2_rst_stream_parser_begin_frame(
76
78
  grpc_chttp2_rst_stream_parser* parser, uint32_t length, uint8_t flags) {
77
79
  if (length != 4) {
78
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
80
+ return GRPC_ERROR_CREATE(absl::StrFormat(
79
81
  "invalid rst_stream: length=%d, flags=%02x", length, flags));
80
82
  }
81
83
  parser->byte = 0;
82
- return GRPC_ERROR_NONE;
84
+ return absl::OkStatus();
83
85
  }
84
86
 
85
87
  grpc_error_handle grpc_chttp2_rst_stream_parser_parse(void* parser,
@@ -111,17 +113,18 @@ grpc_error_handle grpc_chttp2_rst_stream_parser_parse(void* parser,
111
113
  "[chttp2 transport=%p stream=%p] received RST_STREAM(reason=%d)",
112
114
  t, s, reason);
113
115
  }
114
- grpc_error_handle error = GRPC_ERROR_NONE;
116
+ grpc_error_handle error;
115
117
  if (reason != GRPC_HTTP2_NO_ERROR || s->trailing_metadata_buffer.empty()) {
116
118
  error = grpc_error_set_int(
117
119
  grpc_error_set_str(
118
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("RST_STREAM"),
119
- GRPC_ERROR_STR_GRPC_MESSAGE,
120
+ GRPC_ERROR_CREATE("RST_STREAM"),
121
+ grpc_core::StatusStrProperty::kGrpcMessage,
120
122
  absl::StrCat("Received RST_STREAM with error code ", reason)),
121
- GRPC_ERROR_INT_HTTP2_ERROR, static_cast<intptr_t>(reason));
123
+ grpc_core::StatusIntProperty::kHttp2Error,
124
+ static_cast<intptr_t>(reason));
122
125
  }
123
126
  grpc_chttp2_mark_stream_closed(t, s, true, true, error);
124
127
  }
125
128
 
126
- return GRPC_ERROR_NONE;
129
+ return absl::OkStatus();
127
130
  }
@@ -25,6 +25,7 @@
25
25
  #include <string>
26
26
 
27
27
  #include "absl/base/attributes.h"
28
+ #include "absl/status/status.h"
28
29
  #include "absl/strings/str_format.h"
29
30
 
30
31
  #include <grpc/slice_buffer.h>
@@ -102,18 +103,15 @@ grpc_error_handle grpc_chttp2_settings_parser_begin_frame(
102
103
  if (flags == GRPC_CHTTP2_FLAG_ACK) {
103
104
  parser->is_ack = 1;
104
105
  if (length != 0) {
105
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
106
- "non-empty settings ack frame received");
106
+ return GRPC_ERROR_CREATE("non-empty settings ack frame received");
107
107
  }
108
- return GRPC_ERROR_NONE;
108
+ return absl::OkStatus();
109
109
  } else if (flags != 0) {
110
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
111
- "invalid flags on settings frame");
110
+ return GRPC_ERROR_CREATE("invalid flags on settings frame");
112
111
  } else if (length % 6 != 0) {
113
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
114
- "settings frames must be a multiple of six bytes");
112
+ return GRPC_ERROR_CREATE("settings frames must be a multiple of six bytes");
115
113
  } else {
116
- return GRPC_ERROR_NONE;
114
+ return absl::OkStatus();
117
115
  }
118
116
  }
119
117
 
@@ -129,7 +127,7 @@ grpc_error_handle grpc_chttp2_settings_parser_parse(void* p,
129
127
  grpc_chttp2_setting_id id;
130
128
 
131
129
  if (parser->is_ack) {
132
- return GRPC_ERROR_NONE;
130
+ return absl::OkStatus();
133
131
  }
134
132
 
135
133
  for (;;) {
@@ -147,11 +145,11 @@ grpc_error_handle grpc_chttp2_settings_parser_parse(void* p,
147
145
  if (t->notify_on_receive_settings != nullptr) {
148
146
  grpc_core::ExecCtx::Run(DEBUG_LOCATION,
149
147
  t->notify_on_receive_settings,
150
- GRPC_ERROR_NONE);
148
+ absl::OkStatus());
151
149
  t->notify_on_receive_settings = nullptr;
152
150
  }
153
151
  }
154
- return GRPC_ERROR_NONE;
152
+ return absl::OkStatus();
155
153
  }
156
154
  parser->id = static_cast<uint16_t>((static_cast<uint16_t>(*cur)) << 8);
157
155
  cur++;
@@ -159,7 +157,7 @@ grpc_error_handle grpc_chttp2_settings_parser_parse(void* p,
159
157
  case GRPC_CHTTP2_SPS_ID1:
160
158
  if (cur == end) {
161
159
  parser->state = GRPC_CHTTP2_SPS_ID1;
162
- return GRPC_ERROR_NONE;
160
+ return absl::OkStatus();
163
161
  }
164
162
  parser->id = static_cast<uint16_t>(parser->id | (*cur));
165
163
  cur++;
@@ -167,7 +165,7 @@ grpc_error_handle grpc_chttp2_settings_parser_parse(void* p,
167
165
  case GRPC_CHTTP2_SPS_VAL0:
168
166
  if (cur == end) {
169
167
  parser->state = GRPC_CHTTP2_SPS_VAL0;
170
- return GRPC_ERROR_NONE;
168
+ return absl::OkStatus();
171
169
  }
172
170
  parser->value = (static_cast<uint32_t>(*cur)) << 24;
173
171
  cur++;
@@ -175,7 +173,7 @@ grpc_error_handle grpc_chttp2_settings_parser_parse(void* p,
175
173
  case GRPC_CHTTP2_SPS_VAL1:
176
174
  if (cur == end) {
177
175
  parser->state = GRPC_CHTTP2_SPS_VAL1;
178
- return GRPC_ERROR_NONE;
176
+ return absl::OkStatus();
179
177
  }
180
178
  parser->value |= (static_cast<uint32_t>(*cur)) << 16;
181
179
  cur++;
@@ -183,7 +181,7 @@ grpc_error_handle grpc_chttp2_settings_parser_parse(void* p,
183
181
  case GRPC_CHTTP2_SPS_VAL2:
184
182
  if (cur == end) {
185
183
  parser->state = GRPC_CHTTP2_SPS_VAL2;
186
- return GRPC_ERROR_NONE;
184
+ return absl::OkStatus();
187
185
  }
188
186
  parser->value |= (static_cast<uint32_t>(*cur)) << 8;
189
187
  cur++;
@@ -191,7 +189,7 @@ grpc_error_handle grpc_chttp2_settings_parser_parse(void* p,
191
189
  case GRPC_CHTTP2_SPS_VAL3:
192
190
  if (cur == end) {
193
191
  parser->state = GRPC_CHTTP2_SPS_VAL3;
194
- return GRPC_ERROR_NONE;
192
+ return absl::OkStatus();
195
193
  } else {
196
194
  parser->state = GRPC_CHTTP2_SPS_ID0;
197
195
  }
@@ -212,7 +210,7 @@ grpc_error_handle grpc_chttp2_settings_parser_parse(void* p,
212
210
  t->last_new_stream_id, sp->error_value,
213
211
  grpc_slice_from_static_string("HTTP2 settings error"),
214
212
  &t->qbuf);
215
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
213
+ return GRPC_ERROR_CREATE(absl::StrFormat(
216
214
  "invalid value %u passed for %s", parser->value, sp->name));
217
215
  }
218
216
  }
@@ -22,6 +22,7 @@
22
22
 
23
23
  #include <stddef.h>
24
24
 
25
+ #include "absl/status/status.h"
25
26
  #include "absl/strings/str_cat.h"
26
27
  #include "absl/strings/str_format.h"
27
28
 
@@ -59,12 +60,12 @@ grpc_slice grpc_chttp2_window_update_create(
59
60
  grpc_error_handle grpc_chttp2_window_update_parser_begin_frame(
60
61
  grpc_chttp2_window_update_parser* parser, uint32_t length, uint8_t flags) {
61
62
  if (flags || length != 4) {
62
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
63
+ return GRPC_ERROR_CREATE(absl::StrFormat(
63
64
  "invalid window update: length=%d, flags=%02x", length, flags));
64
65
  }
65
66
  parser->byte = 0;
66
67
  parser->amount = 0;
67
- return GRPC_ERROR_NONE;
68
+ return absl::OkStatus();
68
69
  }
69
70
 
70
71
  grpc_error_handle grpc_chttp2_window_update_parser_parse(
@@ -90,7 +91,7 @@ grpc_error_handle grpc_chttp2_window_update_parser_parse(
90
91
  // top bit is reserved and must be ignored.
91
92
  uint32_t received_update = p->amount & 0x7fffffffu;
92
93
  if (received_update == 0) {
93
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
94
+ return GRPC_ERROR_CREATE(
94
95
  absl::StrCat("invalid window update bytes: ", p->amount));
95
96
  }
96
97
  GPR_ASSERT(is_last);
@@ -117,5 +118,5 @@ grpc_error_handle grpc_chttp2_window_update_parser_parse(
117
118
  }
118
119
  }
119
120
 
120
- return GRPC_ERROR_NONE;
121
+ return absl::OkStatus();
121
122
  }
@@ -22,7 +22,6 @@
22
22
 
23
23
  #include <algorithm>
24
24
  #include <cstdint>
25
- #include <memory>
26
25
 
27
26
  #include <grpc/slice.h>
28
27
  #include <grpc/slice_buffer.h>
@@ -319,7 +318,7 @@ void HPackCompressor::SliceIndex::EmitTo(absl::string_view key,
319
318
  auto& table = framer->compressor_->table_;
320
319
  using It = std::vector<ValueIndex>::iterator;
321
320
  It prev = values_.end();
322
- uint32_t transport_length =
321
+ size_t transport_length =
323
322
  key.length() + value.length() + hpack_constants::kEntryOverhead;
324
323
  if (transport_length > HPackEncoderTable::MaxEntrySize()) {
325
324
  framer->EmitLitHdrWithNonBinaryStringKeyNotIdx(Slice::FromStaticString(key),
@@ -482,7 +481,7 @@ void HPackCompressor::Framer::Encode(HttpMethodMetadata,
482
481
  void HPackCompressor::Framer::EncodeAlwaysIndexed(uint32_t* index,
483
482
  absl::string_view key,
484
483
  Slice value,
485
- uint32_t transport_length) {
484
+ size_t transport_length) {
486
485
  if (compressor_->table_.ConvertableToDynamicIndex(*index)) {
487
486
  EmitIndexed(compressor_->table_.DynamicIndex(*index));
488
487
  } else {
@@ -579,7 +578,7 @@ void HPackCompressor::Framer::Encode(GrpcStatusMetadata,
579
578
  }
580
579
  Slice key = Slice::FromStaticString(GrpcStatusMetadata::key());
581
580
  Slice value = Slice::FromInt64(code);
582
- const uint32_t transport_length =
581
+ const size_t transport_length =
583
582
  key.length() + value.length() + hpack_constants::kEntryOverhead;
584
583
  if (index != nullptr) {
585
584
  *index = compressor_->table_.AllocateIndex(transport_length);
@@ -601,7 +600,7 @@ void HPackCompressor::Framer::Encode(GrpcEncodingMetadata,
601
600
  }
602
601
  auto key = Slice::FromStaticString(GrpcEncodingMetadata::key());
603
602
  auto encoded_value = GrpcEncodingMetadata::Encode(value);
604
- uint32_t transport_length =
603
+ size_t transport_length =
605
604
  key.length() + encoded_value.length() + hpack_constants::kEntryOverhead;
606
605
  if (index != nullptr) {
607
606
  *index = compressor_->table_.AllocateIndex(transport_length);
@@ -625,7 +624,7 @@ void HPackCompressor::Framer::Encode(GrpcAcceptEncodingMetadata,
625
624
  }
626
625
  auto key = Slice::FromStaticString(GrpcAcceptEncodingMetadata::key());
627
626
  auto encoded_value = GrpcAcceptEncodingMetadata::Encode(value);
628
- uint32_t transport_length =
627
+ size_t transport_length =
629
628
  key.length() + encoded_value.length() + hpack_constants::kEntryOverhead;
630
629
  compressor_->grpc_accept_encoding_index_ =
631
630
  compressor_->table_.AllocateIndex(transport_length);
@@ -150,7 +150,7 @@ class HPackCompressor {
150
150
  Slice value_slice);
151
151
 
152
152
  void EncodeAlwaysIndexed(uint32_t* index, absl::string_view key,
153
- Slice value, uint32_t transport_length);
153
+ Slice value, size_t transport_length);
154
154
  void EncodeIndexedKeyWithBinaryValue(uint32_t* index, absl::string_view key,
155
155
  Slice value);
156
156
 
@@ -60,7 +60,8 @@ bool HPackEncoderTable::SetMaxSize(uint32_t max_table_size) {
60
60
  hpack_constants::EntriesForBytes(max_table_size);
61
61
  // TODO(ctiller): integrate with ResourceQuota to rebuild smaller when we can.
62
62
  if (max_table_elems > elem_size_.size()) {
63
- Rebuild(std::max(max_table_elems, 2 * elem_size_.size()));
63
+ Rebuild(static_cast<uint32_t>(
64
+ std::max(max_table_elems, 2 * elem_size_.size())));
64
65
  }
65
66
  return true;
66
67
  }