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
@@ -18,18 +18,10 @@
18
18
 
19
19
  #include "src/core/ext/filters/message_size/message_size_filter.h"
20
20
 
21
- #include <algorithm>
22
- #include <map>
23
21
  #include <new>
24
- #include <string>
25
- #include <utility>
26
- #include <vector>
27
22
 
28
- #include "absl/memory/memory.h"
29
23
  #include "absl/status/status.h"
30
- #include "absl/strings/str_cat.h"
31
24
  #include "absl/strings/str_format.h"
32
- #include "absl/types/optional.h"
33
25
 
34
26
  #include <grpc/impl/codegen/grpc_types.h>
35
27
  #include <grpc/status.h>
@@ -39,8 +31,8 @@
39
31
  #include "src/core/lib/channel/channel_stack.h"
40
32
  #include "src/core/lib/channel/channel_stack_builder.h"
41
33
  #include "src/core/lib/config/core_configuration.h"
42
- #include "src/core/lib/gpr/string.h"
43
34
  #include "src/core/lib/gprpp/debug_location.h"
35
+ #include "src/core/lib/gprpp/status_helper.h"
44
36
  #include "src/core/lib/iomgr/call_combiner.h"
45
37
  #include "src/core/lib/iomgr/closure.h"
46
38
  #include "src/core/lib/iomgr/error.h"
@@ -71,64 +63,59 @@ const MessageSizeParsedConfig* MessageSizeParsedConfig::GetFromCallContext(
71
63
  svc_cfg_call_data->GetMethodParsedConfig(service_config_parser_index));
72
64
  }
73
65
 
66
+ MessageSizeParsedConfig MessageSizeParsedConfig::GetFromChannelArgs(
67
+ const ChannelArgs& channel_args) {
68
+ MessageSizeParsedConfig limits;
69
+ limits.max_send_size_ = GetMaxSendSizeFromChannelArgs(channel_args);
70
+ limits.max_recv_size_ = GetMaxRecvSizeFromChannelArgs(channel_args);
71
+ return limits;
72
+ }
73
+
74
+ absl::optional<uint32_t> GetMaxRecvSizeFromChannelArgs(
75
+ const ChannelArgs& args) {
76
+ if (args.WantMinimalStack()) return absl::nullopt;
77
+ int size = args.GetInt(GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH)
78
+ .value_or(GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH);
79
+ if (size < 0) return absl::nullopt;
80
+ return static_cast<uint32_t>(size);
81
+ }
82
+
83
+ absl::optional<uint32_t> GetMaxSendSizeFromChannelArgs(
84
+ const ChannelArgs& args) {
85
+ if (args.WantMinimalStack()) return absl::nullopt;
86
+ int size = args.GetInt(GRPC_ARG_MAX_SEND_MESSAGE_LENGTH)
87
+ .value_or(GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH);
88
+ if (size < 0) return absl::nullopt;
89
+ return static_cast<uint32_t>(size);
90
+ }
91
+
92
+ const JsonLoaderInterface* MessageSizeParsedConfig::JsonLoader(
93
+ const JsonArgs&) {
94
+ static const auto* loader =
95
+ JsonObjectLoader<MessageSizeParsedConfig>()
96
+ .OptionalField("maxRequestMessageBytes",
97
+ &MessageSizeParsedConfig::max_send_size_)
98
+ .OptionalField("maxResponseMessageBytes",
99
+ &MessageSizeParsedConfig::max_recv_size_)
100
+ .Finish();
101
+ return loader;
102
+ }
103
+
74
104
  //
75
105
  // MessageSizeParser
76
106
  //
77
107
 
78
- absl::StatusOr<std::unique_ptr<ServiceConfigParser::ParsedConfig>>
108
+ std::unique_ptr<ServiceConfigParser::ParsedConfig>
79
109
  MessageSizeParser::ParsePerMethodParams(const ChannelArgs& /*args*/,
80
- const Json& json) {
81
- std::vector<grpc_error_handle> error_list;
82
- // Max request size.
83
- int max_request_message_bytes = -1;
84
- auto it = json.object_value().find("maxRequestMessageBytes");
85
- if (it != json.object_value().end()) {
86
- if (it->second.type() != Json::Type::STRING &&
87
- it->second.type() != Json::Type::NUMBER) {
88
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
89
- "field:maxRequestMessageBytes error:should be of type number"));
90
- } else {
91
- max_request_message_bytes =
92
- gpr_parse_nonnegative_int(it->second.string_value().c_str());
93
- if (max_request_message_bytes == -1) {
94
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
95
- "field:maxRequestMessageBytes error:should be non-negative"));
96
- }
97
- }
98
- }
99
- // Max response size.
100
- int max_response_message_bytes = -1;
101
- it = json.object_value().find("maxResponseMessageBytes");
102
- if (it != json.object_value().end()) {
103
- if (it->second.type() != Json::Type::STRING &&
104
- it->second.type() != Json::Type::NUMBER) {
105
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
106
- "field:maxResponseMessageBytes error:should be of type number"));
107
- } else {
108
- max_response_message_bytes =
109
- gpr_parse_nonnegative_int(it->second.string_value().c_str());
110
- if (max_response_message_bytes == -1) {
111
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
112
- "field:maxResponseMessageBytes error:should be non-negative"));
113
- }
114
- }
115
- }
116
- if (!error_list.empty()) {
117
- grpc_error_handle error =
118
- GRPC_ERROR_CREATE_FROM_VECTOR("Message size parser", &error_list);
119
- absl::Status status = absl::InvalidArgumentError(
120
- absl::StrCat("error parsing message size method parameters: ",
121
- grpc_error_std_string(error)));
122
- GRPC_ERROR_UNREF(error);
123
- return status;
124
- }
125
- return absl::make_unique<MessageSizeParsedConfig>(max_request_message_bytes,
126
- max_response_message_bytes);
110
+ const Json& json,
111
+ ValidationErrors* errors) {
112
+ return LoadFromJson<std::unique_ptr<MessageSizeParsedConfig>>(
113
+ json, JsonArgs(), errors);
127
114
  }
128
115
 
129
116
  void MessageSizeParser::Register(CoreConfiguration::Builder* builder) {
130
117
  builder->service_config_parser()->RegisterParser(
131
- absl::make_unique<MessageSizeParser>());
118
+ std::make_unique<MessageSizeParser>());
132
119
  }
133
120
 
134
121
  size_t MessageSizeParser::ParserIndex() {
@@ -136,23 +123,11 @@ size_t MessageSizeParser::ParserIndex() {
136
123
  parser_name());
137
124
  }
138
125
 
139
- int GetMaxRecvSizeFromChannelArgs(const ChannelArgs& args) {
140
- if (args.WantMinimalStack()) return -1;
141
- return std::max(-1, args.GetInt(GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH)
142
- .value_or(GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH));
143
- }
144
-
145
- int GetMaxSendSizeFromChannelArgs(const ChannelArgs& args) {
146
- if (args.WantMinimalStack()) return -1;
147
- return std::max(-1, args.GetInt(GRPC_ARG_MAX_SEND_MESSAGE_LENGTH)
148
- .value_or(GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH));
149
- }
150
-
151
126
  } // namespace grpc_core
152
127
 
153
128
  namespace {
154
129
  struct channel_data {
155
- grpc_core::MessageSizeParsedConfig::message_size_limits limits;
130
+ grpc_core::MessageSizeParsedConfig limits;
156
131
  const size_t service_config_parser_index{
157
132
  grpc_core::MessageSizeParser::ParserIndex()};
158
133
  };
@@ -170,34 +145,37 @@ struct call_data {
170
145
  // Note: Per-method config is only available on the client, so we
171
146
  // apply the max request size to the send limit and the max response
172
147
  // size to the receive limit.
173
- const grpc_core::MessageSizeParsedConfig* limits =
148
+ const grpc_core::MessageSizeParsedConfig* config_from_call_context =
174
149
  grpc_core::MessageSizeParsedConfig::GetFromCallContext(
175
150
  args.context, chand.service_config_parser_index);
176
- if (limits != nullptr) {
177
- if (limits->limits().max_send_size >= 0 &&
178
- (limits->limits().max_send_size < this->limits.max_send_size ||
179
- this->limits.max_send_size < 0)) {
180
- this->limits.max_send_size = limits->limits().max_send_size;
151
+ if (config_from_call_context != nullptr) {
152
+ absl::optional<uint32_t> max_send_size = limits.max_send_size();
153
+ absl::optional<uint32_t> max_recv_size = limits.max_recv_size();
154
+ if (config_from_call_context->max_send_size().has_value() &&
155
+ (!max_send_size.has_value() ||
156
+ *config_from_call_context->max_send_size() < *max_send_size)) {
157
+ max_send_size = *config_from_call_context->max_send_size();
181
158
  }
182
- if (limits->limits().max_recv_size >= 0 &&
183
- (limits->limits().max_recv_size < this->limits.max_recv_size ||
184
- this->limits.max_recv_size < 0)) {
185
- this->limits.max_recv_size = limits->limits().max_recv_size;
159
+ if (config_from_call_context->max_recv_size().has_value() &&
160
+ (!max_recv_size.has_value() ||
161
+ *config_from_call_context->max_recv_size() < *max_recv_size)) {
162
+ max_recv_size = *config_from_call_context->max_recv_size();
186
163
  }
164
+ limits = grpc_core::MessageSizeParsedConfig(max_send_size, max_recv_size);
187
165
  }
188
166
  }
189
167
 
190
- ~call_data() { GRPC_ERROR_UNREF(error); }
168
+ ~call_data() {}
191
169
 
192
170
  grpc_core::CallCombiner* call_combiner;
193
- grpc_core::MessageSizeParsedConfig::message_size_limits limits;
171
+ grpc_core::MessageSizeParsedConfig limits;
194
172
  // Receive closures are chained: we inject this closure as the
195
173
  // recv_message_ready up-call on transport_stream_op, and remember to
196
174
  // call our next_recv_message_ready member after handling it.
197
175
  grpc_closure recv_message_ready;
198
176
  grpc_closure recv_trailing_metadata_ready;
199
- // The error caused by a message that is too large, or GRPC_ERROR_NONE
200
- grpc_error_handle error = GRPC_ERROR_NONE;
177
+ // The error caused by a message that is too large, or absl::OkStatus()
178
+ grpc_error_handle error;
201
179
  // Used by recv_message_ready.
202
180
  absl::optional<grpc_core::SliceBuffer>* recv_message = nullptr;
203
181
  // Original recv_message_ready callback, invoked after our own.
@@ -215,19 +193,18 @@ struct call_data {
215
193
  static void recv_message_ready(void* user_data, grpc_error_handle error) {
216
194
  grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
217
195
  call_data* calld = static_cast<call_data*>(elem->call_data);
218
- if (calld->recv_message->has_value() && calld->limits.max_recv_size >= 0 &&
196
+ if (calld->recv_message->has_value() &&
197
+ calld->limits.max_recv_size().has_value() &&
219
198
  (*calld->recv_message)->Length() >
220
- static_cast<size_t>(calld->limits.max_recv_size)) {
199
+ static_cast<size_t>(*calld->limits.max_recv_size())) {
221
200
  grpc_error_handle new_error = grpc_error_set_int(
222
- GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
201
+ GRPC_ERROR_CREATE(absl::StrFormat(
223
202
  "Received message larger than max (%u vs. %d)",
224
- (*calld->recv_message)->Length(), calld->limits.max_recv_size)),
225
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED);
226
- error = grpc_error_add_child(GRPC_ERROR_REF(error), new_error);
227
- GRPC_ERROR_UNREF(calld->error);
228
- calld->error = GRPC_ERROR_REF(error);
229
- } else {
230
- (void)GRPC_ERROR_REF(error);
203
+ (*calld->recv_message)->Length(), *calld->limits.max_recv_size())),
204
+ grpc_core::StatusIntProperty::kRpcStatus,
205
+ GRPC_STATUS_RESOURCE_EXHAUSTED);
206
+ error = grpc_error_add_child(error, new_error);
207
+ calld->error = error;
231
208
  }
232
209
  // Invoke the next callback.
233
210
  grpc_closure* closure = calld->next_recv_message_ready;
@@ -255,14 +232,13 @@ static void recv_trailing_metadata_ready(void* user_data,
255
232
  call_data* calld = static_cast<call_data*>(elem->call_data);
256
233
  if (calld->next_recv_message_ready != nullptr) {
257
234
  calld->seen_recv_trailing_metadata = true;
258
- calld->recv_trailing_metadata_error = GRPC_ERROR_REF(error);
235
+ calld->recv_trailing_metadata_error = error;
259
236
  GRPC_CALL_COMBINER_STOP(calld->call_combiner,
260
237
  "deferring recv_trailing_metadata_ready until "
261
238
  "after recv_message_ready");
262
239
  return;
263
240
  }
264
- error =
265
- grpc_error_add_child(GRPC_ERROR_REF(error), GRPC_ERROR_REF(calld->error));
241
+ error = grpc_error_add_child(error, calld->error);
266
242
  // Invoke the next callback.
267
243
  grpc_core::Closure::Run(DEBUG_LOCATION,
268
244
  calld->original_recv_trailing_metadata_ready, error);
@@ -273,16 +249,16 @@ static void message_size_start_transport_stream_op_batch(
273
249
  grpc_call_element* elem, grpc_transport_stream_op_batch* op) {
274
250
  call_data* calld = static_cast<call_data*>(elem->call_data);
275
251
  // Check max send message size.
276
- if (op->send_message && calld->limits.max_send_size >= 0 &&
252
+ if (op->send_message && calld->limits.max_send_size().has_value() &&
277
253
  op->payload->send_message.send_message->Length() >
278
- static_cast<size_t>(calld->limits.max_send_size)) {
254
+ static_cast<size_t>(*calld->limits.max_send_size())) {
279
255
  grpc_transport_stream_op_batch_finish_with_failure(
280
256
  op,
281
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
257
+ grpc_error_set_int(GRPC_ERROR_CREATE(absl::StrFormat(
282
258
  "Sent message larger than max (%u vs. %d)",
283
259
  op->payload->send_message.send_message->Length(),
284
- calld->limits.max_send_size)),
285
- GRPC_ERROR_INT_GRPC_STATUS,
260
+ *calld->limits.max_send_size())),
261
+ grpc_core::StatusIntProperty::kRpcStatus,
286
262
  GRPC_STATUS_RESOURCE_EXHAUSTED),
287
263
  calld->call_combiner);
288
264
  return;
@@ -310,7 +286,7 @@ static grpc_error_handle message_size_init_call_elem(
310
286
  grpc_call_element* elem, const grpc_call_element_args* args) {
311
287
  channel_data* chand = static_cast<channel_data*>(elem->channel_data);
312
288
  new (elem->call_data) call_data(elem, *chand, *args);
313
- return GRPC_ERROR_NONE;
289
+ return absl::OkStatus();
314
290
  }
315
291
 
316
292
  // Destructor for call_data.
@@ -321,23 +297,15 @@ static void message_size_destroy_call_elem(
321
297
  calld->~call_data();
322
298
  }
323
299
 
324
- grpc_core::MessageSizeParsedConfig::message_size_limits get_message_size_limits(
325
- const grpc_core::ChannelArgs& channel_args) {
326
- grpc_core::MessageSizeParsedConfig::message_size_limits lim;
327
- lim.max_send_size = grpc_core::GetMaxSendSizeFromChannelArgs(channel_args);
328
- lim.max_recv_size = grpc_core::GetMaxRecvSizeFromChannelArgs(channel_args);
329
- return lim;
330
- }
331
-
332
300
  // Constructor for channel_data.
333
301
  static grpc_error_handle message_size_init_channel_elem(
334
302
  grpc_channel_element* elem, grpc_channel_element_args* args) {
335
303
  GPR_ASSERT(!args->is_last);
336
304
  channel_data* chand = static_cast<channel_data*>(elem->channel_data);
337
305
  new (chand) channel_data();
338
- chand->limits = get_message_size_limits(
306
+ chand->limits = grpc_core::MessageSizeParsedConfig::GetFromChannelArgs(
339
307
  grpc_core::ChannelArgs::FromC(args->channel_args));
340
- return GRPC_ERROR_NONE;
308
+ return absl::OkStatus();
341
309
  }
342
310
 
343
311
  // Destructor for channel_data.
@@ -379,10 +347,11 @@ static bool maybe_add_message_size_filter(
379
347
  if (channel_args.WantMinimalStack()) {
380
348
  return true;
381
349
  }
382
- grpc_core::MessageSizeParsedConfig::message_size_limits lim =
383
- get_message_size_limits(channel_args);
350
+ grpc_core::MessageSizeParsedConfig limits =
351
+ grpc_core::MessageSizeParsedConfig::GetFromChannelArgs(channel_args);
384
352
  const bool enable =
385
- lim.max_send_size != -1 || lim.max_recv_size != -1 ||
353
+ limits.max_send_size().has_value() ||
354
+ limits.max_recv_size().has_value() ||
386
355
  channel_args.GetString(GRPC_ARG_SERVICE_CONFIG).has_value();
387
356
  if (enable) builder->PrependFilter(&grpc_message_size_filter);
388
357
  return true;
@@ -20,18 +20,22 @@
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
22
  #include <stddef.h>
23
+ #include <stdint.h>
23
24
 
24
25
  #include <memory>
25
26
 
26
- #include "absl/status/statusor.h"
27
27
  #include "absl/strings/string_view.h"
28
+ #include "absl/types/optional.h"
28
29
 
29
30
  #include "src/core/lib/channel/channel_args.h"
30
31
  #include "src/core/lib/channel/channel_fwd.h"
31
32
  #include "src/core/lib/channel/channel_stack.h"
32
33
  #include "src/core/lib/channel/context.h"
33
34
  #include "src/core/lib/config/core_configuration.h"
35
+ #include "src/core/lib/gprpp/validation_errors.h"
34
36
  #include "src/core/lib/json/json.h"
37
+ #include "src/core/lib/json/json_args.h"
38
+ #include "src/core/lib/json/json_object_loader.h"
35
39
  #include "src/core/lib/service_config/service_config_parser.h"
36
40
 
37
41
  extern const grpc_channel_filter grpc_message_size_filter;
@@ -40,32 +44,35 @@ namespace grpc_core {
40
44
 
41
45
  class MessageSizeParsedConfig : public ServiceConfigParser::ParsedConfig {
42
46
  public:
43
- struct message_size_limits {
44
- int max_send_size;
45
- int max_recv_size;
46
- };
47
+ absl::optional<uint32_t> max_send_size() const { return max_send_size_; }
48
+ absl::optional<uint32_t> max_recv_size() const { return max_recv_size_; }
47
49
 
48
- MessageSizeParsedConfig(int max_send_size, int max_recv_size) {
49
- limits_.max_send_size = max_send_size;
50
- limits_.max_recv_size = max_recv_size;
51
- }
50
+ MessageSizeParsedConfig() = default;
52
51
 
53
- const message_size_limits& limits() const { return limits_; }
52
+ MessageSizeParsedConfig(absl::optional<uint32_t> max_send_size,
53
+ absl::optional<uint32_t> max_recv_size)
54
+ : max_send_size_(max_send_size), max_recv_size_(max_recv_size) {}
54
55
 
55
56
  static const MessageSizeParsedConfig* GetFromCallContext(
56
57
  const grpc_call_context_element* context,
57
58
  size_t service_config_parser_index);
58
59
 
60
+ static MessageSizeParsedConfig GetFromChannelArgs(const ChannelArgs& args);
61
+
62
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
63
+
59
64
  private:
60
- message_size_limits limits_;
65
+ absl::optional<uint32_t> max_send_size_;
66
+ absl::optional<uint32_t> max_recv_size_;
61
67
  };
62
68
 
63
69
  class MessageSizeParser : public ServiceConfigParser::Parser {
64
70
  public:
65
71
  absl::string_view name() const override { return parser_name(); }
66
72
 
67
- absl::StatusOr<std::unique_ptr<ServiceConfigParser::ParsedConfig>>
68
- ParsePerMethodParams(const ChannelArgs& /*args*/, const Json& json) override;
73
+ std::unique_ptr<ServiceConfigParser::ParsedConfig> ParsePerMethodParams(
74
+ const ChannelArgs& /*args*/, const Json& json,
75
+ ValidationErrors* errors) override;
69
76
 
70
77
  static void Register(CoreConfiguration::Builder* builder);
71
78
 
@@ -75,8 +82,8 @@ class MessageSizeParser : public ServiceConfigParser::Parser {
75
82
  static absl::string_view parser_name() { return "message_size"; }
76
83
  };
77
84
 
78
- int GetMaxRecvSizeFromChannelArgs(const ChannelArgs& args);
79
- int GetMaxSendSizeFromChannelArgs(const ChannelArgs& args);
85
+ absl::optional<uint32_t> GetMaxRecvSizeFromChannelArgs(const ChannelArgs& args);
86
+ absl::optional<uint32_t> GetMaxSendSizeFromChannelArgs(const ChannelArgs& args);
80
87
 
81
88
  } // namespace grpc_core
82
89
 
@@ -21,6 +21,8 @@
21
21
  #include <new>
22
22
  #include <utility>
23
23
 
24
+ #include "absl/status/status.h"
25
+
24
26
  #include <grpc/status.h>
25
27
  #include <grpc/support/log.h>
26
28
 
@@ -28,6 +30,7 @@
28
30
  #include "src/core/lib/channel/channel_args.h"
29
31
  #include "src/core/lib/config/core_configuration.h"
30
32
  #include "src/core/lib/gprpp/debug_location.h"
33
+ #include "src/core/lib/gprpp/status_helper.h"
31
34
  #include "src/core/lib/security/authorization/authorization_engine.h"
32
35
  #include "src/core/lib/security/authorization/grpc_authorization_engine.h"
33
36
  #include "src/core/lib/security/context/security_context.h"
@@ -45,7 +48,7 @@ namespace grpc_core {
45
48
  grpc_error_handle RbacFilter::CallData::Init(
46
49
  grpc_call_element* elem, const grpc_call_element_args* args) {
47
50
  new (elem->call_data) CallData(elem, *args);
48
- return GRPC_ERROR_NONE;
51
+ return absl::OkStatus();
49
52
  }
50
53
 
51
54
  void RbacFilter::CallData::Destroy(grpc_call_element* elem,
@@ -82,7 +85,7 @@ void RbacFilter::CallData::RecvInitialMetadataReady(void* user_data,
82
85
  grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
83
86
  CallData* calld = static_cast<CallData*>(elem->call_data);
84
87
  RbacFilter* filter = static_cast<RbacFilter*>(elem->channel_data);
85
- if (GRPC_ERROR_IS_NONE(error)) {
88
+ if (error.ok()) {
86
89
  // Fetch and apply the rbac policy from the service config.
87
90
  auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
88
91
  calld->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
@@ -90,7 +93,7 @@ void RbacFilter::CallData::RecvInitialMetadataReady(void* user_data,
90
93
  service_config_call_data->GetMethodParsedConfig(
91
94
  filter->service_config_parser_index_));
92
95
  if (method_params == nullptr) {
93
- error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("No RBAC policy found.");
96
+ error = GRPC_ERROR_CREATE("No RBAC policy found.");
94
97
  } else {
95
98
  RbacFilter* chand = static_cast<RbacFilter*>(elem->channel_data);
96
99
  auto* authorization_engine =
@@ -99,16 +102,13 @@ void RbacFilter::CallData::RecvInitialMetadataReady(void* user_data,
99
102
  ->Evaluate(EvaluateArgs(calld->recv_initial_metadata_,
100
103
  &chand->per_channel_evaluate_args_))
101
104
  .type == AuthorizationEngine::Decision::Type::kDeny) {
102
- error =
103
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Unauthorized RPC rejected");
105
+ error = GRPC_ERROR_CREATE("Unauthorized RPC rejected");
104
106
  }
105
107
  }
106
- if (!GRPC_ERROR_IS_NONE(error)) {
107
- error = grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS,
108
+ if (!error.ok()) {
109
+ error = grpc_error_set_int(error, StatusIntProperty::kRpcStatus,
108
110
  GRPC_STATUS_PERMISSION_DENIED);
109
111
  }
110
- } else {
111
- (void)GRPC_ERROR_REF(error);
112
112
  }
113
113
  grpc_closure* closure = calld->original_recv_initial_metadata_ready_;
114
114
  calld->original_recv_initial_metadata_ready_ = nullptr;
@@ -146,20 +146,20 @@ grpc_error_handle RbacFilter::Init(grpc_channel_element* elem,
146
146
  GPR_ASSERT(elem->filter == &kFilterVtable);
147
147
  auto* auth_context = grpc_find_auth_context_in_args(args->channel_args);
148
148
  if (auth_context == nullptr) {
149
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("No auth context found");
149
+ return GRPC_ERROR_CREATE("No auth context found");
150
150
  }
151
151
  auto* transport = grpc_channel_args_find_pointer<grpc_transport>(
152
152
  args->channel_args, GRPC_ARG_TRANSPORT);
153
153
  if (transport == nullptr) {
154
154
  // This should never happen since the transport is always set on the server
155
155
  // side.
156
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("No transport configured");
156
+ return GRPC_ERROR_CREATE("No transport configured");
157
157
  }
158
158
  new (elem->channel_data) RbacFilter(
159
159
  grpc_channel_stack_filter_instance_number(args->channel_stack, elem),
160
160
  EvaluateArgs::PerChannelArgs(auth_context,
161
161
  grpc_transport_get_endpoint(transport)));
162
- return GRPC_ERROR_NONE;
162
+ return absl::OkStatus();
163
163
  }
164
164
 
165
165
  void RbacFilter::Destroy(grpc_channel_element* elem) {